diff --git a/ChangeLog b/ChangeLog index 7141b1d7a3..8c2368cf5a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2008-02-14 Sebastian Dröge + + * gst/mpegaudioparse/gstmpegaudioparse.c: + (gst_mp3parse_emit_frame): + Return GST_FLOW_UNEXPECTED if we get data that is after our + configured segment. This makes upstream go EOS immediately instead + of sending us the complete stream. Also improve debugging a bit. + 2008-02-13 Jan Schmidt * ext/dvdread/dvdreadsrc.c: diff --git a/gst/mpegaudioparse/gstmpegaudioparse.c b/gst/mpegaudioparse/gstmpegaudioparse.c index a61c08f50a..190ba3afeb 100644 --- a/gst/mpegaudioparse/gstmpegaudioparse.c +++ b/gst/mpegaudioparse/gstmpegaudioparse.c @@ -624,18 +624,31 @@ gst_mp3parse_emit_frame (GstMPEGAudioParse * mp3parse, guint size) if (G_UNLIKELY ((GST_CLOCK_TIME_IS_VALID (push_start) && GST_BUFFER_TIMESTAMP (outbuf) + GST_BUFFER_DURATION (outbuf) - < push_start) - || (GST_CLOCK_TIME_IS_VALID (mp3parse->segment.stop) - && GST_BUFFER_TIMESTAMP (outbuf) >= mp3parse->segment.stop))) { + < push_start))) { GST_DEBUG_OBJECT (mp3parse, - "Buffer outside of configured segment range %" GST_TIME_FORMAT + "Buffer before configured segment range %" GST_TIME_FORMAT " to %" GST_TIME_FORMAT ", dropping, timestamp %" - GST_TIME_FORMAT ", offset 0x%08" G_GINT64_MODIFIER "x", - GST_TIME_ARGS (push_start), GST_TIME_ARGS (mp3parse->segment.stop), + GST_TIME_FORMAT " duration %" GST_TIME_FORMAT + ", offset 0x%08" G_GINT64_MODIFIER "x", GST_TIME_ARGS (push_start), + GST_TIME_ARGS (mp3parse->segment.stop), GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)), + GST_TIME_ARGS (GST_BUFFER_DURATION (outbuf)), GST_BUFFER_OFFSET (outbuf)); gst_buffer_unref (outbuf); ret = GST_FLOW_OK; + } else if (G_UNLIKELY (GST_CLOCK_TIME_IS_VALID (mp3parse->segment.stop) + && GST_BUFFER_TIMESTAMP (outbuf) >= mp3parse->segment.stop)) { + GST_DEBUG_OBJECT (mp3parse, + "Buffer after configured segment range %" GST_TIME_FORMAT + " to %" GST_TIME_FORMAT ", returning GST_FLOW_UNEXPECTED, timestamp %" + GST_TIME_FORMAT " duration %" GST_TIME_FORMAT ", offset 0x%08" + G_GINT64_MODIFIER "x", GST_TIME_ARGS (push_start), + GST_TIME_ARGS (mp3parse->segment.stop), + GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)), + GST_TIME_ARGS (GST_BUFFER_DURATION (outbuf)), + GST_BUFFER_OFFSET (outbuf)); + gst_buffer_unref (outbuf); + ret = GST_FLOW_UNEXPECTED; } else { GST_DEBUG_OBJECT (mp3parse, "pushing buffer of %d bytes, timestamp %" GST_TIME_FORMAT