adder: send stream-start event, and send caps event after stream-start

Delay sending of caps event so that it is sent only after
the stream-start event.
This commit is contained in:
Tim-Philipp Müller 2012-09-23 13:31:17 +01:00
parent 1c22b1fe11
commit cec6d634b6
2 changed files with 24 additions and 1 deletions

View file

@ -296,7 +296,7 @@ gst_adder_setcaps (GstAdder * adder, GstPad * pad, GstCaps * caps)
GST_INFO_OBJECT (pad, "setting caps to %" GST_PTR_FORMAT, caps);
adder->current_caps = gst_caps_ref (caps);
gst_pad_push_event (adder->srcpad, gst_event_new_caps (adder->current_caps));
/* send caps event later, after stream-start event */
it = gst_element_iterate_pads (GST_ELEMENT_CAST (adder));
@ -1114,6 +1114,24 @@ gst_adder_collected (GstCollectPads * pads, gpointer user_data)
if (G_UNLIKELY (adder->func == NULL))
goto not_negotiated;
if (adder->send_stream_start) {
gchar s_id[32];
/* stream-start (FIXME: create id based on input ids) */
g_snprintf (s_id, sizeof (s_id), "adder-%08x", g_random_int ());
gst_pad_push_event (adder->srcpad, gst_event_new_stream_start (s_id));
adder->send_stream_start = FALSE;
}
if (adder->send_caps) {
GstEvent *caps_event;
caps_event = gst_event_new_caps (adder->current_caps);
GST_INFO_OBJECT (adder, "caps event %" GST_PTR_FORMAT, caps_event);
gst_pad_push_event (adder->srcpad, caps_event);
adder->send_caps = FALSE;
}
if (g_atomic_int_compare_and_exchange (&adder->flush_stop_pending,
TRUE, FALSE)) {
GST_DEBUG_OBJECT (adder, "pending flush stop");
@ -1339,6 +1357,8 @@ gst_adder_change_state (GstElement * element, GstStateChange transition)
adder->flush_stop_pending = FALSE;
adder->new_segment_pending = TRUE;
adder->wait_for_new_segment = FALSE;
adder->send_stream_start = TRUE;
adder->send_caps = TRUE;
gst_caps_replace (&adder->current_caps, NULL);
gst_segment_init (&adder->segment, GST_FORMAT_TIME);
gst_collect_pads_start (adder->collect);

View file

@ -81,6 +81,9 @@ struct _GstAdder {
GList *pending_events;
gboolean in_setcaps;
gboolean send_stream_start;
gboolean send_caps;
};
struct _GstAdderClass {