From patchwork Mon Apr 23 18:58:41 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Borsboom X-Patchwork-Id: 8609 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:155:0:0:0:0:0 with SMTP id c82-v6csp1019331jad; Mon, 23 Apr 2018 11:58:46 -0700 (PDT) X-Google-Smtp-Source: AIpwx482GOPUsjJ+X4sqdGCclbPW5d/fRudZiiKVDY0gFdQfhtA8EeIbiRtfMe7QDa/aVTG6yeZH X-Received: by 2002:adf:9444:: with SMTP id 62-v6mr11089069wrq.264.1524509926000; Mon, 23 Apr 2018 11:58:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524509925; cv=none; d=google.com; s=arc-20160816; b=MaeZhModDMmyMdYRhasbaxLZiETButsObaThFvbGaIUP4AObKo2FONjfam8MYFUD7r va0VtG3nk3Ky/jmfI52I9DnkA1vLPPvPmE1DbBC8dADv9aSfNiQM3MBDpBdlDSIx7zuF DMWzQiR/OhZc+yut3qIPqDtiThT/h/o28SpJ8nfxP4cmpsA3lw7KJ5FnNoILqTlVQqd+ HyWWn+BNWrABvVn3rQX/wziIOBxGwBAxMad+R18OhSYbbQtOW7yFF6W8zlQmaYb9F3JG a7EYUjaq55IwDmfM4psyUNnCEB+W0gpJJCOnJohNwDithvGDRjTAfKkAdEyx5pkkkGTe E2IA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:content-language:mime-version:user-agent:date :message-id:from:to:dkim-signature:delivered-to :arc-authentication-results; bh=/FnzOQS0IEVSz/0iNhvXzQS5AfL7vz8O41y/EsN/7uw=; b=g06AwXT/CaFYqiQEkYxh5emRPpW/5GCTyOaOohpzUGQ8wLaGiP2wiBUo274lrXpOep TPXHhRFWYP2jw5qmD0RQeaznDg1cov2FoSrVn1khNV3clHl1Bb3k4gypNkwfMrl51AQW Ry/F5hoMk8eIiUGBE0SJjGD7xbdVeCit3bog8WNNYfA/VWEyBjmDtZWaHMfHW7E+V989 jlIYh2M6dHhxCL0Rq0byaoFC+3wc/uxa2LvoZ34Dvg2MDv8niSi4GGGg/yLTMCWmC8P7 A//qiB5WbuZl00ewJbnAoNQGFG0mVPcJ31btL7PHfyQt6vS8G+3fU/cbIFuvM4968bIJ 39NQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@carpalis.nl header.s=default header.b=ScXOz7CF; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id i56-v6si10362345wrf.192.2018.04.23.11.58.45; Mon, 23 Apr 2018 11:58:45 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@carpalis.nl header.s=default header.b=ScXOz7CF; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BCCB8689F73; Mon, 23 Apr 2018 21:58:14 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from kyoto.xs4all.nl (kyoto.xs4all.nl [83.161.153.34]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9C091689957 for ; Mon, 23 Apr 2018 21:58:13 +0300 (EEST) Received: from [IPv6:2001:980:9507:0:8e70:5aff:fec6:83fc] ([IPv6:2001:980:9507:0:8e70:5aff:fec6:83fc]) (authenticated bits=0) by kyoto.xs4all.nl (8.14.7/8.14.7) with ESMTP id w3NIwfB7003275 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Mon, 23 Apr 2018 20:58:42 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=carpalis.nl; s=default; t=1524509922; bh=iEB0DpIP1kNNSuJG92K0pHxN02PPYE5H21qpUUCculA=; h=To:From:Subject:Date; b=ScXOz7CFfNnGi3pYHisSxBWkQ3zLwMnrzS9ASWkMj6UBq0RF/tQhPFZpfn82IPlbN pARN7qKY5mXzRmH6EODw0q6dtqiMwJ+KrpJBYwAKaOjCw+PDQ/MCrP8kf0UOqQRPK6 ZVgy4u5fAq3gyky+ZRAiq5/lzZHTnicDhgPHiHakqy7U9foNMtqNhaQPkVNQuSjc9t DXrzXlm6gblSYNk9JJ+irht3zLtJ0dwtsj8fDNy0iMrd9FUESor8a/N4tfAdLBmjkw rqnqMKpI4NyzFsGSWZxcrByR4f5mmiDCBuslLyi+CoK3EM6bXMSuZcyhDloVNdNAcX YNxe/X0GpbNAA== To: ffmpeg-devel@ffmpeg.org From: Jerome Borsboom Message-ID: <93eccb53-10ae-8e8e-ed2d-5503d3bec19f@carpalis.nl> Date: Mon, 23 Apr 2018 20:58:41 +0200 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 Content-Language: nl Subject: [FFmpeg-devel] [PATCH 02/14] avcodec/vc1: change to using v->block instead of s->block for P frames X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" The new overlap smooting filter smoothes image pixels stored in v->block. Switch to v->block instead of s->block for storing decoded image pixels for P frames. Additionally, we must take incrementing *_blk_idx out of the vc1_put_signed_blocks_clamped function. Signed-off-by: Jerome Borsboom --- libavcodec/vc1_block.c | 55 ++++++++++++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/libavcodec/vc1_block.c b/libavcodec/vc1_block.c index f9f26f7e42..1c3577796e 100644 --- a/libavcodec/vc1_block.c +++ b/libavcodec/vc1_block.c @@ -136,6 +136,7 @@ static void vc1_put_signed_blocks_clamped(VC1Context *v) } } } +} #define inc_blk_idx(idx) do { \ idx++; \ @@ -143,12 +144,6 @@ static void vc1_put_signed_blocks_clamped(VC1Context *v) idx = 0; \ } while (0) - inc_blk_idx(v->topleft_blk_idx); - inc_blk_idx(v->top_blk_idx); - inc_blk_idx(v->left_blk_idx); - inc_blk_idx(v->cur_blk_idx); -} - /***********************************************************************/ /** * @name VC-1 Block-level functions @@ -1325,15 +1320,15 @@ static int vc1_decode_p_mb(VC1Context *v) if (i == 1 || i == 3 || s->mb_x) v->c_avail = v->mb_type[0][s->block_index[i] - 1]; - vc1_decode_intra_block(v, s->block[i], i, val, mquant, + vc1_decode_intra_block(v, v->block[v->cur_blk_idx][i], i, val, mquant, (i & 4) ? v->codingset2 : v->codingset); if (CONFIG_GRAY && (i > 3) && (s->avctx->flags & AV_CODEC_FLAG_GRAY)) continue; - v->vc1dsp.vc1_inv_trans_8x8(s->block[i]); + v->vc1dsp.vc1_inv_trans_8x8(v->block[v->cur_blk_idx][i]); if (v->rangeredfrm) for (j = 0; j < 64; j++) - s->block[i][j] <<= 1; - s->idsp.put_signed_pixels_clamped(s->block[i], + v->block[v->cur_blk_idx][i][j] <<= 1; + s->idsp.put_signed_pixels_clamped(v->block[v->cur_blk_idx][i], s->dest[dst_idx] + off, i & 4 ? s->uvlinesize : s->linesize); @@ -1346,7 +1341,7 @@ static int vc1_decode_p_mb(VC1Context *v) block_cbp |= 0xF << (i << 2); block_intra |= 1 << i; } else if (val) { - pat = vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, first_block, + pat = vc1_decode_p_block(v, v->block[v->cur_blk_idx][i], i, mquant, ttmb, first_block, s->dest[dst_idx] + off, (i & 4) ? s->uvlinesize : s->linesize, CONFIG_GRAY && (i & 4) && (s->avctx->flags & AV_CODEC_FLAG_GRAY), &block_tt); block_cbp |= pat << (i << 2); @@ -1436,15 +1431,15 @@ static int vc1_decode_p_mb(VC1Context *v) if (i == 1 || i == 3 || s->mb_x) v->c_avail = v->mb_type[0][s->block_index[i] - 1]; - vc1_decode_intra_block(v, s->block[i], i, is_coded[i], mquant, + vc1_decode_intra_block(v, v->block[v->cur_blk_idx][i], i, is_coded[i], mquant, (i & 4) ? v->codingset2 : v->codingset); if (CONFIG_GRAY && (i > 3) && (s->avctx->flags & AV_CODEC_FLAG_GRAY)) continue; - v->vc1dsp.vc1_inv_trans_8x8(s->block[i]); + v->vc1dsp.vc1_inv_trans_8x8(v->block[v->cur_blk_idx][i]); if (v->rangeredfrm) for (j = 0; j < 64; j++) - s->block[i][j] <<= 1; - s->idsp.put_signed_pixels_clamped(s->block[i], + v->block[v->cur_blk_idx][i][j] <<= 1; + s->idsp.put_signed_pixels_clamped(v->block[v->cur_blk_idx][i], s->dest[dst_idx] + off, (i & 4) ? s->uvlinesize : s->linesize); @@ -1457,7 +1452,7 @@ static int vc1_decode_p_mb(VC1Context *v) block_cbp |= 0xF << (i << 2); block_intra |= 1 << i; } else if (is_coded[i]) { - pat = vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, + pat = vc1_decode_p_block(v, v->block[v->cur_blk_idx][i], i, mquant, ttmb, first_block, s->dest[dst_idx] + off, (i & 4) ? s->uvlinesize : s->linesize, CONFIG_GRAY && (i & 4) && (s->avctx->flags & AV_CODEC_FLAG_GRAY), @@ -1584,11 +1579,11 @@ static int vc1_decode_p_mb_intfr(VC1Context *v) if (i == 1 || i == 3 || s->mb_x) v->c_avail = v->mb_type[0][s->block_index[i] - 1]; - vc1_decode_intra_block(v, s->block[i], i, val, mquant, + vc1_decode_intra_block(v, v->block[v->cur_blk_idx][i], i, val, mquant, (i & 4) ? v->codingset2 : v->codingset); if (CONFIG_GRAY && (i > 3) && (s->avctx->flags & AV_CODEC_FLAG_GRAY)) continue; - v->vc1dsp.vc1_inv_trans_8x8(s->block[i]); + v->vc1dsp.vc1_inv_trans_8x8(v->block[v->cur_blk_idx][i]); if (i < 4) { stride_y = s->linesize << fieldtx; off = (fieldtx) ? ((i & 1) * 8) + ((i & 2) >> 1) * s->linesize : (i & 1) * 8 + 4 * (i & 2) * s->linesize; @@ -1596,7 +1591,7 @@ static int vc1_decode_p_mb_intfr(VC1Context *v) stride_y = s->uvlinesize; off = 0; } - s->idsp.put_signed_pixels_clamped(s->block[i], + s->idsp.put_signed_pixels_clamped(v->block[v->cur_blk_idx][i], s->dest[dst_idx] + off, stride_y); //TODO: loop filter @@ -1670,7 +1665,7 @@ static int vc1_decode_p_mb_intfr(VC1Context *v) else off = (i & 4) ? 0 : ((i & 1) * 8 + ((i > 1) * s->linesize)); if (val) { - pat = vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, + pat = vc1_decode_p_block(v, v->block[v->cur_blk_idx][i], i, mquant, ttmb, first_block, s->dest[dst_idx] + off, (i & 4) ? s->uvlinesize : (s->linesize << fieldtx), CONFIG_GRAY && (i & 4) && (s->avctx->flags & AV_CODEC_FLAG_GRAY), &block_tt); @@ -1750,13 +1745,13 @@ static int vc1_decode_p_mb_intfi(VC1Context *v) if (i == 1 || i == 3 || s->mb_x) v->c_avail = v->mb_type[0][s->block_index[i] - 1]; - vc1_decode_intra_block(v, s->block[i], i, val, mquant, + vc1_decode_intra_block(v, v->block[v->cur_blk_idx][i], i, val, mquant, (i & 4) ? v->codingset2 : v->codingset); if (CONFIG_GRAY && (i > 3) && (s->avctx->flags & AV_CODEC_FLAG_GRAY)) continue; - v->vc1dsp.vc1_inv_trans_8x8(s->block[i]); + v->vc1dsp.vc1_inv_trans_8x8(v->block[v->cur_blk_idx][i]); off = (i & 4) ? 0 : ((i & 1) * 8 + (i & 2) * 4 * s->linesize); - s->idsp.put_signed_pixels_clamped(s->block[i], + s->idsp.put_signed_pixels_clamped(v->block[v->cur_blk_idx][i], s->dest[dst_idx] + off, (i & 4) ? s->uvlinesize : s->linesize); @@ -1803,7 +1798,7 @@ static int vc1_decode_p_mb_intfi(VC1Context *v) val = ((cbp >> (5 - i)) & 1); off = (i & 4) ? 0 : (i & 1) * 8 + (i & 2) * 4 * s->linesize; if (val) { - pat = vc1_decode_p_block(v, s->block[i], i, mquant, ttmb, + pat = vc1_decode_p_block(v, v->block[v->cur_blk_idx][i], i, mquant, ttmb, first_block, s->dest[dst_idx] + off, (i & 4) ? s->uvlinesize : s->linesize, CONFIG_GRAY && (i & 4) && (s->avctx->flags & AV_CODEC_FLAG_GRAY), @@ -2740,6 +2735,10 @@ static void vc1_decode_i_blocks_adv(VC1Context *v) get_bits_count(&s->gb), v->bits); return; } + inc_blk_idx(v->topleft_blk_idx); + inc_blk_idx(v->top_blk_idx); + inc_blk_idx(v->left_blk_idx); + inc_blk_idx(v->cur_blk_idx); } if (!v->s.loop_filter) ff_mpeg_draw_horiz_band(s, s->mb_y * 16, 16); @@ -2756,6 +2755,10 @@ static void vc1_decode_i_blocks_adv(VC1Context *v) vc1_put_signed_blocks_clamped(v); if (v->s.loop_filter) ff_vc1_loop_filter_iblk_delayed(v, v->pq); + inc_blk_idx(v->topleft_blk_idx); + inc_blk_idx(v->top_blk_idx); + inc_blk_idx(v->left_blk_idx); + inc_blk_idx(v->cur_blk_idx); } if (v->s.loop_filter) ff_mpeg_draw_horiz_band(s, (s->end_mb_y - 1) * 16, 16); @@ -2817,6 +2820,10 @@ static void vc1_decode_p_blocks(VC1Context *v) get_bits_count(&s->gb), v->bits, s->mb_x, s->mb_y); return; } + inc_blk_idx(v->topleft_blk_idx); + inc_blk_idx(v->top_blk_idx); + inc_blk_idx(v->left_blk_idx); + inc_blk_idx(v->cur_blk_idx); } memmove(v->cbp_base, v->cbp, sizeof(v->cbp_base[0]) * s->mb_stride); memmove(v->ttblk_base, v->ttblk, sizeof(v->ttblk_base[0]) * s->mb_stride);