diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2013-05-15 10:12:09 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2013-05-15 10:12:09 +0200 |
commit | 9e2aee01a8eb2243a39f3859bc82a52a99a3456f (patch) | |
tree | de12e8dfe1b2be97f616a3a79dd5c886b7db74a7 /ext/kate | |
parent | d997c5db0ea61ae8900b8fa74e376c087ef6b21a (diff) | |
download | gstreamer-plugins-bad-9e2aee01a8eb2243a39f3859bc82a52a99a3456f.tar.gz |
kateenc: Delay segment event until we have caps
Diffstat (limited to 'ext/kate')
-rw-r--r-- | ext/kate/gstkateenc.c | 27 | ||||
-rw-r--r-- | ext/kate/gstkateenc.h | 2 |
2 files changed, 23 insertions, 6 deletions
diff --git a/ext/kate/gstkateenc.c b/ext/kate/gstkateenc.c index 371a6a2a3..2e53b09a5 100644 --- a/ext/kate/gstkateenc.c +++ b/ext/kate/gstkateenc.c @@ -629,6 +629,10 @@ gst_kate_enc_send_headers (GstKateEnc * ke) gst_pad_set_caps (ke->srcpad, caps); gst_caps_unref (caps); + if (ke->pending_segment) + gst_pad_push_event (ke->srcpad, ke->pending_segment); + ke->pending_segment = NULL; + GST_LOG_OBJECT (ke, "pushing headers"); item = headers; while (item) { @@ -1091,6 +1095,7 @@ gst_kate_enc_change_state (GstElement * element, GstStateChange transition) ke->last_timestamp = 0; ke->latest_end_time = 0; } + gst_event_replace (&ke->pending_segment, NULL); break; case GST_STATE_CHANGE_READY_TO_NULL: break; @@ -1222,16 +1227,23 @@ gst_kate_enc_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) gst_event_unref (event); break; } - case GST_EVENT_SEGMENT: + case GST_EVENT_SEGMENT: { + GstSegment seg; + GST_LOG_OBJECT (ke, "Got newsegment event"); + + gst_event_copy_segment (event, &seg); + + if (!ke->headers_sent) { + gst_event_replace (&ke->pending_segment, event); + event = NULL; + } + if (ke->initialized) { GST_LOG_OBJECT (ke, "ensuring all headers are in"); if (gst_kate_enc_flush_headers (ke) != GST_FLOW_OK) { GST_WARNING_OBJECT (ke, "Failed to flush headers"); } else { - GstSegment seg; - - gst_event_copy_segment (event, &seg); if (seg.format != GST_FORMAT_TIME || !GST_CLOCK_TIME_IS_VALID (seg.start)) { GST_WARNING_OBJECT (ke, @@ -1269,9 +1281,12 @@ gst_kate_enc_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) } } } - ret = gst_pad_push_event (ke->srcpad, event); + if (event) + ret = gst_pad_push_event (ke->srcpad, event); + else + ret = TRUE; break; - + } case GST_EVENT_CUSTOM_DOWNSTREAM: GST_LOG_OBJECT (ke, "Got custom downstream event"); /* adapted from the dvdsubdec element */ diff --git a/ext/kate/gstkateenc.h b/ext/kate/gstkateenc.h index 47a17895e..ff4dc5f1f 100644 --- a/ext/kate/gstkateenc.h +++ b/ext/kate/gstkateenc.h @@ -81,6 +81,8 @@ struct _GstKateEnc GstClockTime last_timestamp; GstClockTime latest_end_time; + GstEvent *pending_segment; + gboolean headers_sent; gboolean initialized; gboolean delayed_spu; |