[FFmpeg-devel] [PATCH 1/2] avformat/mxfenc: Fix guess frame_rate

Anton Khirnov anton at khirnov.net
Sun Sep 1 13:53:32 EEST 2024


Quoting Nicolas Gaullier (2024-08-22 18:55:32)
> The input time_base was a bad guess.
> 
> Currently, fate-time_base test data assumed that overriding the input
> time_base would affect the frame_rate, but this behaviour is not
> documented, so just fix the fate data now that this is fixed.
> 
> Fix regression since 10185e2d4c1e9839bc58a1d6a63c861677b13fd0:
> previously, when streamcopying, the time_base was guessed from the
> frame_rate considering it is often constant, so guessing the frame_rate
> back from the time_base was often not a problem.
> 
> To reproduce:
> ffmpeg -i fate-suite/mpeg2/dvd_still_frame.vob -an -c copy out.mxf
> 
> Signed-off-by: Nicolas Gaullier <nicolas.gaullier at cji.paris>
> ---
>  libavformat/mxfenc.c     | 9 +++++++--
>  tests/ref/fate/time_base | 2 +-
>  2 files changed, 8 insertions(+), 3 deletions(-)
> 
> diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c
> index 4ac6a2d715..a814f15609 100644
> --- a/libavformat/mxfenc.c
> +++ b/libavformat/mxfenc.c
> @@ -2894,8 +2894,13 @@ static int mxf_init(AVFormatContext *s)
>  
>          if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
>              const AVPixFmtDescriptor *pix_desc = av_pix_fmt_desc_get(st->codecpar->format);
> -            // TODO: should be avg_frame_rate
> -            AVRational tbc = st->time_base;
> +            AVRational frame_rate = (AVRational){ 0, 1 };
> +            if (st->avg_frame_rate.num > 0 && st->avg_frame_rate.den > 0)
> +                frame_rate = st->avg_frame_rate;
> +            else if (st->r_frame_rate.num > 0 && st->r_frame_rate.den > 0)
> +                frame_rate = st->r_frame_rate;
> +            AVRational tbc = av_inv_q(frame_rate);

Should it not still fall back to time_base when neither avg_frame_rate
nor r_frame_rate is set?

-- 
Anton Khirnov


More information about the ffmpeg-devel mailing list