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>
pull/116/merge
Michael Niedermayer 10 years ago
parent 40a3e1e9c5
commit 4ae15605f6
  1. 7
      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;

Loading…
Cancel
Save