summaryrefslogtreecommitdiff
path: root/libavcodec/dca.c
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2011-10-27 11:41:02 -0400
committerJustin Ruggles <justin.ruggles@gmail.com>2011-10-29 16:04:06 -0400
commitf44059d26094c20277a6ec9f966c3bd453b6b9cf (patch)
tree9d6a75a6c19f0abee2582ba1457fde0f4b717c70 /libavcodec/dca.c
parent46e1af3b0f2c28936dfa88063cc5a35f466f5ac3 (diff)
dca: return proper error codes instead of -1
Diffstat (limited to 'libavcodec/dca.c')
-rw-r--r--libavcodec/dca.c49
1 files changed, 25 insertions, 24 deletions
diff --git a/libavcodec/dca.c b/libavcodec/dca.c
index 3233f60d4a..518fd30dbc 100644
--- a/libavcodec/dca.c
+++ b/libavcodec/dca.c
@@ -529,15 +529,15 @@ static int dca_parse_frame_header(DCAContext * s)
s->sample_blocks = get_bits(&s->gb, 7) + 1;
s->frame_size = get_bits(&s->gb, 14) + 1;
if (s->frame_size < 95)
- return -1;
+ return AVERROR_INVALIDDATA;
s->amode = get_bits(&s->gb, 6);
s->sample_rate = dca_sample_rates[get_bits(&s->gb, 4)];
if (!s->sample_rate)
- return -1;
+ return AVERROR_INVALIDDATA;
s->bit_rate_index = get_bits(&s->gb, 5);
s->bit_rate = dca_bit_rates[s->bit_rate_index];
if (!s->bit_rate)
- return -1;
+ return AVERROR_INVALIDDATA;
s->downmix = get_bits(&s->gb, 1);
s->dynrange = get_bits(&s->gb, 1);
@@ -627,7 +627,7 @@ static int dca_subframe_header(DCAContext * s, int base_channel, int block_index
int j, k;
if (get_bits_left(&s->gb) < 0)
- return -1;
+ return AVERROR_INVALIDDATA;
if (!base_channel) {
s->subsubframes[s->current_subframe] = get_bits(&s->gb, 2) + 1;
@@ -659,7 +659,7 @@ static int dca_subframe_header(DCAContext * s, int base_channel, int block_index
else if (s->bitalloc_huffman[j] == 7) {
av_log(s->avctx, AV_LOG_ERROR,
"Invalid bit allocation index\n");
- return -1;
+ return AVERROR_INVALIDDATA;
} else {
s->bitalloc[j][k] =
get_bitalloc(&s->gb, &dca_bitalloc_index, s->bitalloc_huffman[j]);
@@ -668,7 +668,7 @@ static int dca_subframe_header(DCAContext * s, int base_channel, int block_index
if (s->bitalloc[j][k] > 26) {
// av_log(s->avctx,AV_LOG_DEBUG,"bitalloc index [%i][%i] too big (%i)\n",
// j, k, s->bitalloc[j][k]);
- return -1;
+ return AVERROR_INVALIDDATA;
}
}
}
@@ -686,7 +686,7 @@ static int dca_subframe_header(DCAContext * s, int base_channel, int block_index
}
if (get_bits_left(&s->gb) < 0)
- return -1;
+ return AVERROR_INVALIDDATA;
for (j = base_channel; j < s->prim_channels; j++) {
const uint32_t *scale_table;
@@ -724,7 +724,7 @@ static int dca_subframe_header(DCAContext * s, int base_channel, int block_index
}
if (get_bits_left(&s->gb) < 0)
- return -1;
+ return AVERROR_INVALIDDATA;
/* Scale factors for joint subband coding */
for (j = base_channel; j < s->prim_channels; j++) {
@@ -1055,7 +1055,7 @@ static int decode_blockcode(int code, int levels, int *values)
return 0;
else {
av_log(NULL, AV_LOG_ERROR, "ERROR: block code look-up failed\n");
- return -1;
+ return AVERROR_INVALIDDATA;
}
}
@@ -1095,7 +1095,7 @@ static int dca_subsubframe(DCAContext * s, int base_channel, int block_index)
for (k = base_channel; k < s->prim_channels; k++) {
if (get_bits_left(&s->gb) < 0)
- return -1;
+ return AVERROR_INVALIDDATA;
for (l = 0; l < s->vq_start_subband[k]; l++) {
int m;
@@ -1274,12 +1274,13 @@ static int dca_subframe_footer(DCAContext * s, int base_channel)
static int dca_decode_block(DCAContext * s, int base_channel, int block_index)
{
+ int ret;
/* Sanity check */
if (s->current_subframe >= s->subframes) {
av_log(s->avctx, AV_LOG_DEBUG, "check failed: %i>%i",
s->current_subframe, s->subframes);
- return -1;
+ return AVERROR_INVALIDDATA;
}
if (!s->current_subsubframe) {
@@ -1287,16 +1288,16 @@ static int dca_decode_block(DCAContext * s, int base_channel, int block_index)
av_log(s->avctx, AV_LOG_DEBUG, "DSYNC dca_subframe_header\n");
#endif
/* Read subframe header */
- if (dca_subframe_header(s, base_channel, block_index))
- return -1;
+ if ((ret = dca_subframe_header(s, base_channel, block_index)))
+ return ret;
}
/* Read subsubframe */
#ifdef TRACE
av_log(s->avctx, AV_LOG_DEBUG, "DSYNC dca_subsubframe\n");
#endif
- if (dca_subsubframe(s, base_channel, block_index))
- return -1;
+ if ((ret = dca_subsubframe(s, base_channel, block_index)))
+ return ret;
/* Update state */
s->current_subsubframe++;
@@ -1309,8 +1310,8 @@ static int dca_decode_block(DCAContext * s, int base_channel, int block_index)
av_log(s->avctx, AV_LOG_DEBUG, "DSYNC dca_subframe_footer\n");
#endif
/* Read subframe footer */
- if (dca_subframe_footer(s, base_channel))
- return -1;
+ if ((ret = dca_subframe_footer(s, base_channel)))
+ return ret;
}
return 0;
@@ -1353,7 +1354,7 @@ static int dca_convert_bitstream(const uint8_t * src, int src_size, uint8_t * ds
flush_put_bits(&pb);
return (put_bits_count(&pb) + 7) >> 3;
default:
- return -1;
+ return AVERROR_INVALIDDATA;
}
}
@@ -1649,9 +1650,9 @@ static int dca_decode_frame(AVCodecContext * avctx,
s->dca_buffer_size = dca_convert_bitstream(buf, buf_size, s->dca_buffer,
DCA_MAX_FRAME_SIZE + DCA_MAX_EXSS_HEADER_SIZE);
- if (s->dca_buffer_size == -1) {
+ if (s->dca_buffer_size == AVERROR_INVALIDDATA) {
av_log(avctx, AV_LOG_ERROR, "Not a valid DCA frame\n");
- return -1;
+ return AVERROR_INVALIDDATA;
}
init_get_bits(&s->gb, s->dca_buffer, s->dca_buffer_size * 8);
@@ -1798,7 +1799,7 @@ static int dca_decode_frame(AVCodecContext * avctx,
if (channels > !!s->lfe &&
s->channel_order_tab[channels - 1 - !!s->lfe] < 0)
- return -1;
+ return AVERROR_INVALIDDATA;
if (avctx->request_channels == 2 && s->prim_channels > 2) {
channels = 2;
@@ -1807,7 +1808,7 @@ static int dca_decode_frame(AVCodecContext * avctx,
}
} else {
av_log(avctx, AV_LOG_ERROR, "Non standard configuration %d !\n",s->amode);
- return -1;
+ return AVERROR_INVALIDDATA;
}
@@ -1823,13 +1824,13 @@ static int dca_decode_frame(AVCodecContext * avctx,
if (avctx->channels != channels) {
av_log(avctx, AV_LOG_ERROR, "DCA decoder does not support number of "
"channels changing in stream. Skipping frame.\n");
- return -1;
+ return AVERROR_PATCHWELCOME;
}
out_size = 256 / 8 * s->sample_blocks * channels *
av_get_bytes_per_sample(avctx->sample_fmt);
if (*data_size < out_size)
- return -1;
+ return AVERROR(EINVAL);
*data_size = out_size;
/* filter to get final output */