mfvideoenc: Don't pass 0/1 framerate to MFT
authorSeungha Yang <seungha@centricular.com>
Wed, 24 Mar 2021 18:24:11 +0000 (03:24 +0900)
committerSeungha Yang <seungha@centricular.com>
Wed, 24 Mar 2021 18:27:24 +0000 (03:27 +0900)
Some MFT implementations do not accept 0/1 framerate and it will
result in encoder open failure. If framerate is unknown,
we will use arbitrary 25/1 framerate value.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2106>

sys/mediafoundation/gstmfvideoenc.cpp

index 8bedc5f..968a6e4 100644 (file)
@@ -320,8 +320,11 @@ gst_mf_video_enc_set_format (GstVideoEncoder * enc, GstVideoCodecState * state)
 
   fps_n = GST_VIDEO_INFO_FPS_N (info);
   fps_d = GST_VIDEO_INFO_FPS_D (info);
-  if (fps_n == 0 || fps_d == 0) {
-    fps_n = 0;
+  if (fps_n <= 0 || fps_d <= 0) {
+    /* XXX: not sure why. NVIDIA MFT accepts 0/1 framerate, but Intel or
+     * Microsoft's software MFT doesn't accept 0/1 framerate.
+     * Need to set something meaningful value here therefore */
+    fps_n = 25;
     fps_d = 1;
   }