From: Michael Niedermayer Date: Thu, 13 Dec 2012 10:38:52 +0000 (+0100) Subject: Merge commit '95baf701db719ecad6b31000429e20eca2526ed6' X-Git-Tag: android-x86-4.4-r1~7257 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=e7f255d89b587ce78b17d1bd45521d21ff10822b;p=android-x86%2Fexternal-ffmpeg.git Merge commit '95baf701db719ecad6b31000429e20eca2526ed6' * commit '95baf701db719ecad6b31000429e20eca2526ed6': svq1: deMpegEncContextize Conflicts: libavcodec/svq1dec.c Merged-by: Michael Niedermayer --- e7f255d89b587ce78b17d1bd45521d21ff10822b diff --cc libavcodec/svq1dec.c index efe23f1e35,9c3c13a989..a76ac7114e --- a/libavcodec/svq1dec.c +++ b/libavcodec/svq1dec.c @@@ -502,11 -521,11 +515,13 @@@ static void svq1_parse_string(GetBitCon } } - static int svq1_decode_frame_header(GetBitContext *bitbuf, MpegEncContext *s) + 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 */ @@@ -597,25 -628,23 +626,25 @@@ static int svq1_decode_frame(AVCodecCon init_get_bits(&s->gb, buf, buf_size * 8); /* decode frame header */ - s->f_code = get_bits(&s->gb, 22); + s->frame_code = get_bits(&s->gb, 22); - if ((s->f_code & ~0x70) || !(s->f_code & 0x60)) + if ((s->frame_code & ~0x70) || !(s->frame_code & 0x60)) - return -1; + return AVERROR_INVALIDDATA; /* swap some header bytes (why?) */ - if (s->f_code != 0x20) { + 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(&s->gb, s); - if (result) { - av_dlog(s->avctx, "Error in svq1_decode_frame_header %i\n", result); + result = svq1_decode_frame_header(avctx, cur); - + if (result != 0) { - av_dlog(s->avctx, "Error in svq1_decode_frame_header %i\n", result); ++ av_dlog(avctx, "Error in svq1_decode_frame_header %i\n", result); return result; } avcodec_set_dimensions(avctx, s->width, s->height); @@@ -668,8 -684,8 +684,8 @@@ 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(s->avctx, AV_LOG_ERROR, ++ av_log(avctx, AV_LOG_ERROR, "Error in svq1_decode_block %i (keyframe)\n", result); goto err; @@@ -683,11 -706,12 +706,12 @@@ for (y = 0; y < height; y += 16) { for (x = 0; x < width; x += 16) { - result = svq1_decode_delta_block(s, &s->gb, ¤t[x], + result = svq1_decode_delta_block(avctx, &s->dsp, + &s->gb, ¤t[x], previous, linesize, pmv, x, y); - if (result != 0) { - av_dlog(s->avctx, + if (result) { - av_dlog(s->avctx, ++ av_dlog(avctx, "Error in svq1_decode_delta_block %i\n", result); goto err; @@@ -702,10 -726,9 +726,10 @@@ } } - *pict = s->current_picture.f; - pict->qscale_table = NULL; - - ff_MPV_frame_end(s); + *(AVFrame*)data = *cur; ++ cur->qscale_table = NULL; + if (!s->nonref) + FFSWAP(AVFrame*, s->cur, s->prev); *got_frame = 1; result = buf_size;