mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-09-02 02:03:54 +00:00
gst/mpegstream/gstmpegparse.c: Post an error message if EOS wasn't handled by anything downstream.
Original commit message from CVS: * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_process_event), (gst_mpeg_parse_send_event): Post an error message if EOS wasn't handled by anything downstream. This should fix playbin freezing/hanging with small VobSub subtitle files (background: not-linked flow returns from downstream are ignored for a while at the beginning, so if the file is small upstream will never get a not-linked flow return even if nothing is connected downstream). (#429960).
This commit is contained in:
parent
a43a391404
commit
b2ba2f9e0a
2 changed files with 28 additions and 4 deletions
11
ChangeLog
11
ChangeLog
|
@ -1,3 +1,14 @@
|
||||||
|
2007-04-16 Tim-Philipp Müller <tim at centricular dot net>
|
||||||
|
|
||||||
|
* gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_process_event),
|
||||||
|
(gst_mpeg_parse_send_event):
|
||||||
|
Post an error message if EOS wasn't handled by anything downstream.
|
||||||
|
This should fix playbin freezing/hanging with small VobSub subtitle
|
||||||
|
files (background: not-linked flow returns from downstream are
|
||||||
|
ignored for a while at the beginning, so if the file is small
|
||||||
|
upstream will never get a not-linked flow return even if nothing
|
||||||
|
is connected downstream). (#429960).
|
||||||
|
|
||||||
2007-04-16 Michael Smith <msmith@fluendo.com>
|
2007-04-16 Michael Smith <msmith@fluendo.com>
|
||||||
|
|
||||||
* ext/amrnb/amrnbparse.c: (gst_amrnbparse_init),
|
* ext/amrnb/amrnbparse.c: (gst_amrnbparse_init),
|
||||||
|
|
|
@ -407,9 +407,20 @@ gst_mpeg_parse_process_event (GstMPEGParse * mpeg_parse, GstEvent * event)
|
||||||
gst_mpeg_packetize_flush_cache (mpeg_parse->packetize);
|
gst_mpeg_packetize_flush_cache (mpeg_parse->packetize);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GST_EVENT_EOS:
|
case GST_EVENT_EOS:{
|
||||||
GST_DEBUG_OBJECT (mpeg_parse, "EOS");
|
GST_DEBUG_OBJECT (mpeg_parse, "EOS");
|
||||||
/* fall through to default handler */
|
|
||||||
|
if (CLASS (mpeg_parse)->send_event) {
|
||||||
|
ret = CLASS (mpeg_parse)->send_event (mpeg_parse, event);
|
||||||
|
} else {
|
||||||
|
gst_event_unref (event);
|
||||||
|
}
|
||||||
|
if (!ret) {
|
||||||
|
GST_ELEMENT_ERROR (mpeg_parse, STREAM, DEMUX, (NULL),
|
||||||
|
("Pushing EOS event didn't work on any of the source pads"));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
if (CLASS (mpeg_parse)->send_event) {
|
if (CLASS (mpeg_parse)->send_event) {
|
||||||
ret = CLASS (mpeg_parse)->send_event (mpeg_parse, event);
|
ret = CLASS (mpeg_parse)->send_event (mpeg_parse, event);
|
||||||
|
@ -422,12 +433,13 @@ gst_mpeg_parse_process_event (GstMPEGParse * mpeg_parse, GstEvent * event)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* returns TRUE if pushing the event worked on at least one pad */
|
||||||
static gboolean
|
static gboolean
|
||||||
gst_mpeg_parse_send_event (GstMPEGParse * mpeg_parse, GstEvent * event)
|
gst_mpeg_parse_send_event (GstMPEGParse * mpeg_parse, GstEvent * event)
|
||||||
{
|
{
|
||||||
GstIterator *it;
|
GstIterator *it;
|
||||||
gpointer pad;
|
gpointer pad;
|
||||||
gboolean ret = TRUE;
|
gboolean ret = FALSE;
|
||||||
|
|
||||||
/* Send event to all source pads of this element. */
|
/* Send event to all source pads of this element. */
|
||||||
it = gst_element_iterate_src_pads (GST_ELEMENT (mpeg_parse));
|
it = gst_element_iterate_src_pads (GST_ELEMENT (mpeg_parse));
|
||||||
|
@ -435,7 +447,8 @@ gst_mpeg_parse_send_event (GstMPEGParse * mpeg_parse, GstEvent * event)
|
||||||
switch (gst_iterator_next (it, &pad)) {
|
switch (gst_iterator_next (it, &pad)) {
|
||||||
case GST_ITERATOR_OK:
|
case GST_ITERATOR_OK:
|
||||||
gst_event_ref (event);
|
gst_event_ref (event);
|
||||||
gst_pad_push_event (GST_PAD (pad), event);
|
if (gst_pad_push_event (GST_PAD (pad), event))
|
||||||
|
ret = TRUE;
|
||||||
gst_object_unref (GST_OBJECT (pad));
|
gst_object_unref (GST_OBJECT (pad));
|
||||||
break;
|
break;
|
||||||
case GST_ITERATOR_RESYNC:
|
case GST_ITERATOR_RESYNC:
|
||||||
|
|
Loading…
Reference in a new issue