Message ID | 20181008153627.22264-1-derek.buitenhuis@gmail.com |
---|---|
State | Accepted |
Headers | show |
On 10/8/2018 3:45 PM, Derek Buitenhuis wrote: > On 08/10/2018 19:23, Carl Eugen Hoyos wrote: >> I cannot reproduce ticket #7475 (it says "framerate num 30 den 1" >> no matter how many threads I use, tested with up to 8), and - more >> related to this patch - the sample from ticket #7475 reaches neither >> line 358 nor line 400 in h264_slice.c here when running the command >> shown in the ticket. >> >> $ md5sum crew_cif_timecode-2.h264 >> 43fbbb4ead1af31ed19dbb6582761d73 crew_cif_timecode-2.h264 >> >> Do you know what I am doing wrong? > > Your MD5 matches mine. > > Running on Linux (vanilla Debian unstable), using the patch from the trac entry: > $ ffmpeg -threads 1 -i crew_cif_timecode-2.h264 -f null - > > I get this: https://pastebin.com/9TLB0ewm > > And with: > $ ffmpeg -threads 2 -i crew_cif_timecode-2.h264 -f null - > > I get this: https://pastebin.com/upaJUXUA > > Any value above 1 should be enough to reproduce. > > It's possible it may only present itself on Linux (if you are on Windows). No, i can reproduce it on Windows with a mingw-w64 build. Same output as the one you pasted, and your patch fixes it.
diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c index 58e1aaf02f..d09cee4b13 100644 --- a/libavcodec/h264_slice.c +++ b/libavcodec/h264_slice.c @@ -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
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. Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com> --- libavcodec/h264_slice.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)