mirror of https://git.ffmpeg.org/ffmpeg.git
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:
parent
40a3e1e9c5
commit
4ae15605f6
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue