tsdemux: fix JPEG XS framerate handling for 29.97fps
authorTim-Philipp Müller <tim@centricular.com>
Thu, 26 Dec 2024 00:33:37 +0000 (01:33 +0100)
committerTim-Philipp Müller <tim@centricular.com>
Tue, 31 Dec 2024 16:19:16 +0000 (16:19 +0000)
.. and other framerate values with a 1.001 denominator.

The coded framerate denominator value is a code that maps to
either 1 (for 1) or 1.001 (for 2) not a direct value.

Before, 29.97fps would be announced as 15fps because it
would calculate 30/2 instead of 30/1.001.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8226>

subprojects/gst-plugins-bad/gst/mpegtsdemux/tsdemux.c

index 595510118cd460d12b851a56f5d3f69f1e0a67a7..df1e6a54bdcf6908e9b326cc762282c976b2c598 100644 (file)
@@ -1894,6 +1894,17 @@ create_pad_for_stream (MpegTSBase * base, MpegTSBaseStream * bstream,
       if (jpegxs.frat != 0) {
         gint framerate_num = (jpegxs.frat & 0x0000FFFFU);
         gint framerate_den = ((jpegxs.frat >> 24) & 0x0000003FU);
+        if (framerate_den == 1) {
+          // framerate_den = 1;
+        } else if (framerate_den == 2) {
+          framerate_num *= 1000;
+          framerate_den = 1001;
+        } else {                // Reserved value
+          GST_WARNING_OBJECT (demux,
+              "Unknown JPEG XS framerate denominator code %u", framerate_den);
+          break;
+        }
+
         gst_caps_set_simple (caps,
             "framerate", GST_TYPE_FRACTION, framerate_num, framerate_den, NULL);
       }