From patchwork Sat May 11 20:51:06 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 48768 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:1706:b0:1af:cdee:28c5 with SMTP id nv6csp299226pzb; Sat, 11 May 2024 13:57:57 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCU2HrGenvh0yQ3xa+nJk3aGnf8bcF4Z6CGFd+15eJrieYu81uGJk/aYOKzqqHb6Zsx2RBgNnSTG4kB2nre6veIBYf8j5Ja2IwADUw== X-Google-Smtp-Source: AGHT+IHoDHpWzEmFKVQ91FLlW4l42weQtf8YNy3lw88smQ6D3hw+vyD9dYGIN6zE7WEnbWqQ2yy1 X-Received: by 2002:a50:d74e:0:b0:56e:2b31:b111 with SMTP id 4fb4d7f45d1cf-5734d5be7camr3529369a12.7.1715461077229; Sat, 11 May 2024 13:57:57 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 4fb4d7f45d1cf-5733beac952si3286733a12.94.2024.05.11.13.57.56; Sat, 11 May 2024 13:57:57 -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=@outlook.com header.s=selector1 header.b=aU+WJ6kV; arc=fail (body hash mismatch); 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0C34268D782; Sat, 11 May 2024 23:54:46 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04olkn2038.outbound.protection.outlook.com [40.92.74.38]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EA9CF68D67A for ; Sat, 11 May 2024 23:54:41 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cpecaYRQ8GbCWqsQQddVrmM+oBJVAMsWj0APKGQhJCoFV39aR4YiRFXr8o8i3Rw0A+BgumYK5zUmTE8Hb0G0Rw37vzcnoZ8eGEaXuE6zlWk01yHyfshEx+ikwWFm9y/mJN5A0l94u1b9qHiGb9ZuWPXhPz6VdUsdb9bSF3eTJfFAgKstHhbJFvmRWu1G8HsM9EU2WBW0jaLTKRYdMVJlVKLcKqTD4gnO+dImVR3e8NzpUquhsGzHZdCVE80aFeGn3OVQTFIaVCIk0TEemSk7siAjR6b0Ay9va4i5ktA6uD7oGjMKRjM/4+IQq72ZO6W5TO71tMxmmi+1v0MvT3iXRA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=TQIxRHDl9dvJVsKdErP0JcBFI/KMz/n5BYpAWHqH498=; b=Xf3wm7a/3DRRyPmxDfSHPHZ0d1jhcRarAX1GWiPLUFqO0nvkKF2oZd6i/7pFRrgDB6DEnjImYUaIcELVhoFGs7k5jOgeW00GDNAo4AHe08TOi4KT9eN1Hbw1FZV5jVABMs+cpxBf7SMonHIXlxkuUbp9g/7/JGFd8zjyz+7szZUfThlRBVzeM08nFdyZcA/78GvKfpYv0QD3CJmTE+O70uBctzjR8wXy8AOEl/Iy34Hwh61JiNd0hfeBJioarVwM77dhRRHHkNbcyswtGjDXRn2TnRVP1RnrFkyGOiu2+MgFlEepO3fdkugzvX9ZcE7Ac6Oc3ZF33qDXmsRyhLvBiw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TQIxRHDl9dvJVsKdErP0JcBFI/KMz/n5BYpAWHqH498=; b=aU+WJ6kVXnqOvrJOuqnk1ZuT9b9RzHkIzpnHH55uN7f793AHso3XGQ5N604CKtbTzCtXOtCKwrp4TQCCrihJnPjeeSX0P7Gpzn0JAQWngvsnwYM8jNHTIpuzskPONUNdvGS41ZGYtNaoPKyKe63vx5P59unYCupSHsGVnD2W8c0hmChIZsYlkyh0lgcvgn2lcWVgslhlyWqBv6YXJ5F0kW0v6FFdTL5cQwrRjPjBAkDxP3A0/rvXNqTBvsa6hSkb3HW496iEHRlSFLC8JTjteytB5CIsqJTusfofD4BYBXwO3VB9VxFyLjRzBeP1EaDZGidYvPSALCBjy1QN0TQYDg== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by DB9P250MB0403.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:327::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.54; Sat, 11 May 2024 20:54:37 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::d6a1:e3af:a5f1:b614]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::d6a1:e3af:a5f1:b614%7]) with mapi id 15.20.7544.052; Sat, 11 May 2024 20:54:37 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sat, 11 May 2024 22:51:06 +0200 Message-ID: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: X-TMN: [8fW7YQvTorirAKUbVqra2pcI5Jz3hWR19soRlaNiJAY=] X-ClientProxiedBy: ZR0P278CA0172.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:45::6) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <20240511205135.2411886-41-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|DB9P250MB0403:EE_ X-MS-Office365-Filtering-Correlation-Id: 440791cd-b1e0-46f7-5f79-08dc71fc91cc X-Microsoft-Antispam: BCL:0; ARA:14566002|461199019|440099019|3412199016|1710799017; X-Microsoft-Antispam-Message-Info: y/x7rJ7u7Mf5UC/d5A/zV48qbxeK4Va2R8MuwfBEMgfcC+1Y58InoEJGqLeIiuHb7JnoRgQNTGgoH29RtaAFCK05sGuD79AiFEtTpLzegVNWi9hDw6Lqob2XMBcj30NirhD+ddS9Vn4RSjJ1E7MwO8vWGb7XQdi6nXCGAlzqdnMmENj9ZdXDPPDv/cmvLcuStKKzsGXwNCoHazpHEWNS3xya4II9jgdmfuOUzv5gaSlwdliX08hG0U1A3SKW7R8nhFu+fo18VJARcKVFMcz2HZM2cRNO2gXX1h/5Z5KhUAd7OLBosPpueJ598+wrHH6xy3y6wEZfhxRFV/Xz/+ev4WDw5IgiTyQIL4TLIuDww5WK+EktvcuVWtG3OVlnshLvqySF6+Xf2RTc16cfqyh+Ed6olyIbEtLDjXsQ4+xg4fxAtUbQ3E9xo8rgudGLhsqTvVFBukopWugdy9a7102v7JLkrchXKqtUvaAbxtJHsWeCrsFkc+WsIaowYWTfO4v7rjqf+1HG0wGQiIiosp6BfvBXzKTqCnlnlkIKmedkGx0BPJaCLiFR8V3YcV53O0aUaRLQFnDSBE8x0rL5eW0fL2+HLxzLlPBUC1VH6WjhcQPzlu4pncPl78AeokA/1JT9 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 6TVfviiSTqWt8v60dA7kUZ2fX2daFIwqjtHiqcc5BrEoVSsKOsBnU5kXLRPbf4gCAr9Z9qcqiSCDlPsIN6we8GNXlTSq0b676pXG8iJwr8wT9Ck9+rAShtmGgCo5Dze5j0vHtIc6iP1PNwSQuAEyyCwKL/W+RmNwpzHWmuhnuQ5M2+BvcR2ndvxgkomynMTEK3IHOwRrnbnespsRu/+9zjaduzdM3vZETBezSEYidNMXkOKoyHaKiYbiQs6UvjfbunR/4uJyzqxhtJoIHC0GyL04G9S561U8hoTj1xIgeFzIYJBwWBNUAJqR/Outvbn9t5hacHhBbV0w9zC2M76lTMXvcZTkJTyEcuI9mfpZjmoQV9ADziEX7BAp4RkWjmb2ufLhALTbC7SJARyPvg+LMZdBdpbOou455U6Zuwy43CNQ/oy6eVGhdv9X+czeO5zq85FofQ3UGVM9iI8aAOaCRmYUtZq0DbY6gj/1CnHVA+CSS1q6JIc+Oq0X5+j+WTPmo4OKXzKGdzgV8NQ9FIV/5Jbor6xxr0+1PvHJIze6JGaX0Tu64FR01tI5FmttWBFJ5iojzEAG2kV5wRSKbbWxG+D3Lkd0w4bN30KlUjQ9g0gISMmWiDz35dBBSEPPnnayf3GzRvfL/1Y5qNiZtr2pBSsgBBe5yGwD0A3fEH4ptZ7TdF8R0mjeIxOinCtgsuTot+6rfwxdrROt8VY4z256J2snO/j0bQ9A3iahLOIqPQSeooFO003mqRWehrX3WOR58IZlJmTiGbMYMxJYurrnOUJ8SQ2ubqkxcagPDu9BhznWqGjztnznHR89XuJwtECuesmvdNt3f0imhZ8GFA2EKL6/6fwzVBwflJ6jW0PZnJMXybYA9UO5q34Bzhbvm6AT6gEW2G15/pscoV4XlCjuMEo1YWQqzYezDuPezNR6khIob/XVH6G+ewj2Td1VIUmzXkG+fdQKXRWXLh3h4C4a6g+V5kH+2iLktdkbTsL1oHHVXDJRaJ6vmJzxmOxbqGDWa8knFxaGdrl4bVu4UGY+qArchjFK/v89q6J3zVFnphBpEbTpATXMqKF94OokPvRDzTibxXQJEYOE86uJKWNm/jv66TS28L304ADDPgQdK3Ep6E0mCaX/UvpI7QhMtrM19f0LoghxRNpIAFJ6SrI+7vFhu8QLRYqDnoG+OmkDUiXxU4hqLhC11shZlnWr1Oo7v7bywUlZ6M0lCwP+OeOFVrVXmI6WGTcIUHkhsNA6n15ufDYgns3FUef33DRaqKVklDpGpGSLLjmtF/2ohIwHxg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 440791cd-b1e0-46f7-5f79-08dc71fc91cc X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2024 20:54:37.4365 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9P250MB0403 Subject: [FFmpeg-devel] [PATCH v2 42/71] avcodec/vc1_mc: Don't check AVFrame INTERLACE flags X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 6KpAr05S4V/6 Instead cache these values in VC1Context to avoid the indirection and AND. Signed-off-by: Andreas Rheinhardt --- libavcodec/vc1.h | 1 + libavcodec/vc1_mc.c | 20 +++++++++----------- libavcodec/vc1dec.c | 2 ++ 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/libavcodec/vc1.h b/libavcodec/vc1.h index 0e01458c89..185236662f 100644 --- a/libavcodec/vc1.h +++ b/libavcodec/vc1.h @@ -293,6 +293,7 @@ typedef struct VC1Context{ uint8_t next_luty[2][256], next_lutuv[2][256]; ///< lookup tables used for intensity compensation uint8_t (*curr_luty)[256] ,(*curr_lutuv)[256]; int last_use_ic, *curr_use_ic, next_use_ic, aux_use_ic; + int last_interlaced, next_interlaced; ///< whether last_pic, next_pic is interlaced int rnd; ///< rounding control int cbptab; diff --git a/libavcodec/vc1_mc.c b/libavcodec/vc1_mc.c index 90ff1eee58..fad9a4c370 100644 --- a/libavcodec/vc1_mc.c +++ b/libavcodec/vc1_mc.c @@ -233,7 +233,7 @@ void ff_vc1_mc_1mv(VC1Context *v, int dir) luty = v->last_luty; lutuv = v->last_lutuv; use_ic = v->last_use_ic; - interlace = !!(s->last_pic.f->flags & AV_FRAME_FLAG_INTERLACED); + interlace = v->last_interlaced; } } else { srcY = s->next_pic.data[0]; @@ -242,7 +242,7 @@ void ff_vc1_mc_1mv(VC1Context *v, int dir) luty = v->next_luty; lutuv = v->next_lutuv; use_ic = v->next_use_ic; - interlace = !!(s->next_pic.f->flags & AV_FRAME_FLAG_INTERLACED); + interlace = v->next_interlaced; } if (!srcY || !srcU) { @@ -482,13 +482,13 @@ void ff_vc1_mc_4mv_luma(VC1Context *v, int n, int dir, int avg) srcY = s->last_pic.data[0]; luty = v->last_luty; use_ic = v->last_use_ic; - interlace = !!(s->last_pic.f->flags & AV_FRAME_FLAG_INTERLACED); + interlace = v->last_interlaced; } } else { srcY = s->next_pic.data[0]; luty = v->next_luty; use_ic = v->next_use_ic; - interlace = !!(s->next_pic.f->flags & AV_FRAME_FLAG_INTERLACED); + interlace = v->next_interlaced; } if (!srcY) { @@ -708,14 +708,14 @@ void ff_vc1_mc_4mv_chroma(VC1Context *v, int dir) srcV = s->last_pic.data[2]; lutuv = v->last_lutuv; use_ic = v->last_use_ic; - interlace = !!(s->last_pic.f->flags & AV_FRAME_FLAG_INTERLACED); + interlace = v->last_interlaced; } } else { srcU = s->next_pic.data[1]; srcV = s->next_pic.data[2]; lutuv = v->next_lutuv; use_ic = v->next_use_ic; - interlace = !!(s->next_pic.f->flags & AV_FRAME_FLAG_INTERLACED); + interlace = v->next_interlaced; } if (!srcU) { @@ -884,13 +884,13 @@ void ff_vc1_mc_4mv_chroma4(VC1Context *v, int dir, int dir2, int avg) srcV = s->next_pic.data[2]; lutuv = v->next_lutuv; use_ic = v->next_use_ic; - interlace = !!(s->next_pic.f->flags & AV_FRAME_FLAG_INTERLACED); + interlace = v->next_interlaced; } else { srcU = s->last_pic.data[1]; srcV = s->last_pic.data[2]; lutuv = v->last_lutuv; use_ic = v->last_use_ic; - interlace = !!(s->last_pic.f->flags & AV_FRAME_FLAG_INTERLACED); + interlace = v->last_interlaced; } if (!srcU) return; @@ -1009,7 +1009,7 @@ void ff_vc1_interp_mc(VC1Context *v) int dxy, mx, my, uvmx, uvmy, src_x, src_y, uvsrc_x, uvsrc_y; int v_edge_pos = s->v_edge_pos >> v->field_mode; int use_ic = v->next_use_ic; - int interlace; + int interlace = v->next_interlaced; int linesize, uvlinesize; if (!v->field_mode && !v->s.next_pic.data[0]) @@ -1034,8 +1034,6 @@ void ff_vc1_interp_mc(VC1Context *v) srcU = s->next_pic.data[1]; srcV = s->next_pic.data[2]; - interlace = !!(s->next_pic.f->flags & AV_FRAME_FLAG_INTERLACED); - src_x = s->mb_x * 16 + (mx >> 2); src_y = s->mb_y * 16 + (my >> 2); uvsrc_x = s->mb_x * 8 + (uvmx >> 2); diff --git a/libavcodec/vc1dec.c b/libavcodec/vc1dec.c index 71fda305da..36a47502f5 100644 --- a/libavcodec/vc1dec.c +++ b/libavcodec/vc1dec.c @@ -1064,6 +1064,8 @@ static int vc1_decode_frame(AVCodecContext *avctx, AVFrame *pict, v->s.cur_pic_ptr->field_picture = v->field_mode; v->s.cur_pic_ptr->f->flags |= AV_FRAME_FLAG_INTERLACED * (v->fcm != PROGRESSIVE); v->s.cur_pic_ptr->f->flags |= AV_FRAME_FLAG_TOP_FIELD_FIRST * !!v->tff; + v->last_interlaced = v->s.last_pic_ptr ? v->s.last_pic_ptr->f->flags & AV_FRAME_FLAG_INTERLACED : 0; + v->next_interlaced = v->s.next_pic_ptr ? v->s.next_pic_ptr->f->flags & AV_FRAME_FLAG_INTERLACED : 0; // process pulldown flags s->cur_pic_ptr->f->repeat_pict = 0;