avenc_mpeg2video:Apply the patch for breaking some encoders 58/287458/2
authorjiyong.min <jiyong.min@samsung.com>
Mon, 30 Jan 2023 06:05:39 +0000 (15:05 +0900)
committerjiyong.min <jiyong.min@samsung.com>
Mon, 30 Jan 2023 06:16:06 +0000 (15:16 +0900)
- https://github.com/GStreamer/gstreamer/commit/5372b77987cbdf16f681526152325bee8388ab62
Revert "avvidenc: Set timebase in the ffmpeg context to nanoseconds a…
…nd set framerate"

This reverts commit 50db594.

This broke the MPEG-1 video encoder as it requires the framerate to be
used for the timebase.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1734
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3780>

Change-Id: I40383d874e929d1eade6f586e5a977631d4d556e

packaging/gstreamer.spec
subprojects/gst-libav/ext/libav/gstavcodecmap.c
subprojects/gst-libav/ext/libav/gstavvidenc.c

index 08dcd5e..0c10182 100644 (file)
@@ -62,7 +62,7 @@
 
 Name:           %{_name}
 Version:        1.22.0
-Release:        2
+Release:        3
 Summary:        Streaming-Media Framework Runtime
 License:        LGPL-2.0+
 Group:          Multimedia/Framework
index 0dfcd49..bc2becb 100644 (file)
@@ -2959,13 +2959,14 @@ gst_ffmpeg_videoinfo_to_context (GstVideoInfo * info, AVCodecContext * context)
     bpp += GST_VIDEO_INFO_COMP_DEPTH (info, i);
   context->bits_per_coded_sample = bpp;
 
-  context->time_base.den = 1000000000;
-  context->time_base.num = 1;
   context->ticks_per_frame = 1;
-
-  if (GST_VIDEO_INFO_FPS_N (info) != 0) {
-    context->framerate.num = GST_VIDEO_INFO_FPS_N (info);
-    context->framerate.den = GST_VIDEO_INFO_FPS_D (info);
+  if (GST_VIDEO_INFO_FPS_N (info) == 0) {
+    GST_DEBUG ("Using 25/1 framerate");
+    context->time_base.den = 25;
+    context->time_base.num = 1;
+  } else {
+    context->time_base.den = GST_VIDEO_INFO_FPS_N (info);
+    context->time_base.num = GST_VIDEO_INFO_FPS_D (info);
   }
 
   context->sample_aspect_ratio.num = GST_VIDEO_INFO_PAR_N (info);
index 9659d69..34d4165 100644 (file)
@@ -308,7 +308,9 @@ gst_ffmpegvidenc_set_format (GstVideoEncoder * encoder,
      * (1<<16) - 1 . We therefore scale them down.
      * Agreed, it will not be the exact framerate... but the difference
      * shouldn't be that noticeable */
-    ffmpegenc->context->time_base.num = 1;
+    ffmpegenc->context->time_base.num =
+        (gint) gst_util_uint64_scale_int (ffmpegenc->context->time_base.num,
+        65535, ffmpegenc->context->time_base.den);
     ffmpegenc->context->time_base.den = 65535;
     GST_LOG_OBJECT (ffmpegenc, "MPEG4 : scaled down framerate to %d / %d",
         ffmpegenc->context->time_base.den, ffmpegenc->context->time_base.num);