diff options
author | Sebastian Dröge <slomo@circular-chaos.org> | 2008-10-27 09:10:54 +0000 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2009-05-12 21:20:57 +0200 |
commit | f55a5aa02486714d65067b7d9d70c60058fd12c8 (patch) | |
tree | da42fe3904b6e10699fb3d9a68709d2cf16c0430 /gst/flv | |
parent | 6c61c0b78dc7f7da1a97dc5c4c18476caadd705b (diff) |
[MOVED FROM BAD 32/57] gst/flv/: Close the currently playing segment from the streaming thread instead of the thread where the seek event is...
Original commit message from CVS:
* gst/flv/gstflvdemux.c: (gst_flv_demux_cleanup),
(gst_flv_demux_handle_seek_pull), (gst_flv_demux_dispose):
* gst/flv/gstflvdemux.h:
* gst/flv/gstflvparse.c: (gst_flv_parse_tag_audio),
(gst_flv_parse_tag_video):
Close the currently playing segment from the streaming thread
instead of the thread where the seek event is handled.
Diffstat (limited to 'gst/flv')
-rw-r--r-- | gst/flv/gstflvdemux.c | 32 | ||||
-rw-r--r-- | gst/flv/gstflvdemux.h | 1 | ||||
-rw-r--r-- | gst/flv/gstflvparse.c | 8 |
3 files changed, 32 insertions, 9 deletions
diff --git a/gst/flv/gstflvdemux.c b/gst/flv/gstflvdemux.c index df018587..028dded8 100644 --- a/gst/flv/gstflvdemux.c +++ b/gst/flv/gstflvdemux.c @@ -112,6 +112,11 @@ gst_flv_demux_cleanup (GstFLVDemux * demux) demux->new_seg_event = NULL; } + if (demux->close_seg_event) { + gst_event_unref (demux->close_seg_event); + demux->close_seg_event = NULL; + } + gst_adapter_clear (demux->adapter); if (demux->audio_codec_data) { @@ -774,14 +779,18 @@ gst_flv_demux_handle_seek_pull (GstFLVDemux * demux, GstEvent * event) GST_DEBUG_OBJECT (demux, "closing running segment %" GST_SEGMENT_FORMAT, demux->segment); - /* Close the current segment for a linear playback, FIXME, queue for - * streaming thread. */ + if (G_UNLIKELY (demux->close_seg_event)) { + gst_event_unref (demux->close_seg_event); + demux->close_seg_event = NULL; + } + + /* Close the current segment for a linear playback */ if (demux->segment->rate >= 0) { /* for forward playback, we played from start to last_stop */ - gst_pad_event_default (demux->sinkpad, gst_event_new_new_segment (TRUE, - demux->segment->rate, demux->segment->format, - demux->segment->start, demux->segment->last_stop, - demux->segment->time)); + demux->close_seg_event = gst_event_new_new_segment (TRUE, + demux->segment->rate, demux->segment->format, + demux->segment->start, demux->segment->last_stop, + demux->segment->time); } else { gint64 stop; @@ -789,9 +798,9 @@ gst_flv_demux_handle_seek_pull (GstFLVDemux * demux, GstEvent * event) stop = demux->segment->duration; /* for reverse playback, we played from stop to last_stop. */ - gst_pad_event_default (demux->sinkpad, gst_event_new_new_segment (TRUE, - demux->segment->rate, demux->segment->format, - demux->segment->last_stop, stop, demux->segment->last_stop)); + demux->close_seg_event = gst_event_new_new_segment (TRUE, + demux->segment->rate, demux->segment->format, + demux->segment->last_stop, stop, demux->segment->last_stop); } } @@ -1139,6 +1148,11 @@ gst_flv_demux_dispose (GObject * object) demux->new_seg_event = NULL; } + if (demux->close_seg_event) { + gst_event_unref (demux->close_seg_event); + demux->close_seg_event = NULL; + } + if (demux->audio_codec_data) { gst_buffer_unref (demux->audio_codec_data); demux->audio_codec_data = NULL; diff --git a/gst/flv/gstflvdemux.h b/gst/flv/gstflvdemux.h index 989584c4..210db2fd 100644 --- a/gst/flv/gstflvdemux.h +++ b/gst/flv/gstflvdemux.h @@ -67,6 +67,7 @@ struct _GstFLVDemux GstSegment *segment; + GstEvent *close_seg_event; GstEvent *new_seg_event; GstTagList *taglist; diff --git a/gst/flv/gstflvparse.c b/gst/flv/gstflvparse.c index 16c83ec3..b68edd68 100644 --- a/gst/flv/gstflvparse.c +++ b/gst/flv/gstflvparse.c @@ -699,6 +699,10 @@ gst_flv_parse_tag_audio (GstFLVDemux * demux, const guint8 * data, /* Do we need a newsegment event ? */ if (G_UNLIKELY (demux->audio_need_segment)) { + if (demux->close_seg_event) + gst_pad_push_event (demux->audio_pad, + gst_event_ref (demux->close_seg_event)); + if (!demux->new_seg_event) { GST_DEBUG_OBJECT (demux, "pushing newsegment from %" GST_TIME_FORMAT " to %" GST_TIME_FORMAT, @@ -1007,6 +1011,10 @@ gst_flv_parse_tag_video (GstFLVDemux * demux, const guint8 * data, /* Do we need a newsegment event ? */ if (G_UNLIKELY (demux->video_need_segment)) { + if (demux->close_seg_event) + gst_pad_push_event (demux->video_pad, + gst_event_ref (demux->close_seg_event)); + if (!demux->new_seg_event) { GST_DEBUG_OBJECT (demux, "pushing newsegment from %" GST_TIME_FORMAT " to %" GST_TIME_FORMAT, |