videotestsrc: Avoid overflow calculation
authorEdward Hervey <edward@centricular.com>
Tue, 21 Nov 2017 09:15:02 +0000 (10:15 +0100)
committerEdward Hervey <bilboed@bilboed.com>
Tue, 21 Nov 2017 09:15:02 +0000 (10:15 +0100)
n_frames could end up being quite big (potentially up to G_MAXINT64). Which
would result in overflowing 64bits when multiplying it by GST_SECOND.

Instead move GST_SECOND to the num argument

gst/videotestsrc/gstvideotestsrc.c

index cfa6619..93d0b13 100644 (file)
@@ -1138,7 +1138,7 @@ gst_video_test_src_fill (GstPushSrc * psrc, GstBuffer * buffer)
   }
 
   GST_LOG_OBJECT (src,
-      "creating buffer from pool for frame %d", (gint) src->n_frames);
+      "creating buffer from pool for frame %" G_GINT64_FORMAT, src->n_frames);
 
   if (!gst_video_frame_map (&frame, &src->info, buffer, GST_MAP_WRITE))
     goto invalid_frame;
@@ -1172,8 +1172,8 @@ gst_video_test_src_fill (GstPushSrc * psrc, GstBuffer * buffer)
   }
   GST_BUFFER_OFFSET_END (buffer) = GST_BUFFER_OFFSET (buffer) + 1;
   if (src->info.fps_n) {
-    next_time = gst_util_uint64_scale_int (src->n_frames * GST_SECOND,
-        src->info.fps_d, src->info.fps_n);
+    next_time = gst_util_uint64_scale (src->n_frames,
+        src->info.fps_d * GST_SECOND, src->info.fps_n);
     if (src->reverse) {
       GST_BUFFER_DURATION (buffer) = src->running_time - next_time;
     } else {