imagefreeze: handle reconfigure events on the srcpad
authorMatthew Waters <matthew@centricular.com>
Tue, 10 Mar 2020 10:07:12 +0000 (21:07 +1100)
committerMatthew Waters <matthew@centricular.com>
Tue, 10 Mar 2020 10:22:20 +0000 (21:22 +1100)
gst/imagefreeze/gstimagefreeze.c
gst/imagefreeze/gstimagefreeze.h

index 20ca303..ace0a11 100644 (file)
@@ -186,7 +186,6 @@ gst_image_freeze_reset (GstImageFreeze * self)
   gst_buffer_replace (&self->buffer, NULL);
   gst_caps_replace (&self->buffer_caps, NULL);
   gst_caps_replace (&self->current_caps, NULL);
-  self->buffer_caps_updated = FALSE;
   self->num_buffers_left = self->num_buffers;
 
   gst_segment_init (&self->segment, GST_FORMAT_TIME);
@@ -790,8 +789,9 @@ gst_image_freeze_sink_chain (GstPad * pad, GstObject * parent,
   }
 
   gst_buffer_replace (&self->buffer, buffer);
-  self->buffer_caps_updated = !self->buffer_caps
-      || !gst_caps_is_equal (self->buffer_caps, self->current_caps);
+  if (!self->buffer_caps
+      || !gst_caps_is_equal (self->buffer_caps, self->current_caps))
+    gst_pad_mark_reconfigure (self->srcpad);
   gst_caps_replace (&self->buffer_caps, self->current_caps);
   gst_buffer_unref (buffer);
 
@@ -822,12 +822,12 @@ gst_image_freeze_src_loop (GstPad * pad)
     goto pause_task;
   }
 
-  if (self->buffer_caps_updated) {
+  if (gst_pad_check_reconfigure (self->srcpad)) {
     GstCaps *buffer_caps = gst_caps_ref (self->buffer_caps);
-    self->buffer_caps_updated = FALSE;
     g_mutex_unlock (&self->lock);
     if (!gst_image_freeze_sink_setcaps (self, buffer_caps)) {
       gst_caps_unref (buffer_caps);
+      gst_pad_mark_reconfigure (self->srcpad);
       flow_ret = GST_FLOW_NOT_NEGOTIATED;
       goto pause_task;
     }
index 779c676..67bf699 100644 (file)
@@ -50,7 +50,6 @@ struct _GstImageFreeze
   GMutex lock;
   GstBuffer *buffer;
   GstCaps *buffer_caps, *current_caps;
-  gboolean buffer_caps_updated;
 
   gboolean negotiated_framerate;
   gint fps_n, fps_d;