intervideosrc: Fix GAP flag setting on non-black frames
authorArun Raghavan <arun@centricular.com>
Fri, 23 Jan 2015 06:58:42 +0000 (12:28 +0530)
committerArun Raghavan <git@arunraghavan.net>
Fri, 23 Jan 2015 07:17:03 +0000 (12:47 +0530)
The previous commit fixed setting the GAP flag on black frames, but
incorrectly dropped the flag on repeated pushes of the same video
buffer.

gst/inter/gstintervideosrc.c

index b13656e0070fd7f5f1825b7cdb9298f53b36b66c..6553ed1ef67c2daae6e97bd4dfd58b5de8f5cc43 100644 (file)
@@ -363,21 +363,21 @@ gst_inter_video_src_create (GstBaseSrc * src, guint64 offset, guint size,
   if (intervideosrc->surface->video_buffer) {
     /* We have a buffer to push */
     buffer = gst_buffer_ref (intervideosrc->surface->video_buffer);
-    intervideosrc->surface->video_buffer_count++;
 
     /* Can only be true if timeout > 0 */
-    if (intervideosrc->surface->video_buffer_count >= frames) {
+    if (intervideosrc->surface->video_buffer_count == frames) {
       gst_buffer_unref (intervideosrc->surface->video_buffer);
       intervideosrc->surface->video_buffer = NULL;
     }
-  } else if (intervideosrc->surface->video_buffer_count == frames) {
-    /* This will be our first black frame */
-    intervideosrc->surface->video_buffer_count++;
-  } else if (intervideosrc->surface->video_buffer_count > frames) {
-    /* The first black buffer is not a GAP, but the following ones are */
+  }
+
+  if (intervideosrc->surface->video_buffer_count != 0 &&
+      intervideosrc->surface->video_buffer_count != (frames + 1)) {
+    /* This is a repeat of the stored buffer or of a black frame */
     is_gap = TRUE;
   }
 
+  intervideosrc->surface->video_buffer_count++;
   g_mutex_unlock (&intervideosrc->surface->mutex);
 
   if (caps) {