summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/ogg/gstoggaviparse.c2
-rw-r--r--ext/ogg/gstoggdemux.c68
2 files changed, 37 insertions, 33 deletions
diff --git a/ext/ogg/gstoggaviparse.c b/ext/ogg/gstoggaviparse.c
index bb210f3e7..2851e5272 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 bb5362f27..6716c1599 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;
}