From 2a179a3b1abf8fcdad3e46d0c158e554ac77aba9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Mon, 18 Feb 2008 10:25:16 +0000 Subject: [PATCH] gst/mpegaudioparse/gstmpegaudioparse.c: Handler buffers without valid timestamp more correctly: Don't drop them and d... Original commit message from CVS: * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_emit_frame): Handler buffers without valid timestamp more correctly: Don't drop them and don't use the invalid timestamp to calculate the next timestamp. Fixes bug #516811. --- ChangeLog | 8 ++++++++ gst/mpegaudioparse/gstmpegaudioparse.c | 12 +++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 93b7b23fc4..8f9412858b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2008-02-18 Sebastian Dröge + + * gst/mpegaudioparse/gstmpegaudioparse.c: + (gst_mp3parse_emit_frame): + Handler buffers without valid timestamp more correctly: Don't drop + them and don't use the invalid timestamp to calculate the next + timestamp. Fixes bug #516811. + 2008-02-18 Sebastian Dröge Patch by: Tal Shalif diff --git a/gst/mpegaudioparse/gstmpegaudioparse.c b/gst/mpegaudioparse/gstmpegaudioparse.c index a61c08f50a..a852f1d55d 100644 --- a/gst/mpegaudioparse/gstmpegaudioparse.c +++ b/gst/mpegaudioparse/gstmpegaudioparse.c @@ -563,7 +563,9 @@ gst_mp3parse_emit_frame (GstMPEGAudioParse * mp3parse, guint size) if (GST_BUFFER_TIMESTAMP (outbuf) == 0) mp3parse->exact_position = TRUE; - if (mp3parse->exact_position && (!mp3parse->seek_table || + if (mp3parse->exact_position && GST_BUFFER_TIMESTAMP_IS_VALID (outbuf) && + mp3parse->cur_offset != GST_BUFFER_OFFSET_NONE && + (!mp3parse->seek_table || (mp3parse_seek_table_last_entry (mp3parse))->byte < GST_BUFFER_OFFSET (outbuf))) { MPEGAudioSeekEntry *entry = g_new0 (MPEGAudioSeekEntry, 1); @@ -582,8 +584,10 @@ gst_mp3parse_emit_frame (GstMPEGAudioParse * mp3parse, guint size) } mp3parse->tracked_offset += size; - mp3parse->next_ts = - GST_BUFFER_TIMESTAMP (outbuf) + GST_BUFFER_DURATION (outbuf); + if (GST_BUFFER_TIMESTAMP_IS_VALID (outbuf) + && GST_BUFFER_DURATION_IS_VALID (outbuf)) + mp3parse->next_ts = + GST_BUFFER_TIMESTAMP (outbuf) + GST_BUFFER_DURATION (outbuf); gst_buffer_set_caps (outbuf, GST_PAD_CAPS (mp3parse->srcpad)); @@ -623,6 +627,8 @@ gst_mp3parse_emit_frame (GstMPEGAudioParse * mp3parse, guint size) } if (G_UNLIKELY ((GST_CLOCK_TIME_IS_VALID (push_start) && + GST_BUFFER_TIMESTAMP_IS_VALID (outbuf) && + GST_BUFFER_DURATION_IS_VALID (outbuf) && GST_BUFFER_TIMESTAMP (outbuf) + GST_BUFFER_DURATION (outbuf) < push_start) || (GST_CLOCK_TIME_IS_VALID (mp3parse->segment.stop)