videoencoder: Send all pending events with type < CAPS before sending caps.
authorMathieu Duponchelle <mathieu.duponchelle@epitech.eu>
Thu, 27 Jun 2013 14:33:15 +0000 (16:33 +0200)
committerSebastian Dröge <slomo@circular-chaos.org>
Mon, 1 Jul 2013 09:15:21 +0000 (11:15 +0200)
https://bugzilla.gnome.org/show_bug.cgi?id=703196

gst-libs/gst/video/gstvideoencoder.c

index dd5b8c3..cdd7372 100644 (file)
@@ -1483,7 +1483,6 @@ gst_video_encoder_negotiate_default (GstVideoEncoder * encoder)
   frame = encoder->priv->frames ? encoder->priv->frames->data : NULL;
   if (frame || encoder->priv->current_frame_events) {
     GList **events, *l;
-    gboolean set_caps = FALSE;
 
     if (frame) {
       events = &frame->events;
@@ -1496,23 +1495,18 @@ gst_video_encoder_negotiate_default (GstVideoEncoder * encoder)
       GstEvent *event = GST_EVENT (l->data);
       GList *tmp;
 
-      if (GST_EVENT_TYPE (event) > GST_EVENT_CAPS && !set_caps) {
-        ret = gst_pad_set_caps (encoder->srcpad, state->caps);
-        set_caps = TRUE;
-        break;
+      if (GST_EVENT_TYPE (event) < GST_EVENT_CAPS) {
+        gst_video_encoder_push_event (encoder, event);
+        tmp = l;
+        l = l->prev;
+        *events = g_list_delete_link (*events, tmp);
+      } else {
+        l = l->prev;
       }
-      gst_video_encoder_push_event (encoder, event);
-      tmp = l;
-      l = l->prev;
-      *events = g_list_delete_link (*events, tmp);
     }
-    if (!set_caps) {
-      ret = gst_pad_set_caps (encoder->srcpad, state->caps);
-    }
-  } else {
-    ret = gst_pad_set_caps (encoder->srcpad, state->caps);
   }
 
+  ret = gst_pad_set_caps (encoder->srcpad, state->caps);
   if (!ret)
     goto done;