[FFmpeg-devel] [PATCH] libavcodec/libx264.c: distinguish between x264 parameter errors
Erik Slagter
erik at slagter.name
Fri Jun 24 12:06:31 CEST 2011
On 24-06-11 11:31, Etienne Buira wrote:
> Most functions in ffmpeg returns 0 on success (or positive), !=0 (resp.<0) otherwise.
Okay, if that's the point... I've reversed the logic.
The rest of our talking is just a misunderstanding imho, I won't address it,
if you don't mind.
New version with also with Cléments comments included.
diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c
index cc5b983..2dc0e9c 100644
--- a/libavcodec/libx264.c
+++ b/libavcodec/libx264.c
@@ -198,14 +198,25 @@ static void check_default_settings(AVCodecContext *avctx)
}
}
-#define OPT_STR(opt, param) \
- do { \
- if (param && x264_param_parse(&x4->params, opt, param) < 0) { \
- av_log(avctx, AV_LOG_ERROR, \
- "bad value for '%s': '%s'\n", opt, param); \
- return -1; \
- } \
- } while (0); \
+static int opt_str(AVCodecContext *avctx, X264Context *x4,
+ const char *opt, const char *param)
+{
+ if (!param)
+ return 0;
+
+ switch (x264_param_parse(&x4->params, opt, param))
+ {
+ case(X264_PARAM_BAD_NAME):
+ av_log(avctx, AV_LOG_ERROR, "no such option: \"%s\"\n", opt);
+ return 1;
+ case(X264_PARAM_BAD_VALUE):
+ av_log(avctx, AV_LOG_ERROR, "bad value: \"%s\" for option \"%s\"\n",
+ param, opt);
+ return 1;
+ default:
+ return 0;
+ }
+}
static av_cold int X264_init(AVCodecContext *avctx)
{
@@ -308,7 +319,8 @@ static av_cold int X264_init(AVCodecContext *avctx)
x4->params.p_log_private = avctx;
x4->params.i_log_level = X264_LOG_DEBUG;
- OPT_STR("weightp", x4->weightp);
+ if (opt_str(avctx, x4, "weightp", x4->weightp))
+ return -1;
x4->params.b_intra_refresh = avctx->flags2 & CODEC_FLAG2_INTRA_REFRESH;
x4->params.rc.i_bitrate = avctx->bit_rate / 1000;
@@ -328,7 +340,8 @@ static av_cold int X264_init(AVCodecContext *avctx)
}
}
- OPT_STR("stats", x4->stats);
+ if (opt_str(avctx, x4, "stats", x4->stats))
+ return -1;
// if neither crf nor cqp modes are selected we have to enable the RC
// we do it this way because we cannot check if the bitrate has been set
@@ -341,14 +354,16 @@ static av_cold int X264_init(AVCodecContext *avctx)
(float)avctx->rc_initial_buffer_occupancy / avctx->rc_buffer_size;
}
- OPT_STR("level", x4->level);
+ if (opt_str(avctx, x4, "level", x4->level))
+ return -1;
if(x4->x264opts){
const char *p= x4->x264opts;
while(p){
char param[256]={0}, val[256]={0};
sscanf(p, "%255[^:=]=%255[^:]", param, val);
- OPT_STR(param, val);
+ if (opt_str(avctx, x4, param, val))
+ return -1;
p= strchr(p, ':');
p+=!!p;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 5110 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20110624/aad1d678/attachment.p7s>
More information about the ffmpeg-devel
mailing list