videoencoder: Send all pending events with type < CAPS before sending caps.

https://bugzilla.gnome.org/show_bug.cgi?id=703196
This commit is contained in:
Mathieu Duponchelle 2013-06-27 16:33:15 +02:00 committed by Sebastian Dröge
parent 5a064ca423
commit 798ee17675

View File

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