matroskademux: Don't use GST_FLOW_IS_FATAL()

This commit is contained in:
Sebastian Dröge 2010-08-27 17:37:33 +02:00
parent 1243b76df7
commit e8743b3789

View File

@ -2059,7 +2059,7 @@ gst_matroska_demux_query (GstMatroskaDemux * demux, GstPad * pad,
/* assuming we'll be able to get an index ... */ /* assuming we'll be able to get an index ... */
seekable = demux->seekable; seekable = demux->seekable;
} else { } else {
seekable = !!demux->index; seekable = ! !demux->index;
} }
gst_query_set_seeking (query, GST_FORMAT_TIME, seekable, gst_query_set_seeking (query, GST_FORMAT_TIME, seekable,
@ -2599,8 +2599,8 @@ gst_matroska_demux_handle_seek_event (GstMatroskaDemux * demux,
entry->pos + demux->ebml_segment_start); entry->pos + demux->ebml_segment_start);
} }
flush = !!(flags & GST_SEEK_FLAG_FLUSH); flush = ! !(flags & GST_SEEK_FLAG_FLUSH);
keyunit = !!(flags & GST_SEEK_FLAG_KEY_UNIT); keyunit = ! !(flags & GST_SEEK_FLAG_KEY_UNIT);
if (flush) { if (flush) {
GST_DEBUG_OBJECT (demux, "Starting flush"); GST_DEBUG_OBJECT (demux, "Starting flush");
@ -5886,57 +5886,56 @@ eos:
pause: pause:
{ {
const gchar *reason = gst_flow_get_name (ret); const gchar *reason = gst_flow_get_name (ret);
gboolean push_eos = FALSE;
GST_LOG_OBJECT (demux, "pausing task, reason %s", reason); GST_LOG_OBJECT (demux, "pausing task, reason %s", reason);
demux->segment_running = FALSE; demux->segment_running = FALSE;
gst_pad_pause_task (demux->sinkpad); gst_pad_pause_task (demux->sinkpad);
if (GST_FLOW_IS_FATAL (ret) || ret == GST_FLOW_NOT_LINKED) { if (ret == GST_FLOW_UNEXPECTED) {
gboolean push_eos = TRUE; /* perform EOS logic */
if (ret == GST_FLOW_UNEXPECTED) { /* Close the segment, i.e. update segment stop with the duration
/* perform EOS logic */ * if no stop was set */
if (GST_CLOCK_TIME_IS_VALID (demux->last_stop_end) &&
/* Close the segment, i.e. update segment stop with the duration !GST_CLOCK_TIME_IS_VALID (demux->segment.stop)) {
* if no stop was set */ GstEvent *event =
if (GST_CLOCK_TIME_IS_VALID (demux->last_stop_end) && gst_event_new_new_segment_full (TRUE, demux->segment.rate,
!GST_CLOCK_TIME_IS_VALID (demux->segment.stop)) { demux->segment.applied_rate, demux->segment.format,
GstEvent *event = demux->segment.start,
gst_event_new_new_segment_full (TRUE, demux->segment.rate, MAX (demux->last_stop_end, demux->segment.start),
demux->segment.applied_rate, demux->segment.format, demux->segment.time);
demux->segment.start, gst_matroska_demux_send_event (demux, event);
MAX (demux->last_stop_end, demux->segment.start),
demux->segment.time);
gst_matroska_demux_send_event (demux, event);
}
if (demux->segment.flags & GST_SEEK_FLAG_SEGMENT) {
gint64 stop;
/* for segment playback we need to post when (in stream time)
* we stopped, this is either stop (when set) or the duration. */
if ((stop = demux->segment.stop) == -1)
stop = demux->last_stop_end;
GST_LOG_OBJECT (demux, "Sending segment done, at end of segment");
gst_element_post_message (GST_ELEMENT (demux),
gst_message_new_segment_done (GST_OBJECT (demux), GST_FORMAT_TIME,
stop));
push_eos = FALSE;
}
} else {
/* for fatal errors we post an error message */
GST_ELEMENT_ERROR (demux, STREAM, FAILED, (NULL),
("stream stopped, reason %s", reason));
} }
if (push_eos) {
/* send EOS, and prevent hanging if no streams yet */ if (demux->segment.flags & GST_SEEK_FLAG_SEGMENT) {
GST_LOG_OBJECT (demux, "Sending EOS, at end of stream"); gint64 stop;
if (!gst_matroska_demux_send_event (demux, gst_event_new_eos ()) &&
(ret == GST_FLOW_UNEXPECTED)) { /* for segment playback we need to post when (in stream time)
GST_ELEMENT_ERROR (demux, STREAM, DEMUX, * we stopped, this is either stop (when set) or the duration. */
(NULL), ("got eos but no streams (yet)")); if ((stop = demux->segment.stop) == -1)
} stop = demux->last_stop_end;
GST_LOG_OBJECT (demux, "Sending segment done, at end of segment");
gst_element_post_message (GST_ELEMENT (demux),
gst_message_new_segment_done (GST_OBJECT (demux), GST_FORMAT_TIME,
stop));
} else {
push_eos = TRUE;
}
} else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_UNEXPECTED) {
/* for fatal errors we post an error message */
GST_ELEMENT_ERROR (demux, STREAM, FAILED, (NULL),
("stream stopped, reason %s", reason));
push_eos = TRUE;
}
if (push_eos) {
/* send EOS, and prevent hanging if no streams yet */
GST_LOG_OBJECT (demux, "Sending EOS, at end of stream");
if (!gst_matroska_demux_send_event (demux, gst_event_new_eos ()) &&
(ret == GST_FLOW_UNEXPECTED)) {
GST_ELEMENT_ERROR (demux, STREAM, DEMUX,
(NULL), ("got eos but no streams (yet)"));
} }
} }
return; return;