mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
mdec: return meaningful error codes.
This commit is contained in:
parent
f713411d4c
commit
30d62507cd
@ -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);
|
component = (n <= 3 ? 0 : n - 4 + 1);
|
||||||
diff = decode_dc(&a->gb, component);
|
diff = decode_dc(&a->gb, component);
|
||||||
if (diff >= 0xffff)
|
if (diff >= 0xffff)
|
||||||
return -1;
|
return AVERROR_INVALIDDATA;
|
||||||
a->last_dc[component] += diff;
|
a->last_dc[component] += diff;
|
||||||
block[0] = a->last_dc[component] << 3;
|
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) {
|
if (i > 63) {
|
||||||
av_log(a->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", a->mb_x, a->mb_y);
|
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;
|
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])
|
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 };
|
const int block_index[6] = { 5, 4, 0, 1, 2, 3 };
|
||||||
|
|
||||||
a->dsp.clear_blocks(block[0]);
|
a->dsp.clear_blocks(block[0]);
|
||||||
|
|
||||||
for (i = 0; i < 6; i++) {
|
for (i = 0; i < 6; i++) {
|
||||||
if (mdec_decode_block_intra(a, block[block_index[i]], block_index[i]) < 0 ||
|
if ((ret = mdec_decode_block_intra(a, block[block_index[i]],
|
||||||
get_bits_left(&a->gb) < 0)
|
block_index[i])) < 0)
|
||||||
return -1;
|
return ret;
|
||||||
|
if (get_bits_left(&a->gb) < 0)
|
||||||
|
return AVERROR_INVALIDDATA;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -163,15 +165,15 @@ static int decode_frame(AVCodecContext *avctx,
|
|||||||
int buf_size = avpkt->size;
|
int buf_size = avpkt->size;
|
||||||
AVFrame *picture = data;
|
AVFrame *picture = data;
|
||||||
AVFrame * const p = &a->picture;
|
AVFrame * const p = &a->picture;
|
||||||
int i;
|
int i, ret;
|
||||||
|
|
||||||
if (p->data[0])
|
if (p->data[0])
|
||||||
ff_thread_release_buffer(avctx, p);
|
ff_thread_release_buffer(avctx, p);
|
||||||
|
|
||||||
p->reference = 0;
|
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");
|
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
|
||||||
return -1;
|
return ret;
|
||||||
}
|
}
|
||||||
p->pict_type = AV_PICTURE_TYPE_I;
|
p->pict_type = AV_PICTURE_TYPE_I;
|
||||||
p->key_frame = 1;
|
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_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++) {
|
for (a->mb_y = 0; a->mb_y < a->mb_height; a->mb_y++) {
|
||||||
if (decode_mb(a, a->block) < 0)
|
if ((ret = decode_mb(a, a->block)) < 0)
|
||||||
return -1;
|
return ret;
|
||||||
|
|
||||||
idct_put(a, a->mb_x, a->mb_y);
|
idct_put(a, a->mb_x, a->mb_y);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user