From 4ae15605f6298d8369a1f1374596b52a3839c703 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Sat, 23 May 2015 16:23:52 +0200 Subject: [PATCH] avcodec/dcadec: Search and decode frame in case it starts later in a packet This fixes decoding the first frame of some dts files Signed-off-by: Michael Niedermayer --- libavcodec/dcadec.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/libavcodec/dcadec.c b/libavcodec/dcadec.c index 91db893c56..3ea1bcfc9d 100644 --- a/libavcodec/dcadec.c +++ b/libavcodec/dcadec.c @@ -1487,8 +1487,11 @@ static int dca_decode_frame(AVCodecContext *avctx, void *data, s->exss_ext_mask = 0; s->xch_present = 0; - s->dca_buffer_size = avpriv_dca_convert_bitstream(buf, buf_size, s->dca_buffer, - DCA_MAX_FRAME_SIZE + DCA_MAX_EXSS_HEADER_SIZE); + s->dca_buffer_size = AVERROR_INVALIDDATA; + for (i = 0; i < buf_size - 3 && s->dca_buffer_size == AVERROR_INVALIDDATA; i++) + s->dca_buffer_size = avpriv_dca_convert_bitstream(buf + i, buf_size - i, s->dca_buffer, + DCA_MAX_FRAME_SIZE + DCA_MAX_EXSS_HEADER_SIZE); + if (s->dca_buffer_size == AVERROR_INVALIDDATA) { av_log(avctx, AV_LOG_ERROR, "Not a valid DCA frame\n"); return AVERROR_INVALIDDATA;