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 <michaelni@gmx.at>
This commit is contained in:
Michael Niedermayer 2015-05-23 16:23:52 +02:00
parent 40a3e1e9c5
commit 4ae15605f6
1 changed files with 5 additions and 2 deletions

View File

@ -1487,8 +1487,11 @@ static int dca_decode_frame(AVCodecContext *avctx, void *data,
s->exss_ext_mask = 0; s->exss_ext_mask = 0;
s->xch_present = 0; s->xch_present = 0;
s->dca_buffer_size = avpriv_dca_convert_bitstream(buf, buf_size, s->dca_buffer, 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); DCA_MAX_FRAME_SIZE + DCA_MAX_EXSS_HEADER_SIZE);
if (s->dca_buffer_size == AVERROR_INVALIDDATA) { if (s->dca_buffer_size == AVERROR_INVALIDDATA) {
av_log(avctx, AV_LOG_ERROR, "Not a valid DCA frame\n"); av_log(avctx, AV_LOG_ERROR, "Not a valid DCA frame\n");
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;