h264_slice: Copy the value of x264_build before calling h264_slice_header_init during...
authorDerek Buitenhuis <derek.buitenhuis@gmail.com>
Mon, 8 Oct 2018 15:33:26 +0000 (11:33 -0400)
committerDerek Buitenhuis <derek.buitenhuis@gmail.com>
Tue, 9 Oct 2018 14:05:44 +0000 (15:05 +0100)
If we don't copy this value first, it is seen as 0 by h264_slice_header_init,
due to zero-allocation of the new context, triggering an old hack that
multiplied the denominator by 2 for files produced by old x264 versions, but
only if more than one thread was used.

Fixes #7475 and #7083.

Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
libavcodec/h264_slice.c

index 58e1aaf..d09cee4 100644 (file)
@@ -358,6 +358,7 @@ int ff_h264_update_thread_context(AVCodecContext *dst,
         h->mb_num    = h1->mb_num;
         h->mb_stride = h1->mb_stride;
         h->b_stride  = h1->b_stride;
+        h->x264_build = h1->x264_build;
 
         if (h->context_initialized || h1->context_initialized) {
             if ((err = h264_slice_header_init(h)) < 0) {
@@ -399,7 +400,6 @@ int ff_h264_update_thread_context(AVCodecContext *dst,
 
     h->enable_er       = h1->enable_er;
     h->workaround_bugs = h1->workaround_bugs;
-    h->x264_build      = h1->x264_build;
     h->droppable       = h1->droppable;
 
     // extradata/NAL handling