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.
This commit is contained in:
Sebastian Dröge 2010-08-27 17:23:46 +02:00
parent 93aa13639d
commit b899bca94d
2 changed files with 34 additions and 30 deletions

View file

@ -406,7 +406,7 @@ gst_ogg_avi_parse_chain (GstPad * pad, GstBuffer * buffer)
break; break;
case 1: case 1:
result = gst_ogg_avi_parse_push_packet (ogg, &packet); result = gst_ogg_avi_parse_push_packet (ogg, &packet);
if (GST_FLOW_IS_FATAL (result)) if (result != GST_FLOW_OK)
goto done; goto done;
break; break;
default: default:

View file

@ -992,7 +992,7 @@ gst_ogg_pad_stream_out (GstOggPad * pad, gint npackets)
case 1: case 1:
GST_LOG_OBJECT (ogg, "packetout gave packet of size %ld", packet.bytes); GST_LOG_OBJECT (ogg, "packetout gave packet of size %ld", packet.bytes);
result = gst_ogg_pad_submit_packet (pad, &packet); result = gst_ogg_pad_submit_packet (pad, &packet);
if (GST_FLOW_IS_FATAL (result)) if (result != GST_FLOW_OK)
goto could_not_submit; goto could_not_submit;
break; break;
default: default:
@ -3420,40 +3420,44 @@ pause:
ogg->segment_running = FALSE; ogg->segment_running = FALSE;
gst_pad_pause_task (ogg->sinkpad); gst_pad_pause_task (ogg->sinkpad);
if (GST_FLOW_IS_FATAL (ret) || ret == GST_FLOW_NOT_LINKED) { if (ret == GST_FLOW_UNEXPECTED) {
if (ret == GST_FLOW_UNEXPECTED) { /* perform EOS logic */
/* perform EOS logic */ if (ogg->segment.flags & GST_SEEK_FLAG_SEGMENT) {
if (ogg->segment.flags & GST_SEEK_FLAG_SEGMENT) { gint64 stop;
gint64 stop; GstMessage *message;
GstMessage *message;
/* for segment playback we need to post when (in stream time) /* for segment playback we need to post when (in stream time)
* we stopped, this is either stop (when set) or the duration. */ * we stopped, this is either stop (when set) or the duration. */
if ((stop = ogg->segment.stop) == -1) if ((stop = ogg->segment.stop) == -1)
stop = ogg->segment.duration; stop = ogg->segment.duration;
GST_LOG_OBJECT (ogg, "Sending segment done, at end of segment"); GST_LOG_OBJECT (ogg, "Sending segment done, at end of segment");
message = message =
gst_message_new_segment_done (GST_OBJECT (ogg), GST_FORMAT_TIME, gst_message_new_segment_done (GST_OBJECT (ogg), GST_FORMAT_TIME,
stop); stop);
gst_message_set_seqnum (message, ogg->seqnum); gst_message_set_seqnum (message, ogg->seqnum);
gst_element_post_message (GST_ELEMENT (ogg), message); 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 ();
}
} else { } else {
GST_ELEMENT_ERROR (ogg, STREAM, FAILED, /* normal playback, send EOS to all linked pads */
(_("Internal data stream error.")), GST_LOG_OBJECT (ogg, "Sending EOS, at end of stream");
("stream stopped, reason %s", reason));
event = gst_event_new_eos (); event = gst_event_new_eos ();
} }
if (event) { } else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_UNEXPECTED) {
gst_event_set_seqnum (event, ogg->seqnum); GST_ELEMENT_ERROR (ogg, STREAM, FAILED,
gst_ogg_demux_send_event (ogg, event); (_("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; return;
} }