From 35a35d49d23c2b799e771f8947c0bc6cc6a45fe8 Mon Sep 17 00:00:00 2001 From: Mashiat Sarker Shakkhar Date: Tue, 9 Oct 2012 19:38:19 +0000 Subject: Double motion vector range for HPEL interlaced picture in proper place The existing code is not in the right place and it should cover both interlaced frame and field pictures. Signed-off-by: Derek Buitenhuis --- libavcodec/vc1.c | 5 +++++ libavcodec/vc1dec.c | 4 ---- 2 files changed, 5 insertions(+), 4 deletions(-) (limited to 'libavcodec') diff --git a/libavcodec/vc1.c b/libavcodec/vc1.c index b04d570602..c7edc25a25 100644 --- a/libavcodec/vc1.c +++ b/libavcodec/vc1.c @@ -1223,6 +1223,11 @@ int ff_vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb) break; } + if (v->fcm != PROGRESSIVE && !v->s.quarter_sample) { + v->range_x <<= 1; + v->range_y <<= 1; + } + /* AC Syntax */ v->c_ac_table_index = decode012(gb); if (v->s.pict_type == AV_PICTURE_TYPE_I || v->s.pict_type == AV_PICTURE_TYPE_BI) { diff --git a/libavcodec/vc1dec.c b/libavcodec/vc1dec.c index 40164cc9db..6bfba682d1 100644 --- a/libavcodec/vc1dec.c +++ b/libavcodec/vc1dec.c @@ -1573,10 +1573,6 @@ static inline void vc1_pred_mv(VC1Context *v, int n, int dmv_x, int dmv_y, } } - if (v->field_mode && !s->quarter_sample) { - r_x <<= 1; - r_y <<= 1; - } if (v->field_mode && v->numref) r_y >>= 1; if (v->field_mode && v->cur_field_type && v->ref_field_type[dir] == 0) -- cgit v1.2.3 From 6d556e8327f6275c807c6da7257f617c256fe759 Mon Sep 17 00:00:00 2001 From: Janne Grunau Date: Wed, 10 Oct 2012 19:16:09 +0200 Subject: indeo4/5: remove constant parameter num_bands from wavelet recomposition Fixes bogus uninitialized value compiler and coverity warnings. --- libavcodec/ivi_common.c | 4 ++-- libavcodec/ivi_dsp.c | 5 +++-- libavcodec/ivi_dsp.h | 6 ++---- 3 files changed, 7 insertions(+), 8 deletions(-) (limited to 'libavcodec') diff --git a/libavcodec/ivi_common.c b/libavcodec/ivi_common.c index d1a86c4b65..d48014c39a 100644 --- a/libavcodec/ivi_common.c +++ b/libavcodec/ivi_common.c @@ -808,9 +808,9 @@ int ff_ivi_decode_frame(AVCodecContext *avctx, void *data, int *data_size, if (ctx->is_scalable) { if (avctx->codec_id == AV_CODEC_ID_INDEO4) - ff_ivi_recompose_haar(&ctx->planes[0], ctx->frame.data[0], ctx->frame.linesize[0], 4); + ff_ivi_recompose_haar(&ctx->planes[0], ctx->frame.data[0], ctx->frame.linesize[0]); else - ff_ivi_recompose53 (&ctx->planes[0], ctx->frame.data[0], ctx->frame.linesize[0], 4); + ff_ivi_recompose53 (&ctx->planes[0], ctx->frame.data[0], ctx->frame.linesize[0]); } else { ff_ivi_output_plane(&ctx->planes[0], ctx->frame.data[0], ctx->frame.linesize[0]); } diff --git a/libavcodec/ivi_dsp.c b/libavcodec/ivi_dsp.c index caad843c8b..3ffe84ab9e 100644 --- a/libavcodec/ivi_dsp.c +++ b/libavcodec/ivi_dsp.c @@ -33,7 +33,7 @@ #include "ivi_dsp.h" void ff_ivi_recompose53(const IVIPlaneDesc *plane, uint8_t *dst, - const int dst_pitch, const int num_bands) + const int dst_pitch) { int x, y, indx; int32_t p0, p1, p2, p3, tmp0, tmp1, tmp2; @@ -41,6 +41,7 @@ void ff_ivi_recompose53(const IVIPlaneDesc *plane, uint8_t *dst, int32_t b3_1, b3_2, b3_3, b3_4, b3_5, b3_6, b3_7, b3_8, b3_9; int32_t pitch, back_pitch; const IDWTELEM *b0_ptr, *b1_ptr, *b2_ptr, *b3_ptr; + const int num_bands = 4; /* all bands should have the same pitch */ pitch = plane->bands[0].pitch; @@ -179,7 +180,7 @@ void ff_ivi_recompose53(const IVIPlaneDesc *plane, uint8_t *dst, } void ff_ivi_recompose_haar(const IVIPlaneDesc *plane, uint8_t *dst, - const int dst_pitch, const int num_bands) + const int dst_pitch) { int x, y, indx, b0, b1, b2, b3, p0, p1, p2, p3; const IDWTELEM *b0_ptr, *b1_ptr, *b2_ptr, *b3_ptr; diff --git a/libavcodec/ivi_dsp.h b/libavcodec/ivi_dsp.h index 04385140f3..c46f8b2d8d 100644 --- a/libavcodec/ivi_dsp.h +++ b/libavcodec/ivi_dsp.h @@ -38,10 +38,9 @@ * @param[in] plane pointer to the descriptor of the plane being processed * @param[out] dst pointer to the destination buffer * @param[in] dst_pitch pitch of the destination buffer - * @param[in] num_bands number of wavelet bands to be processed */ void ff_ivi_recompose53(const IVIPlaneDesc *plane, uint8_t *dst, - const int dst_pitch, const int num_bands); + const int dst_pitch); /** * Haar wavelet recomposition filter for Indeo 4 @@ -49,10 +48,9 @@ void ff_ivi_recompose53(const IVIPlaneDesc *plane, uint8_t *dst, * @param[in] plane pointer to the descriptor of the plane being processed * @param[out] dst pointer to the destination buffer * @param[in] dst_pitch pitch of the destination buffer - * @param[in] num_bands number of wavelet bands to be processed */ void ff_ivi_recompose_haar(const IVIPlaneDesc *plane, uint8_t *dst, - const int dst_pitch, const int num_bands); + const int dst_pitch); /** * two-dimensional inverse Haar 8x8 transform for Indeo 4 -- cgit v1.2.3 From c466eb174699bd912b9cf601e5b1a5da87e83a33 Mon Sep 17 00:00:00 2001 From: Janne Grunau Date: Wed, 10 Oct 2012 19:47:05 +0200 Subject: flashsv: propagate inflateReset() errors Fixes CID717493. --- libavcodec/flashsv.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'libavcodec') diff --git a/libavcodec/flashsv.c b/libavcodec/flashsv.c index 1f21c8bd29..6052ecdf82 100644 --- a/libavcodec/flashsv.c +++ b/libavcodec/flashsv.c @@ -121,10 +121,11 @@ static av_cold int flashsv_decode_init(AVCodecContext *avctx) } -static void flashsv2_prime(FlashSVContext *s, uint8_t *src, - int size, int unp_size) +static int flashsv2_prime(FlashSVContext *s, uint8_t *src, + int size, int unp_size) { z_stream zs; + int zret; // Zlib return code zs.zalloc = NULL; zs.zfree = NULL; @@ -144,13 +145,18 @@ static void flashsv2_prime(FlashSVContext *s, uint8_t *src, deflate(&zs, Z_SYNC_FLUSH); deflateEnd(&zs); - inflateReset(&s->zstream); + if ((zret = inflateReset(&s->zstream)) != Z_OK) { + av_log(s->avctx, AV_LOG_ERROR, "Inflate reset error: %d\n", zret); + return AVERROR_UNKNOWN; + } s->zstream.next_in = s->deflate_block; s->zstream.avail_in = s->deflate_block_size - zs.avail_out; s->zstream.next_out = s->tmpblock; s->zstream.avail_out = s->block_size * 3; inflate(&s->zstream, Z_SYNC_FLUSH); + + return 0; } static int flashsv_decode_block(AVCodecContext *avctx, AVPacket *avpkt, @@ -163,11 +169,14 @@ static int flashsv_decode_block(AVCodecContext *avctx, AVPacket *avpkt, int k; int ret = inflateReset(&s->zstream); if (ret != Z_OK) { - //return -1; + av_log(avctx, AV_LOG_ERROR, "Inflate reset error: %d\n", ret); + return AVERROR_UNKNOWN; } if (s->zlibprime_curr || s->zlibprime_prev) { - flashsv2_prime(s, s->blocks[blk_idx].pos, s->blocks[blk_idx].size, + ret = flashsv2_prime(s, s->blocks[blk_idx].pos, s->blocks[blk_idx].size, s->blocks[blk_idx].unp_size); + if (ret < 0) + return ret; } s->zstream.next_in = avpkt->data + get_bits_count(gb) / 8; s->zstream.avail_in = block_size; -- cgit v1.2.3