From patchwork Fri Jun 8 09:01:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Borsboom X-Patchwork-Id: 9323 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:11c:0:0:0:0:0 with SMTP id c28-v6csp601068jad; Fri, 8 Jun 2018 02:01:30 -0700 (PDT) X-Google-Smtp-Source: ADUXVKJHTJqeX7wQzSupBdA+RwGQ5craQlZP9E18E4IN8tTNmlSDdrE0awKjXHeEeKhaVXRFWiak X-Received: by 2002:a1c:1c8f:: with SMTP id c137-v6mr908069wmc.142.1528448490198; Fri, 08 Jun 2018 02:01:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1528448490; cv=none; d=google.com; s=arc-20160816; b=osjb1TV3M91626YMu98UbNLMJbbqUMeIegtYa8WYupl7Wrakff1jHYk/+XC0A7W484 vEal0cZxCExho4auFIgTuCglOHGN1QIEf+ZTo33F2UJDtZeCUGmvSZ41MjOZCYz/tljd OC9CN8GmGvhxYBjdxHYAhVK3t3pp4dGJZlkfLPourAxRvk+IUYsugI0Wl/0JbGI3vvdE b4EKv+UPQ5Wch+l/3dKzoE9eWW3fnEcUGTt/zyOFEdfRDb36vfXHL+earBX46/WJO6IF ntdXkfcg9VhoR7tUNbB2vKfY17/Yz3E8WyLTWBRbPX9PGqp32hIZi1PkLvBltqwT5UQu aw/w== 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:in-reply-to:mime-version :user-agent:date:message-id:from:references:to:dkim-signature :delivered-to:arc-authentication-results; bh=pdmsGLFVWKdceRM2U+V8Vt7AJ48Dn1VicxYY4CGrcCg=; b=j0cYn/yU2cRz1aHTuN5PFsXHwmwF4/0x7E7vH/sYtq/YbNQGF4yKBF9N5gOM/OhTXo 7AXJ51xNKzaXKwlBIywgjQ7FXgbfxz5V/WLBUUYv4lQ9N7X+4dN9p3ExMtf55jrxcoBC 6NYFHEekrq1BqqrfVHe8Iw8BVpHc6Lq5kHd6Q5zVN916xHs8h7pTM3xfbmueayw0uvWG L51vDqAvnnl3/J3oa8MQNsb7x5Y1+J+sVs5xSW8L9E1F8Q93hBjRsmb3XsCSHspd3iIf h7t+v3dXmYBeAe3eyM+1w7RFIUy4oAUa/zH6t5+2D/fFfn2D+9mdFytFhYgDQNSQjI0O 3fUg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@carpalis.nl header.s=default header.b=RLPOY0d7; 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 r10-v6si28863097wrb.275.2018.06.08.02.01.29; Fri, 08 Jun 2018 02:01:30 -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=RLPOY0d7; 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 86ABF68A600; Fri, 8 Jun 2018 12:00:39 +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 C0AC268A5D4 for ; Fri, 8 Jun 2018 12:00:33 +0300 (EEST) Received: from [10.1.50.39] ([87.215.30.74]) (authenticated bits=0) by kyoto.xs4all.nl (8.14.7/8.14.7) with ESMTP id w5891J7J005444 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Fri, 8 Jun 2018 11:01:20 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=carpalis.nl; s=default; t=1528448480; bh=ZN1SivnBHEA8mnMSGw5/dmKu/SDvoLkDR/sYK5dM5pU=; h=To:References:Subject:From:Date:In-Reply-To; b=RLPOY0d7RtXudPsNW6UeiAGhosvHbJKOt5jcvthlLN8mtLTxYjtVa9DUhEj34NToV Rk+l4fW9DFwbrc7eKeoh26QgQVO8aVMlvFD9REOx12f4SdPLCp4ds1zTOlpX8L2ujA 9H9zNPyLWm0lvp+L1ia3Ch/H8fEGl5YylHAWGXXZJ3CiCeqa+sQc5WRP0DeNMoUK7w rQJH+2SHSHapmQU9H8+hw+Draj36l6rI7G3RMD8nbDXlo6hLO45QK3wyuDWJBtiHf5 7JzRO2EOArNKMG7TgneoWnID+HYGRq4fdg+0Gitu+0Xfo1G0YTO6j7S0GyQqplbB8v Uq3oNYKMG/FYw== To: ffmpeg-devel@ffmpeg.org References: <0cededb4-5b59-8eb7-0c0c-f104e7ea2fff@carpalis.nl> From: Jerome Borsboom Message-ID: <5a0d4f29-b082-8867-b7e9-a9a2d91c644d@carpalis.nl> Date: Fri, 8 Jun 2018 11:01:20 +0200 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 MIME-Version: 1.0 In-Reply-To: <0cededb4-5b59-8eb7-0c0c-f104e7ea2fff@carpalis.nl> Content-Language: nl Subject: Re: [FFmpeg-devel] [PATCH 1/4 v2] avcodec/vc1: fix overlap and loop filtering for Simple and Main profile 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" Overlap filtering I and BI frames for Simple and Main profile is only dependent on PQUANT. Restrict testing for CONDOVER and OVERFLAGS to advanced profile. Change from mb_width to end_mb_x in ff_vc1_i_loop_filter to avoid breaking the Microsoft Screen 2 decoder. Signed-off-by: Jerome Borsboom --- The v2 patches should resolve the issue with fate-mss2-wmv. libavcodec/vc1_loopfilter.c | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/libavcodec/vc1_loopfilter.c b/libavcodec/vc1_loopfilter.c index aceb1f77ff..cea7dae7f8 100644 --- a/libavcodec/vc1_loopfilter.c +++ b/libavcodec/vc1_loopfilter.c @@ -108,8 +108,10 @@ void ff_vc1_i_overlap_filter(VC1Context *v) if (s->mb_x == 0 && (i & 5) != 1) continue; - if (v->pq >= 9 || v->condover == CONDOVER_ALL || - (v->over_flags_plane[mb_pos] && ((i & 5) == 1 || v->over_flags_plane[mb_pos - 1]))) + if (v->pq >= 9 || (v->profile == PROFILE_ADVANCED && + (v->condover == CONDOVER_ALL || + (v->over_flags_plane[mb_pos] && + ((i & 5) == 1 || v->over_flags_plane[mb_pos - 1]))))) vc1_h_overlap_filter(v, s->mb_x ? left_blk : cur_blk, cur_blk, i); } @@ -118,15 +120,18 @@ void ff_vc1_i_overlap_filter(VC1Context *v) if (s->first_slice_line && !(i & 2)) continue; - if (s->mb_x && (v->pq >= 9 || v->condover == CONDOVER_ALL || - (v->over_flags_plane[mb_pos - 1] && - ((i & 2) || v->over_flags_plane[mb_pos - 1 - s->mb_stride])))) + if (s->mb_x && + (v->pq >= 9 || (v->profile == PROFILE_ADVANCED && + (v->condover == CONDOVER_ALL || + (v->over_flags_plane[mb_pos - 1] && + ((i & 2) || v->over_flags_plane[mb_pos - 1 - s->mb_stride])))))) vc1_v_overlap_filter(v, s->first_slice_line ? left_blk : topleft_blk, left_blk, i); - if (s->mb_x == s->mb_width - 1) - if (v->pq >= 9 || v->condover == CONDOVER_ALL || - (v->over_flags_plane[mb_pos] && - ((i & 2) || v->over_flags_plane[mb_pos - s->mb_stride]))) - vc1_v_overlap_filter(v, s->first_slice_line ? cur_blk : top_blk, cur_blk, i); + if (s->mb_x == s->mb_width - 1 && + (v->pq >= 9 || (v->profile == PROFILE_ADVANCED && + (v->condover == CONDOVER_ALL || + (v->over_flags_plane[mb_pos] && + ((i & 2) || v->over_flags_plane[mb_pos - s->mb_stride])))))) + vc1_v_overlap_filter(v, s->first_slice_line ? cur_blk : top_blk, cur_blk, i); } } @@ -260,7 +265,7 @@ void ff_vc1_i_loop_filter(VC1Context *v) for (i = 0; i < block_count; i++) vc1_i_v_loop_filter(v, i > 3 ? s->dest[i - 3] - 8 * s->uvlinesize - 8 : dest, flags, fieldtx, i); } - if (s->mb_x == s->mb_width - 1) { + if (s->mb_x == v->end_mb_x - 1) { dest += 16; fieldtx = v->fieldtx_plane[mb_pos - s->mb_stride]; for (i = 0; i < block_count; i++) @@ -275,7 +280,7 @@ void ff_vc1_i_loop_filter(VC1Context *v) for (i = 0; i < block_count; i++) vc1_i_v_loop_filter(v, i > 3 ? s->dest[i - 3] - 8 : dest, flags, fieldtx, i); } - if (s->mb_x == s->mb_width - 1) { + if (s->mb_x == v->end_mb_x - 1) { dest += 16; fieldtx = v->fieldtx_plane[mb_pos]; for (i = 0; i < block_count; i++) @@ -290,7 +295,7 @@ void ff_vc1_i_loop_filter(VC1Context *v) for (i = 0; i < block_count; i++) vc1_i_h_loop_filter(v, i > 3 ? s->dest[i - 3] - 16 * s->uvlinesize - 8 : dest, flags, i); } - if (s->mb_x == s->mb_width - 1) { + if (s->mb_x == v->end_mb_x - 1) { dest += 16; flags = s->mb_x == 0 ? LEFT_EDGE | RIGHT_EDGE : RIGHT_EDGE; for (i = 0; i < block_count; i++) @@ -305,7 +310,7 @@ void ff_vc1_i_loop_filter(VC1Context *v) for (i = 0; i < block_count; i++) vc1_i_h_loop_filter(v, i > 3 ? s->dest[i - 3] - 8 * s->uvlinesize - 8 : dest, flags, i); } - if (s->mb_x == s->mb_width - 1) { + if (s->mb_x == v->end_mb_x - 1) { flags = s->mb_x == 0 ? LEFT_EDGE | RIGHT_EDGE : RIGHT_EDGE; dest += 16; for (i = 0; i < block_count; i++) @@ -318,7 +323,7 @@ void ff_vc1_i_loop_filter(VC1Context *v) for (i = 0; i < block_count; i++) vc1_i_h_loop_filter(v, i > 3 ? s->dest[i - 3] - 8 : dest, flags, i); } - if (s->mb_x == s->mb_width - 1) { + if (s->mb_x == v->end_mb_x - 1) { dest += 16; flags = s->mb_x == 0 ? LEFT_EDGE | RIGHT_EDGE : RIGHT_EDGE; for (i = 0; i < block_count; i++)