From 451f53d7de97ae07f8288b53a62598ad645b6852 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Thu, 14 Feb 2008 13:58:42 +0000 Subject: [PATCH] gst/mpegaudioparse/gstmpegaudioparse.c: Return GST_FLOW_UNEXPECTED if we get data that is after our configured segmen... Original commit message from CVS: * 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. --- ChangeLog | 8 ++++++++ gst/mpegaudioparse/gstmpegaudioparse.c | 25 +++++++++++++++++++------ 2 files changed, 27 insertions(+), 6 deletions(-) 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