From: Michael Niedermayer Date: Sat, 26 Jan 2013 13:47:08 +0000 (+0100) Subject: Merge commit 'f337c29017b10c98ccb4dce20efced4c74b665f6' X-Git-Tag: n1.2~871 X-Git-Url: http://git.videolan.org/?p=ffmpeg.git;a=commitdiff_plain;h=325ee4ed7ad2aefb45c0f917285d04b3c3503f40 Merge commit 'f337c29017b10c98ccb4dce20efced4c74b665f6' * commit 'f337c29017b10c98ccb4dce20efced4c74b665f6': eatgq: return meaningful error codes. eatgv: cosmetics, reformat Conflicts: libavcodec/eatgq.c libavcodec/eatgv.c Merged-by: Michael Niedermayer --- 325ee4ed7ad2aefb45c0f917285d04b3c3503f40 diff --cc libavcodec/eatgq.c index fba6e831cf,1d1370b422..cba9a16923 --- a/libavcodec/eatgq.c +++ b/libavcodec/eatgq.c @@@ -194,14 -189,13 +194,14 @@@ static int tgq_decode_frame(AVCodecCont const uint8_t *buf = avpkt->data; int buf_size = avpkt->size; TgqContext *s = avctx->priv_data; - int x,y; + int x, y, ret; - int big_endian = AV_RL32(&buf[4]) > 0x000FFFFF; + int big_endian; if (buf_size < 16) { av_log(avctx, AV_LOG_WARNING, "truncated header\n"); - return -1; + return AVERROR_INVALIDDATA; } + big_endian = AV_RL32(&buf[4]) > 0x000FFFFF; bytestream2_init(&s->gb, buf + 8, buf_size - 8); if (big_endian) { s->width = bytestream2_get_be16u(&s->gb); diff --cc libavcodec/eatgv.c index 9dca2399b9,a40ea839d6..c75f1f3b80 --- a/libavcodec/eatgv.c +++ b/libavcodec/eatgv.c @@@ -50,13 -50,12 +50,14 @@@ typedef struct TgvContext int num_blocks_packed; ///< current length of block_codebook } TgvContext; - static av_cold int tgv_decode_init(AVCodecContext *avctx){ + static av_cold int tgv_decode_init(AVCodecContext *avctx) + { TgvContext *s = avctx->priv_data; - s->avctx = avctx; + s->avctx = avctx; avctx->time_base = (AVRational){1, 15}; - avctx->pix_fmt = AV_PIX_FMT_PAL8; + avctx->pix_fmt = AV_PIX_FMT_PAL8; + avcodec_get_frame_defaults(&s->frame); + avcodec_get_frame_defaults(&s->last_frame); return 0; } @@@ -174,9 -177,9 +179,9 @@@ static int tgv_decode_inter(TgvContext } /* read motion vectors */ - mvbits = (num_mvs*2*10+31) & ~31; + mvbits = (num_mvs * 2 * 10 + 31) & ~31; - if (buf_end - buf < (mvbits>>3)+16*num_blocks_raw+8*num_blocks_packed) - if (buf + (mvbits >> 3) + 16 * num_blocks_raw + 8 * num_blocks_packed > buf_end) ++ if (buf_end - buf < (mvbits>>3) + 16*num_blocks_raw + 8*num_blocks_packed) return AVERROR_INVALIDDATA; init_get_bits(&gb, buf, mvbits); @@@ -205,39 -208,37 +210,39 @@@ return AVERROR_INVALIDDATA; /* read vectors and build frame */ - for(y=0; yavctx->height/4; y++) - for(x=0; xavctx->width/4; x++) { - unsigned int vector = get_bits(&gb, vector_bits); - const unsigned char *src; - int src_stride; - - if (vector < num_mvs) { - int mx = x * 4 + s->mv_codebook[vector][0]; - int my = y * 4 + s->mv_codebook[vector][1]; - - if ( mx < 0 || mx + 4 > s->avctx->width - || my < 0 || my + 4 > s->avctx->height) { - av_log(s->avctx, AV_LOG_ERROR, "MV %d %d out of picture\n", mx, my); - continue; - } + for (y = 0; y < s->avctx->height / 4; y++) + for (x = 0; x < s->avctx->width / 4; x++) { + unsigned int vector = get_bits(&gb, vector_bits); + const unsigned char *src; + int src_stride; + + if (vector < num_mvs) { + int mx = x * 4 + s->mv_codebook[vector][0]; + int my = y * 4 + s->mv_codebook[vector][1]; + + if (mx < 0 || mx + 4 > s->avctx->width || - my < 0 || my + 4 > s->avctx->height) ++ my < 0 || my + 4 > s->avctx->height) { ++ av_log(s->avctx, AV_LOG_ERROR, "MV %d %d out of picture\n", mx, my); + continue; ++ } - src = s->last_frame.data[0] + mx + my * s->last_frame.linesize[0]; - src_stride = s->last_frame.linesize[0]; - }else{ - int offset = vector - num_mvs; - if (offsetblock_codebook[offset-num_blocks_raw]; - else - continue; - src_stride = 4; - } + src = s->last_frame.data[0] + mx + my * s->last_frame.linesize[0]; + src_stride = s->last_frame.linesize[0]; + } else { + int offset = vector - num_mvs; + if (offset < num_blocks_raw) + src = blocks_raw + 16*offset; + else if (offset - num_blocks_raw < num_blocks_packed) + src = s->block_codebook[offset - num_blocks_raw]; + else + continue; + src_stride = 4; + } - for(j=0; j<4; j++) - for(i=0; i<4; i++) - s->frame.data[0][ (y*4+j)*s->frame.linesize[0] + (x*4+i) ] = - src[j*src_stride + i]; + for (j = 0; j < 4; j++) + for (i = 0; i < 4; i++) + s->frame.data[0][(y * 4 + j) * s->frame.linesize[0] + (x * 4 + i)] = + src[j * src_stride + i]; } return 0; @@@ -262,15 -263,12 +267,15 @@@ static int tgv_decode_frame(AVCodecCont const uint8_t *buf_end = buf + buf_size; int chunk_type, ret; + if (buf_end - buf < EA_PREAMBLE_SIZE) + return AVERROR_INVALIDDATA; + chunk_type = AV_RL32(&buf[0]); - buf += EA_PREAMBLE_SIZE; + buf += EA_PREAMBLE_SIZE; - if (chunk_type==kVGT_TAG) { + if (chunk_type == kVGT_TAG) { int pal_count, i; - if (buf + 12 > buf_end) { + if(buf_end - buf < 12) { av_log(avctx, AV_LOG_WARNING, "truncated header\n"); return AVERROR_INVALIDDATA; } @@@ -285,8 -283,8 +290,8 @@@ pal_count = AV_RL16(&buf[6]); buf += 12; - for(i=0; i= 3; i++) { - for (i = 0; i < pal_count && i < AVPALETTE_COUNT && buf + 2 < buf_end; i++) { - s->palette[i] = AV_RB24(buf); ++ for(i = 0; i < pal_count && i < AVPALETTE_COUNT && buf_end - buf >= 3; i++) { + s->palette[i] = 0xFFU << 24 | AV_RB24(buf); buf += 3; } }