[FFmpeg-devel] [PATCH] h264_slice: Copy the value of x264_build before calling h264_slice_header_init during thread init

Carl Eugen Hoyos ceffmpeg at gmail.com
Mon Oct 8 21:23:56 EEST 2018


2018-10-08 17:36 GMT+02:00, Derek Buitenhuis <derek.buitenhuis at gmail.com>:
> 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 at gmail.com>
> ---
>  libavcodec/h264_slice.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> 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;

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?

Carl Eugen


More information about the ffmpeg-devel mailing list