[FFmpeg-devel] [PATCH] h264: add AVOption to set x264_build default

wm4 nfxjfg at googlemail.com
Sat Dec 23 04:14:49 EET 2017


This provides a generic way to the API user to deal with files that
either lack this SEI, or which have the SEI only in packets not passed
to the decoder (such as the common case of the SEI being in the very
firsat video packet, but decoding is started somewhere in the middle of
the file). Bugs like 840b41b2a643fc8f0617c0370125a19c02c6b586 make this
somewhat of a necessity.

This intentionally uses the version in the SEI instead, if any is found.
---
A bit crappy. Better than other workarounds I've thought of. And at
least it doesn't require the API user to guess which x264 versions
trigger which bugs.
---
 libavcodec/h264dec.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c
index 1e98765439..8c9c6d9f3b 100644
--- a/libavcodec/h264dec.c
+++ b/libavcodec/h264dec.c
@@ -315,7 +315,6 @@ static int h264_init_context(AVCodecContext *avctx, H264Context *h)
     h->flags                 = avctx->flags;
     h->poc.prev_poc_msb      = 1 << 16;
     h->recovery_frame        = -1;
-    h->x264_build            = -1;
     h->frame_recovered       = 0;
     h->poc.prev_frame_num    = -1;
     h->sei.frame_packing.arrangement_cancel_flag = -1;
@@ -1037,6 +1036,7 @@ static const AVOption h264_options[] = {
     { "is_avc", "is avc", OFFSET(is_avc), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, 0 },
     { "nal_length_size", "nal_length_size", OFFSET(nal_length_size), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 4, 0 },
     { "enable_er", "Enable error resilience on damaged frames (unsafe)", OFFSET(enable_er), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VD },
+    { "x264_build", "Assume this x264 version if no x264 version found in any SEI", OFFSET(x264_build), AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX, VD },
     { NULL },
 };
 
-- 
2.15.1



More information about the ffmpeg-devel mailing list