From: Sebastian Dröge Date: Fri, 27 Aug 2010 15:23:46 +0000 (+0200) Subject: oggdemux: Don't use GST_FLOW_IS_FATAL() X-Git-Tag: RELEASE-0.10.31~270 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b899bca94d6fdd7cae2e0bdbdeffd3c6ca3e4f99;p=platform%2Fupstream%2Fgst-plugins-base.git oggdemux: Don't use GST_FLOW_IS_FATAL() And while we're at it, handle WRONG_STATE as error too in oggdemux and WRONG_STATE and NOT_LINKED in oggaviparse. --- diff --git a/ext/ogg/gstoggaviparse.c b/ext/ogg/gstoggaviparse.c index bb210f3..2851e52 100644 --- a/ext/ogg/gstoggaviparse.c +++ b/ext/ogg/gstoggaviparse.c @@ -406,7 +406,7 @@ gst_ogg_avi_parse_chain (GstPad * pad, GstBuffer * buffer) break; case 1: result = gst_ogg_avi_parse_push_packet (ogg, &packet); - if (GST_FLOW_IS_FATAL (result)) + if (result != GST_FLOW_OK) goto done; break; default: diff --git a/ext/ogg/gstoggdemux.c b/ext/ogg/gstoggdemux.c index bb5362f..6716c15 100644 --- a/ext/ogg/gstoggdemux.c +++ b/ext/ogg/gstoggdemux.c @@ -992,7 +992,7 @@ gst_ogg_pad_stream_out (GstOggPad * pad, gint npackets) case 1: GST_LOG_OBJECT (ogg, "packetout gave packet of size %ld", packet.bytes); result = gst_ogg_pad_submit_packet (pad, &packet); - if (GST_FLOW_IS_FATAL (result)) + if (result != GST_FLOW_OK) goto could_not_submit; break; default: @@ -3420,40 +3420,44 @@ pause: ogg->segment_running = FALSE; gst_pad_pause_task (ogg->sinkpad); - if (GST_FLOW_IS_FATAL (ret) || ret == GST_FLOW_NOT_LINKED) { - if (ret == GST_FLOW_UNEXPECTED) { - /* perform EOS logic */ - if (ogg->segment.flags & GST_SEEK_FLAG_SEGMENT) { - gint64 stop; - GstMessage *message; - - /* for segment playback we need to post when (in stream time) - * we stopped, this is either stop (when set) or the duration. */ - if ((stop = ogg->segment.stop) == -1) - stop = ogg->segment.duration; - - GST_LOG_OBJECT (ogg, "Sending segment done, at end of segment"); - message = - gst_message_new_segment_done (GST_OBJECT (ogg), GST_FORMAT_TIME, - stop); - gst_message_set_seqnum (message, ogg->seqnum); - - gst_element_post_message (GST_ELEMENT (ogg), message); - } else { - /* normal playback, send EOS to all linked pads */ - GST_LOG_OBJECT (ogg, "Sending EOS, at end of stream"); - event = gst_event_new_eos (); - } + if (ret == GST_FLOW_UNEXPECTED) { + /* perform EOS logic */ + if (ogg->segment.flags & GST_SEEK_FLAG_SEGMENT) { + gint64 stop; + GstMessage *message; + + /* for segment playback we need to post when (in stream time) + * we stopped, this is either stop (when set) or the duration. */ + if ((stop = ogg->segment.stop) == -1) + stop = ogg->segment.duration; + + GST_LOG_OBJECT (ogg, "Sending segment done, at end of segment"); + message = + gst_message_new_segment_done (GST_OBJECT (ogg), GST_FORMAT_TIME, + stop); + gst_message_set_seqnum (message, ogg->seqnum); + + gst_element_post_message (GST_ELEMENT (ogg), message); } else { - GST_ELEMENT_ERROR (ogg, STREAM, FAILED, - (_("Internal data stream error.")), - ("stream stopped, reason %s", reason)); + /* normal playback, send EOS to all linked pads */ + GST_LOG_OBJECT (ogg, "Sending EOS, at end of stream"); event = gst_event_new_eos (); } - if (event) { - gst_event_set_seqnum (event, ogg->seqnum); - gst_ogg_demux_send_event (ogg, event); - } + } else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_UNEXPECTED) { + GST_ELEMENT_ERROR (ogg, STREAM, FAILED, + (_("Internal data stream error.")), + ("stream stopped, reason %s", reason)); + event = gst_event_new_eos (); + } + + /* For wrong-state we still want to pause the task and stop + * but no error message or other things are necessary. + * wrong-state is no real error and will be caused by flushing, + * e.g. because of a flushing seek. + */ + if (event) { + gst_event_set_seqnum (event, ogg->seqnum); + gst_ogg_demux_send_event (ogg, event); } return; }