gst/: Fix event handling.

Original commit message from CVS:
2004-01-30  Ronald Bultje  <rbultje@ronald.bitfreak.net>

* gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head),
(gst_riff_read_seek):
* gst/matroska/ebml-read.c: (gst_ebml_read_element_id),
(gst_ebml_read_seek):
Fix event handling.
This commit is contained in:
Ronald S. Bultje 2004-01-30 12:37:58 +00:00
parent 5e56acb575
commit 82d8ba320f
2 changed files with 28 additions and 16 deletions

View file

@ -1,3 +1,11 @@
2004-01-30 Ronald Bultje <rbultje@ronald.bitfreak.net>
* gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head),
(gst_riff_read_seek):
* gst/matroska/ebml-read.c: (gst_ebml_read_element_id),
(gst_ebml_read_seek):
Fix event handling.
2004-01-30 Benjamin Otte <in7y118@public.uni-hamburg.de> 2004-01-30 Benjamin Otte <in7y118@public.uni-hamburg.de>
* ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_codecid_to_caps): * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_codecid_to_caps):

View file

@ -156,13 +156,13 @@ gst_ebml_read_element_id (GstEbmlRead *ebml,
gint len_mask = 0x80, read = 1, n = 1; gint len_mask = 0x80, read = 1, n = 1;
guint32 total; guint32 total;
if (gst_bytestream_peek_bytes (ebml->bs, &data, 1) != 1) { while (gst_bytestream_peek_bytes (ebml->bs, &data, 1) != 1) {
GstEvent *event = NULL; GstEvent *event = NULL;
guint32 remaining; guint32 remaining;
/* Here, we might encounter EOS */ /* Here, we might encounter EOS */
gst_bytestream_get_status (ebml->bs, &remaining, &event); gst_bytestream_get_status (ebml->bs, &remaining, &event);
if (event && GST_EVENT_TYPE (event) == GST_EVENT_EOS) { if (event) {
gst_pad_event_default (ebml->sinkpad, event); gst_pad_event_default (ebml->sinkpad, event);
} else { } else {
guint64 pos = gst_bytestream_tell (ebml->bs); guint64 pos = gst_bytestream_tell (ebml->bs);
@ -170,8 +170,8 @@ gst_ebml_read_element_id (GstEbmlRead *ebml,
GST_ELEMENT_ERROR (ebml, RESOURCE, READ, NULL, GST_ELEMENT_ERROR (ebml, RESOURCE, READ, NULL,
("Read error at position %llu (0x%llx)", ("Read error at position %llu (0x%llx)",
pos, pos)); pos, pos));
return -1;
} }
return -1;
} }
total = data[0]; total = data[0];
while (read <= 4 && !(total & len_mask)) { while (read <= 4 && !(total & len_mask)) {
@ -313,7 +313,7 @@ gst_ebml_read_seek (GstEbmlRead *ebml,
guint64 offset) guint64 offset)
{ {
guint32 remaining; guint32 remaining;
GstEvent *event; GstEvent *event = NULL;
guchar *data; guchar *data;
/* first, flush remaining buffers */ /* first, flush remaining buffers */
@ -332,19 +332,23 @@ gst_ebml_read_seek (GstEbmlRead *ebml,
return NULL; return NULL;
} }
/* and now, peek a new byte. This will fail because there's a while (!event) {
* pending event. Then, take the event and return it. */ /* and now, peek a new byte. This will fail because there's a
if (gst_bytestream_peek_bytes (ebml->bs, &data, 1)) * pending event. Then, take the event and return it. */
g_warning ("Unexpected data after seek"); if (gst_bytestream_peek_bytes (ebml->bs, &data, 1)) {
GST_WARNING ("Unexpected data after seek - this means seek failed");
break;
}
/* get the discont event and return */ /* get the discont event and return */
gst_bytestream_get_status (ebml->bs, &remaining, &event); gst_bytestream_get_status (ebml->bs, &remaining, &event);
if (!event || GST_EVENT_TYPE (event) != GST_EVENT_DISCONTINUOUS) { if (!event) {
GST_ELEMENT_ERROR (ebml, CORE, SEEK, NULL, GST_WARNING ("No discontinuity event after seek - seek failed");
("No discontinuity event after seek")); break;
if (event) } else if (GST_EVENT_TYPE (event) != GST_EVENT_DISCONTINUOUS) {
gst_event_unref (event); gst_pad_event_default (ebml->sinkpad, event);
return NULL; event = NULL;
}
} }
return event; return event;