From f836b2f80ea6b793526356155a3773cf594441a4 Mon Sep 17 00:00:00 2001 From: "Ronald S. Bultje" Date: Thu, 9 Jun 2005 16:00:20 +0000 Subject: gst/qtdemux/qtdemux.c: Fix EOS handling (#305150). Original commit message from CVS: * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header): Fix EOS handling (#305150). --- gst/qtdemux/qtdemux.c | 34 ++++++++++++---------------------- 1 file changed, 12 insertions(+), 22 deletions(-) (limited to 'gst/qtdemux/qtdemux.c') diff --git a/gst/qtdemux/qtdemux.c b/gst/qtdemux/qtdemux.c index f6c5da9a..c92c2a9b 100644 --- a/gst/qtdemux/qtdemux.c +++ b/gst/qtdemux/qtdemux.c @@ -105,7 +105,6 @@ enum QtDemuxState QTDEMUX_STATE_SEEKING, QTDEMUX_STATE_MOVIE, QTDEMUX_STATE_SEEKING_EOS, - QTDEMUX_STATE_EOS }; static GNode *qtdemux_tree_get_child_by_type (GNode * node, guint32 fourcc); @@ -700,26 +699,27 @@ gst_qtdemux_loop_header (GstElement * element) { guint8 *data; - do { + for (;;) { ret = gst_bytestream_peek_bytes (qtdemux->bs, &data, 1); if (ret < 1) { if (gst_qtdemux_handle_sink_event (qtdemux)) { - return; + continue; } else { - break; + return; } } else { - break; - } - } while (TRUE); - gst_element_set_eos (element); + guint32 remain; - qtdemux->state = QTDEMUX_STATE_EOS; + gst_bytestream_get_status (qtdemux->bs, &remain, NULL); + if (!gst_bytestream_seek (qtdemux->bs, 0, GST_SEEK_METHOD_END)) { + gst_bytestream_flush_fast (qtdemux->bs, remain); + } + return; + } + } + while (TRUE); return; } - case QTDEMUX_STATE_EOS: - g_warning ("spinning in EOS\n"); - return; case QTDEMUX_STATE_MOVIE: { QtDemuxStream *stream; @@ -739,16 +739,6 @@ gst_qtdemux_loop_header (GstElement * element) } if (index == -1) { - for (i = 0; i < qtdemux->n_streams; i++) { - gst_pad_push (qtdemux->streams[i]->pad, - GST_DATA (gst_event_new (GST_EVENT_EOS))); - } - ret = gst_bytestream_seek (qtdemux->bs, 0, GST_SEEK_METHOD_END); - if (ret == FALSE) { - gst_bytestream_flush (qtdemux->bs, 0xffffffff); - } - GST_DEBUG ("seek returned %d", ret); - qtdemux->state = QTDEMUX_STATE_SEEKING_EOS; return; } -- cgit v1.2.1