|
|
|
@ -1154,8 +1154,8 @@ static int ac3_decode_frame(AVCodecContext * avctx, void *data, int *data_size, |
|
|
|
|
if(err) { |
|
|
|
|
switch(err) { |
|
|
|
|
case AC3_PARSE_ERROR_SYNC: |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "frame sync error\n"); |
|
|
|
|
break; |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "frame sync error : cannot use error concealment\n"); |
|
|
|
|
return -1; |
|
|
|
|
case AC3_PARSE_ERROR_BSID: |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "invalid bitstream id\n"); |
|
|
|
|
break; |
|
|
|
@ -1172,7 +1172,6 @@ static int ac3_decode_frame(AVCodecContext * avctx, void *data, int *data_size, |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "invalid header\n"); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* check that reported frame size fits in input buffer */ |
|
|
|
@ -1185,11 +1184,12 @@ static int ac3_decode_frame(AVCodecContext * avctx, void *data, int *data_size, |
|
|
|
|
if(avctx->error_resilience >= FF_ER_CAREFUL) { |
|
|
|
|
if(av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, &buf[2], s->frame_size-2)) { |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "frame CRC mismatch\n"); |
|
|
|
|
return -1; |
|
|
|
|
err = 1; |
|
|
|
|
} |
|
|
|
|
/* TODO: error concealment */ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* if frame is ok, set audio parameters */ |
|
|
|
|
if (!err) { |
|
|
|
|
avctx->sample_rate = s->sample_rate; |
|
|
|
|
avctx->bit_rate = s->bit_rate; |
|
|
|
|
|
|
|
|
@ -1207,13 +1207,12 @@ static int ac3_decode_frame(AVCodecContext * avctx, void *data, int *data_size, |
|
|
|
|
s->fbw_channels == s->out_channels)) { |
|
|
|
|
set_downmix_coeffs(s); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* parse the audio blocks */ |
|
|
|
|
for (blk = 0; blk < NB_BLOCKS; blk++) { |
|
|
|
|
if (ac3_parse_audio_block(s, blk)) { |
|
|
|
|
if (!err && ac3_parse_audio_block(s, blk)) { |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "error parsing the audio block\n"); |
|
|
|
|
*data_size = 0; |
|
|
|
|
return s->frame_size; |
|
|
|
|
} |
|
|
|
|
for (i = 0; i < 256; i++) |
|
|
|
|
for (ch = 0; ch < s->out_channels; ch++) |
|
|
|
|