diff options
Diffstat (limited to 'libavcodec/svq1dec.c')
-rw-r--r-- | libavcodec/svq1dec.c | 62 |
1 files changed, 31 insertions, 31 deletions
diff --git a/libavcodec/svq1dec.c b/libavcodec/svq1dec.c index 4b8b6568ac..86fe6f8813 100644 --- a/libavcodec/svq1dec.c +++ b/libavcodec/svq1dec.c @@ -8,20 +8,20 @@ * * SVQ1 Encoder (c) 2004 Mike Melanson <melanson@pcisys.net> * - * This file is part of Libav. + * This file is part of FFmpeg. * - * Libav is free software; you can redistribute it and/or + * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * - * Libav is distributed in the hope that it will be useful, + * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with Libav; if not, write to the Free Software + * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ @@ -111,12 +111,11 @@ static const uint8_t string_table[256] = { break; \ } \ /* divide block if next bit set */ \ - if (get_bits1(bitbuf) == 0) \ + if (!get_bits1(bitbuf)) \ break; \ /* add child nodes */ \ list[n++] = list[i]; \ - list[n++] = list[i] + \ - (((level & 1) ? pitch : 1) << (level / 2 + 1)); \ + list[n++] = list[i] + (((level & 1) ? pitch : 1) << ((level >> 1) + 1));\ } #define SVQ1_ADD_CODEBOOK() \ @@ -152,7 +151,7 @@ static const uint8_t string_table[256] = { 16 * j) << (level + 1); \ } \ mean -= stages * 128; \ - n4 = mean + (mean >> 31) << 16 | (mean & 0xFFFF); + n4 = (mean << 16) + mean; static int svq1_decode_block_intra(GetBitContext *bitbuf, uint8_t *pixels, int pitch) @@ -342,8 +341,7 @@ static int svq1_motion_inter_block(HpelDSPContext *hdsp, GetBitContext *bitbuf, } result = svq1_decode_motion_vector(bitbuf, &mv, pmv); - - if (result != 0) + if (result) return result; motion[0].x = @@ -386,8 +384,7 @@ static int svq1_motion_inter_4v_block(HpelDSPContext *hdsp, GetBitContext *bitbu } result = svq1_decode_motion_vector(bitbuf, &mv, pmv); - - if (result != 0) + if (result) return result; /* predict and decode motion vector (1) */ @@ -399,8 +396,7 @@ static int svq1_motion_inter_4v_block(HpelDSPContext *hdsp, GetBitContext *bitbu pmv[1] = &motion[(x / 8) + 3]; } result = svq1_decode_motion_vector(bitbuf, &motion[0], pmv); - - if (result != 0) + if (result) return result; /* predict and decode motion vector (2) */ @@ -408,8 +404,7 @@ static int svq1_motion_inter_4v_block(HpelDSPContext *hdsp, GetBitContext *bitbu pmv[2] = &motion[(x / 8) + 1]; result = svq1_decode_motion_vector(bitbuf, &motion[(x / 8) + 2], pmv); - - if (result != 0) + if (result) return result; /* predict and decode motion vector (3) */ @@ -417,8 +412,7 @@ static int svq1_motion_inter_4v_block(HpelDSPContext *hdsp, GetBitContext *bitbu pmv[3] = &motion[(x / 8) + 3]; result = svq1_decode_motion_vector(bitbuf, pmv[3], pmv); - - if (result != 0) + if (result) return result; /* form predictions */ @@ -521,6 +515,8 @@ static int svq1_decode_frame_header(AVCodecContext *avctx, AVFrame *frame) SVQ1Context *s = avctx->priv_data; GetBitContext *bitbuf = &s->gb; int frame_size_code; + int width = s->width; + int height = s->height; skip_bits(bitbuf, 8); /* temporal_reference */ @@ -559,7 +555,7 @@ static int svq1_decode_frame_header(AVCodecContext *avctx, AVFrame *frame) svq1_parse_string(bitbuf, msg); av_log(avctx, AV_LOG_INFO, - "embedded message: \"%s\"\n", (char *)msg); + "embedded message:\n%s\n", (char *)msg); } skip_bits(bitbuf, 2); @@ -571,20 +567,20 @@ static int svq1_decode_frame_header(AVCodecContext *avctx, AVFrame *frame) if (frame_size_code == 7) { /* load width, height (12 bits each) */ - s->width = get_bits(bitbuf, 12); - s->height = get_bits(bitbuf, 12); + width = get_bits(bitbuf, 12); + height = get_bits(bitbuf, 12); - if (!s->width || !s->height) + if (!width || !height) return AVERROR_INVALIDDATA; } else { /* get width, height from table */ - s->width = ff_svq1_frame_size_table[frame_size_code][0]; - s->height = ff_svq1_frame_size_table[frame_size_code][1]; + width = ff_svq1_frame_size_table[frame_size_code][0]; + height = ff_svq1_frame_size_table[frame_size_code][1]; } } /* unknown fields */ - if (get_bits1(bitbuf) == 1) { + if (get_bits1(bitbuf)) { skip_bits1(bitbuf); /* use packet checksum if (1) */ skip_bits1(bitbuf); /* component checksums after image data if (1) */ @@ -592,16 +588,18 @@ static int svq1_decode_frame_header(AVCodecContext *avctx, AVFrame *frame) return AVERROR_INVALIDDATA; } - if (get_bits1(bitbuf) == 1) { + if (get_bits1(bitbuf)) { skip_bits1(bitbuf); skip_bits(bitbuf, 4); skip_bits1(bitbuf); skip_bits(bitbuf, 2); - while (get_bits1(bitbuf) == 1) + while (get_bits1(bitbuf)) skip_bits(bitbuf, 8); } + s->width = width; + s->height = height; return 0; } @@ -617,7 +615,7 @@ static int svq1_decode_frame(AVCodecContext *avctx, void *data, svq1_pmv *pmv; /* initialize bit buffer */ - init_get_bits(&s->gb, buf, buf_size * 8); + init_get_bits8(&s->gb, buf, buf_size); /* decode frame header */ s->frame_code = get_bits(&s->gb, 22); @@ -629,12 +627,14 @@ static int svq1_decode_frame(AVCodecContext *avctx, void *data, if (s->frame_code != 0x20) { uint32_t *src = (uint32_t *)(buf + 4); + if (buf_size < 36) + return AVERROR_INVALIDDATA; + for (i = 0; i < 4; i++) src[i] = ((src[i] << 16) | (src[i] >> 16)) ^ src[7 - i]; } result = svq1_decode_frame_header(avctx, cur); - if (result != 0) { av_dlog(avctx, "Error in svq1_decode_frame_header %i\n", result); return result; @@ -676,8 +676,8 @@ static int svq1_decode_frame(AVCodecContext *avctx, void *data, for (x = 0; x < width; x += 16) { result = svq1_decode_block_intra(&s->gb, ¤t[x], linesize); - if (result != 0) { - av_log(avctx, AV_LOG_INFO, + if (result) { + av_log(avctx, AV_LOG_ERROR, "Error in svq1_decode_block %i (keyframe)\n", result); goto err; |