[FFmpeg-cvslog] avformat/mxfenc: Fix guess frame_rate

Nicolas Gaullier git at videolan.org
Wed Sep 4 14:10:51 EEST 2024


ffmpeg | branch: master | Nicolas Gaullier <nicolas.gaullier at cji.paris> | Tue Sep  3 10:02:28 2024 +0200| [59d2900df7c212845ddca79906fba1e3b3096e64] | committer: Anton Khirnov

avformat/mxfenc: Fix guess frame_rate

The 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>
Signed-off-by: Anton Khirnov <anton at khirnov.net>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=59d2900df7c212845ddca79906fba1e3b3096e64
---

 libavformat/mxfenc.c     | 8 ++++++--
 tests/ref/fate/time_base | 2 +-
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c
index 4ac6a2d715..57be9e6ef6 100644
--- a/libavformat/mxfenc.c
+++ b/libavformat/mxfenc.c
@@ -2894,8 +2894,12 @@ 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 tbc = (AVRational){ 0, 0 };
+            if (st->avg_frame_rate.num > 0 && st->avg_frame_rate.den > 0)
+                tbc = av_inv_q(st->avg_frame_rate);
+            else if (st->r_frame_rate.num > 0 && st->r_frame_rate.den > 0)
+                tbc = av_inv_q(st->r_frame_rate);
+
             // Default component depth to 8
             sc->component_depth = 8;
             sc->h_chroma_sub_sample = 2;
diff --git a/tests/ref/fate/time_base b/tests/ref/fate/time_base
index fd6cac53fc..23875d1fb8 100644
--- a/tests/ref/fate/time_base
+++ b/tests/ref/fate/time_base
@@ -1 +1 @@
-d408aba82d62a90ed7f46a1999b014f1
+b28d4ca13029fdc80a114b56467be9d7



More information about the ffmpeg-cvslog mailing list