ac3: Return proper error codes

(cherry picked from commit b1f9cdc37ff5d5b391d2cd9af737ab4e5a0fc1c0)
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
This commit is contained in:
Luca Barbato 2013-07-27 10:16:35 +02:00 committed by Sean McGovern
parent 37e69e2dee
commit c225c620c6

View File

@ -297,7 +297,7 @@ static int parse_frame_header(AC3DecodeContext *s)
return ff_eac3_parse_header(s); return ff_eac3_parse_header(s);
} else { } else {
av_log(s->avctx, AV_LOG_ERROR, "E-AC-3 support not compiled in\n"); av_log(s->avctx, AV_LOG_ERROR, "E-AC-3 support not compiled in\n");
return -1; return AVERROR(ENOSYS);
} }
} }
@ -822,12 +822,12 @@ static int decode_audio_block(AC3DecodeContext *s, int blk)
if (start_subband >= end_subband) { if (start_subband >= end_subband) {
av_log(s->avctx, AV_LOG_ERROR, "invalid spectral extension " av_log(s->avctx, AV_LOG_ERROR, "invalid spectral extension "
"range (%d >= %d)\n", start_subband, end_subband); "range (%d >= %d)\n", start_subband, end_subband);
return -1; return AVERROR_INVALIDDATA;
} }
if (dst_start_freq >= src_start_freq) { if (dst_start_freq >= src_start_freq) {
av_log(s->avctx, AV_LOG_ERROR, "invalid spectral extension " av_log(s->avctx, AV_LOG_ERROR, "invalid spectral extension "
"copy start bin (%d >= %d)\n", dst_start_freq, src_start_freq); "copy start bin (%d >= %d)\n", dst_start_freq, src_start_freq);
return -1; return AVERROR_INVALIDDATA;
} }
s->spx_dst_start_freq = dst_start_freq; s->spx_dst_start_freq = dst_start_freq;
@ -904,7 +904,7 @@ static int decode_audio_block(AC3DecodeContext *s, int blk)
if (channel_mode < AC3_CHMODE_STEREO) { if (channel_mode < AC3_CHMODE_STEREO) {
av_log(s->avctx, AV_LOG_ERROR, "coupling not allowed in mono or dual-mono\n"); av_log(s->avctx, AV_LOG_ERROR, "coupling not allowed in mono or dual-mono\n");
return -1; return AVERROR_INVALIDDATA;
} }
/* check for enhanced coupling */ /* check for enhanced coupling */
@ -934,7 +934,7 @@ static int decode_audio_block(AC3DecodeContext *s, int blk)
if (cpl_start_subband >= cpl_end_subband) { if (cpl_start_subband >= cpl_end_subband) {
av_log(s->avctx, AV_LOG_ERROR, "invalid coupling range (%d >= %d)\n", av_log(s->avctx, AV_LOG_ERROR, "invalid coupling range (%d >= %d)\n",
cpl_start_subband, cpl_end_subband); cpl_start_subband, cpl_end_subband);
return -1; return AVERROR_INVALIDDATA;
} }
s->start_freq[CPL_CH] = cpl_start_subband * 12 + 37; s->start_freq[CPL_CH] = cpl_start_subband * 12 + 37;
s->end_freq[CPL_CH] = cpl_end_subband * 12 + 37; s->end_freq[CPL_CH] = cpl_end_subband * 12 + 37;
@ -956,7 +956,7 @@ static int decode_audio_block(AC3DecodeContext *s, int blk)
if (!blk) { if (!blk) {
av_log(s->avctx, AV_LOG_ERROR, "new coupling strategy must " av_log(s->avctx, AV_LOG_ERROR, "new coupling strategy must "
"be present in block 0\n"); "be present in block 0\n");
return -1; return AVERROR_INVALIDDATA;
} else { } else {
s->cpl_in_use[blk] = s->cpl_in_use[blk-1]; s->cpl_in_use[blk] = s->cpl_in_use[blk-1];
} }
@ -986,7 +986,7 @@ static int decode_audio_block(AC3DecodeContext *s, int blk)
} else if (!blk) { } else if (!blk) {
av_log(s->avctx, AV_LOG_ERROR, "new coupling coordinates must " av_log(s->avctx, AV_LOG_ERROR, "new coupling coordinates must "
"be present in block 0\n"); "be present in block 0\n");
return -1; return AVERROR_INVALIDDATA;
} }
} else { } else {
/* channel not in coupling */ /* channel not in coupling */
@ -1041,7 +1041,7 @@ static int decode_audio_block(AC3DecodeContext *s, int blk)
int bandwidth_code = get_bits(gbc, 6); int bandwidth_code = get_bits(gbc, 6);
if (bandwidth_code > 60) { if (bandwidth_code > 60) {
av_log(s->avctx, AV_LOG_ERROR, "bandwidth code = %d > 60\n", bandwidth_code); av_log(s->avctx, AV_LOG_ERROR, "bandwidth code = %d > 60\n", bandwidth_code);
return -1; return AVERROR_INVALIDDATA;
} }
s->end_freq[ch] = bandwidth_code * 3 + 73; s->end_freq[ch] = bandwidth_code * 3 + 73;
} }
@ -1064,7 +1064,7 @@ static int decode_audio_block(AC3DecodeContext *s, int blk)
s->num_exp_groups[ch], s->dexps[ch][0], s->num_exp_groups[ch], s->dexps[ch][0],
&s->dexps[ch][s->start_freq[ch]+!!ch])) { &s->dexps[ch][s->start_freq[ch]+!!ch])) {
av_log(s->avctx, AV_LOG_ERROR, "exponent out-of-range\n"); av_log(s->avctx, AV_LOG_ERROR, "exponent out-of-range\n");
return -1; return AVERROR_INVALIDDATA;
} }
if (ch != CPL_CH && ch != s->lfe_ch) if (ch != CPL_CH && ch != s->lfe_ch)
skip_bits(gbc, 2); /* skip gainrng */ skip_bits(gbc, 2); /* skip gainrng */
@ -1084,7 +1084,7 @@ static int decode_audio_block(AC3DecodeContext *s, int blk)
} else if (!blk) { } else if (!blk) {
av_log(s->avctx, AV_LOG_ERROR, "new bit allocation info must " av_log(s->avctx, AV_LOG_ERROR, "new bit allocation info must "
"be present in block 0\n"); "be present in block 0\n");
return -1; return AVERROR_INVALIDDATA;
} }
} }
@ -1115,7 +1115,7 @@ static int decode_audio_block(AC3DecodeContext *s, int blk)
} }
} else if (!s->eac3 && !blk) { } else if (!s->eac3 && !blk) {
av_log(s->avctx, AV_LOG_ERROR, "new snr offsets must be present in block 0\n"); av_log(s->avctx, AV_LOG_ERROR, "new snr offsets must be present in block 0\n");
return -1; return AVERROR_INVALIDDATA;
} }
} }
@ -1154,7 +1154,7 @@ static int decode_audio_block(AC3DecodeContext *s, int blk)
} else if (!s->eac3 && !blk) { } else if (!s->eac3 && !blk) {
av_log(s->avctx, AV_LOG_ERROR, "new coupling leak info must " av_log(s->avctx, AV_LOG_ERROR, "new coupling leak info must "
"be present in block 0\n"); "be present in block 0\n");
return -1; return AVERROR_INVALIDDATA;
} }
s->first_cpl_leak = 0; s->first_cpl_leak = 0;
} }
@ -1166,7 +1166,7 @@ static int decode_audio_block(AC3DecodeContext *s, int blk)
s->dba_mode[ch] = get_bits(gbc, 2); s->dba_mode[ch] = get_bits(gbc, 2);
if (s->dba_mode[ch] == DBA_RESERVED) { if (s->dba_mode[ch] == DBA_RESERVED) {
av_log(s->avctx, AV_LOG_ERROR, "delta bit allocation strategy reserved\n"); av_log(s->avctx, AV_LOG_ERROR, "delta bit allocation strategy reserved\n");
return -1; return AVERROR_INVALIDDATA;
} }
bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2); bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
} }
@ -1207,7 +1207,7 @@ static int decode_audio_block(AC3DecodeContext *s, int blk)
s->dba_offsets[ch], s->dba_lengths[ch], s->dba_offsets[ch], s->dba_lengths[ch],
s->dba_values[ch], s->mask[ch])) { s->dba_values[ch], s->mask[ch])) {
av_log(s->avctx, AV_LOG_ERROR, "error in bit allocation\n"); av_log(s->avctx, AV_LOG_ERROR, "error in bit allocation\n");
return -1; return AVERROR_INVALIDDATA;
} }
} }
if (bit_alloc_stages[ch] > 0) { if (bit_alloc_stages[ch] > 0) {
@ -1328,7 +1328,7 @@ static int ac3_decode_frame(AVCodecContext * avctx, void *data,
switch (err) { switch (err) {
case AAC_AC3_PARSE_ERROR_SYNC: case AAC_AC3_PARSE_ERROR_SYNC:
av_log(avctx, AV_LOG_ERROR, "frame sync error\n"); av_log(avctx, AV_LOG_ERROR, "frame sync error\n");
return -1; return AVERROR_INVALIDDATA;
case AAC_AC3_PARSE_ERROR_BSID: case AAC_AC3_PARSE_ERROR_BSID:
av_log(avctx, AV_LOG_ERROR, "invalid bitstream id\n"); av_log(avctx, AV_LOG_ERROR, "invalid bitstream id\n");
break; break;