nvdec: Fix division by zero when calculating buffer duration
authorSeungha Yang <seungha@centricular.com>
Tue, 5 Dec 2023 10:52:22 +0000 (19:52 +0900)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Thu, 14 Dec 2023 12:05:08 +0000 (12:05 +0000)
Don't try to calculate buffer duration from variable framerate

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

subprojects/gst-plugins-bad/sys/nvcodec/gstnvdec.c

index 8c259cf..31313c7 100644 (file)
@@ -808,10 +808,14 @@ parser_display_callback (GstNvDec * nvdec, CUVIDPARSERDISPINFO * dispinfo)
     GST_BUFFER_PTS (output_buffer) = dispinfo->timestamp;
     GST_BUFFER_DTS (output_buffer) = GST_CLOCK_TIME_NONE;
     /* assume buffer duration from framerate */
-    GST_BUFFER_DURATION (output_buffer) =
-        gst_util_uint64_scale (GST_SECOND,
-        GST_VIDEO_INFO_FPS_D (&nvdec->out_info),
-        GST_VIDEO_INFO_FPS_N (&nvdec->out_info));
+    if (nvdec->out_info.fps_n > 0 && nvdec->out_info.fps_d > 0) {
+      GST_BUFFER_DURATION (output_buffer) =
+          gst_util_uint64_scale (GST_SECOND,
+          GST_VIDEO_INFO_FPS_D (&nvdec->out_info),
+          GST_VIDEO_INFO_FPS_N (&nvdec->out_info));
+    } else {
+      GST_BUFFER_DURATION (output_buffer) = GST_CLOCK_TIME_NONE;
+    }
   } else {
     ret = gst_video_decoder_allocate_output_frame (GST_VIDEO_DECODER (nvdec),
         frame);