From: Mark Nauwelaerts Date: Thu, 27 Jan 2011 15:52:34 +0000 (+0100) Subject: ac3parse: improve handling of dependent substream frames X-Git-Tag: RELEASE-0.10.29~266 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d1bea6361b282b909f6f06febced6deb0a350d59;p=platform%2Fupstream%2Fgst-plugins-good.git ac3parse: improve handling of dependent substream frames In particular, timestamps of these should track main-stream timestamps. --- diff --git a/gst/audioparsers/gstac3parse.c b/gst/audioparsers/gstac3parse.c index 0c7fba3..e001bc3 100644 --- a/gst/audioparsers/gstac3parse.c +++ b/gst/audioparsers/gstac3parse.c @@ -466,8 +466,17 @@ gst_ac3_parse_parse_frame (GstBaseParse * parse, GstBaseParseFrame * frame) GST_LOG_OBJECT (parse, "size: %u, rate: %u, chans: %u", fsize, rate, chans); if (G_UNLIKELY (sid)) { + /* dependent frame, no need to (ac)count for or consider further */ GST_LOG_OBJECT (parse, "sid: %d", sid); frame->flags |= GST_BASE_PARSE_FRAME_FLAG_NO_FRAME; + /* TODO maybe also mark as DELTA_UNIT, + * if that does not surprise baseparse elsewhere */ + /* occupies same time space as previous base frame */ + if (G_LIKELY (GST_BUFFER_TIMESTAMP (buf) >= GST_BUFFER_DURATION (buf))) + GST_BUFFER_TIMESTAMP (buf) -= GST_BUFFER_DURATION (buf); + /* only return if we already arranged for caps */ + if (G_LIKELY (ac3parse->sample_rate > 0)) + return GST_FLOW_OK; } if (G_UNLIKELY (ac3parse->sample_rate != rate || ac3parse->channels != chans