diff options
author | Anton Khirnov <anton@khirnov.net> | 2012-12-09 18:55:53 +0100 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2013-01-29 07:31:15 +0100 |
commit | 30d62507cd9cc2e5d312af476036c9bce2f2bd00 (patch) | |
tree | 2c33e5a46609c25826d722cdaeff3fddb702b5d5 | |
parent | f713411d4cfbd9c467aeda77b16ca6bc4db55d10 (diff) | |
download | ffmpeg-streaming-30d62507cd9cc2e5d312af476036c9bce2f2bd00.zip ffmpeg-streaming-30d62507cd9cc2e5d312af476036c9bce2f2bd00.tar.gz |
mdec: return meaningful error codes.
-rw-r--r-- | libavcodec/mdec.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/libavcodec/mdec.c b/libavcodec/mdec.c index b5ea84c..59bb6be 100644 --- a/libavcodec/mdec.c +++ b/libavcodec/mdec.c @@ -68,7 +68,7 @@ static inline int mdec_decode_block_intra(MDECContext *a, int16_t *block, int n) component = (n <= 3 ? 0 : n - 4 + 1); diff = decode_dc(&a->gb, component); if (diff >= 0xffff) - return -1; + return AVERROR_INVALIDDATA; a->last_dc[component] += diff; block[0] = a->last_dc[component] << 3; } @@ -108,7 +108,7 @@ static inline int mdec_decode_block_intra(MDECContext *a, int16_t *block, int n) } if (i > 63) { av_log(a->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", a->mb_x, a->mb_y); - return -1; + return AVERROR_INVALIDDATA; } block[j] = level; @@ -121,15 +121,17 @@ static inline int mdec_decode_block_intra(MDECContext *a, int16_t *block, int n) static inline int decode_mb(MDECContext *a, int16_t block[6][64]) { - int i; + int i, ret; const int block_index[6] = { 5, 4, 0, 1, 2, 3 }; a->dsp.clear_blocks(block[0]); for (i = 0; i < 6; i++) { - if (mdec_decode_block_intra(a, block[block_index[i]], block_index[i]) < 0 || - get_bits_left(&a->gb) < 0) - return -1; + if ((ret = mdec_decode_block_intra(a, block[block_index[i]], + block_index[i])) < 0) + return ret; + if (get_bits_left(&a->gb) < 0) + return AVERROR_INVALIDDATA; } return 0; } @@ -163,15 +165,15 @@ static int decode_frame(AVCodecContext *avctx, int buf_size = avpkt->size; AVFrame *picture = data; AVFrame * const p = &a->picture; - int i; + int i, ret; if (p->data[0]) ff_thread_release_buffer(avctx, p); p->reference = 0; - if (ff_thread_get_buffer(avctx, p) < 0) { + if ((ret = ff_thread_get_buffer(avctx, p)) < 0) { av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); - return -1; + return ret; } p->pict_type = AV_PICTURE_TYPE_I; p->key_frame = 1; @@ -195,8 +197,8 @@ static int decode_frame(AVCodecContext *avctx, for (a->mb_x = 0; a->mb_x < a->mb_width; a->mb_x++) { for (a->mb_y = 0; a->mb_y < a->mb_height; a->mb_y++) { - if (decode_mb(a, a->block) < 0) - return -1; + if ((ret = decode_mb(a, a->block)) < 0) + return ret; idct_put(a, a->mb_x, a->mb_y); } |