From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 6295D4A1DF for ; Thu, 23 May 2024 12:36:11 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7515268D38F; Thu, 23 May 2024 15:36:09 +0300 (EEST) Received: from EUR02-AM0-obe.outbound.protection.outlook.com (mail-am0eur02olkn2054.outbound.protection.outlook.com [40.92.49.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CE90168D1C4 for ; Thu, 23 May 2024 15:36:02 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=awlXC+7/z/HeOx2dD3oF8EIKqBkzPUElY/Nha5sUZTilTUeacvod3PwFMUm3VJWEJCC6EPHLMecFxFuH4FSLUWBnhefBJd19J8dVV9nMxmFndejjBoimuUT6+L8171n38v4GRPyiLFtnsealEs920CQ4i7k3g3yX1h9WG+rlE4iB+oMPy4deQtDnMJ6x/Xbu+eRZtTN09g8NRIf2mB8CGG3Zu+8xRvqwicsIzUKstbP0xJ2K56xlV44uDFj5wb9Vl0p9uxSIYx/B+mPmq6NHQQcZSsLW15K3rtJa2fOSLXWcW0Owusqf9p1LxII/lAfYlhYzknZ0+PsEqtbOIfe2Nw== 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=5E5trBLS7G9YKB1TRCyNXjpfRcL1TY0Wp3UfglP/TdA=; b=HyLFm062LZRW3J/P00u4cEz2kW51VJ81JLoqgKj3LUHWKa/2wY/hJ/38B4ACR3lm1dDMyNo2trNieNg93mF5LBjIv7DrckVGwG+XRHnh95/JgbbS2faCCbswS7WcAqCMHcnvgoZB05WSg9nhBtyaxspoO/EVCWrWNmgSIN1zGxS3nNm35Fi8iR5UEHr+zub6QKWdw3QJEfPYPDRVGEANkMAwoQJ25kTZC8OB+c6JjF8t7X8NsILYEKV18Q0rOBm93/0kbKZNdvCQYlg1RoKw4LUVpT4/R/ipuJK7h8z/isbjahwSnkPY0GTHAranNB+ceznfihUPPIsptA7ZIQD42g== 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=5E5trBLS7G9YKB1TRCyNXjpfRcL1TY0Wp3UfglP/TdA=; b=jlZz/InxoI9msAMwcUFVRN282RhIG1yhKSIredN9NDMP+Z7b2oQiFHLpO/iN+c4B2Ro70kCOOR9q6Lo4O3j8Qd7bmUN4Da1sLxiovUwpn1ohe+NX6g0WyJOmN4Up1VTh13ucCTDN1HiTTzJvRkAgUP4L8APwqEeVsM4hTr36t4IAaqLm7D9JGETAg1bn39Mcna+ZKWQ5C6G2Nv7tqOLc69XL6H5gyMFewQiWR8OLY7F8q5dmmNQU1d+9aAoEi4SN0+XxvWBtKiudWf4Gx+axm13vkrFX3rRe6D6T0qDoqTfgBK2ekohNgZz1da+vFGylNIqcCPZq1jxey6q0A1qCLQ== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by DU0P250MB0578.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:34e::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7587.36; Thu, 23 May 2024 12:35:57 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::d6a1:e3af:a5f1:b614]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::d6a1:e3af:a5f1:b614%3]) with mapi id 15.20.7587.030; Thu, 23 May 2024 12:35:57 +0000 Message-ID: Date: Thu, 23 May 2024 14:35:55 +0200 User-Agent: Mozilla Thunderbird To: ffmpeg-devel@ffmpeg.org References: <20240523122716.2158-1-jamrial@gmail.com> Content-Language: en-US From: Andreas Rheinhardt In-Reply-To: <20240523122716.2158-1-jamrial@gmail.com> X-TMN: [kvuEsIsXVIz+WIc+kud8C3oL3d3t+HnDfTFbr2C0LYs=] X-ClientProxiedBy: ZR0P278CA0203.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:6a::28) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|DU0P250MB0578:EE_ X-MS-Office365-Filtering-Correlation-Id: bda77904-0ee1-44d9-2b55-08dc7b24e4f4 X-Microsoft-Antispam: BCL:0;ARA:14566002|461199019|440099019|3412199016; X-Microsoft-Antispam-Message-Info: DRknzRvDnOWT21e3xxY+YT7gj2f0mH0vJ2L2dDrvFP0PnzY4TtGwGRJD2WLweZbN72BUr0gO31j4+GfOzPX3YzxELn3TtBvCAIwe+iYFeLYaZl5RE5BR86fL+k8QajjB8OTRcRMUiW2ewgfQV1JnXt9kaLl6A0YRDLqGgOXXL7DEd4oyvOsDbhML9RVrPO4SRjmzq7I3/iLz216ptRcQrfNvCXNlDN+bQ9w4pT/dFg6qNlz3hQWvjp1f5UOHAvy1IGXjrcQqWnmBjcVhlosjKWXZ0/XUDHefqaSLZqQK2PCjZcptgYj3dHISsFpGO9DHXcK0M0f5C1OYf199HDGyfx5lCYiRT47hsSXhzETZlk7w+qgXiG4KRMoFiYbEmoTh9J5emQW36PNb/ujM1QN1ZPv2abXVTXf4sl3m7mz0lncYfJafGEAEiBewAWjq5Nl+wQQ8t8iEP12B5Resg/UAqmBow08RVNt87p0G1LQX1i/ZYLOd39OoQ5/HvKLZ5NKi5Uj5ITj7CIXvD4TbhThkU7M06gGRI4SJnhgOjskmkQUkj2m1eKQBSOxf/wQRhAN4 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ajRkTzRWbG5mZXEyN0pGTTRmZ2lmbzJXT0tYa3NqQk5BUDN5RjFXYk1LWW1Y?= =?utf-8?B?Smo3RmE2L0Q2L1k5MGZscHJBQjZ5bjM3c29lUllqY0dVTythV25UWGF6RTNO?= =?utf-8?B?SXdNZ1dhalRBbnNyVEZOZG1YdzZHY1k2UGwyakhJRSs0ZitNYlpjWDZrd1ZD?= =?utf-8?B?R0EraGxyQkJQNnZmNmUyYlFNZEZ1QkkrR1NyQmxuajBOUCsrWUJKZmZseUR2?= =?utf-8?B?alYxYTlML1lHZTd5T01heTF0VjIrNnZkdTBKWGI5bThweFVLeXVNSklGZzlr?= =?utf-8?B?aFV5US81blJXbGZ1Sk9EWGJrWkJNNnZCekJwaHVsQmpReG9EQjJ0cE1XNi9q?= =?utf-8?B?b1VQQVB3TnBPUHdiSG5QSUo0MGxHUVVGL2hYMDg1YUhuQnlOWVpEaEN4ZHRk?= =?utf-8?B?M0lVMjhXeVlEV0Y1cE5jRjg1VEJFN1QwclZiTkZwN0lmTlpjZWYxcTY4Y1No?= =?utf-8?B?bG1NTUFPR2pLZm1TMXBRUkFSNWpGTXZCU1dFK0VxbyszZkVNY0VkVmZXUFpS?= =?utf-8?B?R244M054aG1zVEh0RTN3NDdBUzV3REZSVjNUTytWSUUxYkZTbTRqQlozNDlz?= =?utf-8?B?ZGRSTi84Q1dNOEw3TEk1d1hMTlhtZUFSY3pXc0RuaWF0WXZLaGZqZHhCdXU1?= =?utf-8?B?akxacUc3UXE3OVV2K1ZNd0ZWUnJ0SmVYenlVWHovNXZHSjk1Vlduc0FXazk4?= =?utf-8?B?ZFlFSVQ0TnBzbDFXQ3JiYS8wcW0rYnN1d1hweE5ERnl5ZnVtaU0vKzNqZEpO?= =?utf-8?B?cDFVTWVxWXgweDFVY0pxcCtVR2xaK1lBNmY4YjZxR1YvamVjaVVSVm0rRmsv?= =?utf-8?B?dTdCQW5NM0pSVEhKSlBISmhSckdqSHg3cVRRYTVyQWZIRHdoWVA2OXUxNElZ?= =?utf-8?B?RzdVMlhEVUFJcXZsYitXV243MzdDeHFraVJVSFVic0N3NTNoVXhoak5NditS?= =?utf-8?B?VWNBdFBXY1grbk1PMkxDWWxTK3lQT0ZSdmpIMStBU1cyd1ZWR0szTzBLQWxr?= =?utf-8?B?Q3lYaEM4eXFVWHlHRmlES2UzOGl6WjNDUHg1WHZlMEZOclhiYmcvdUZ0b2k4?= =?utf-8?B?TVdoTjBTUG5lUnp3aVg1VjVJWjF5RDkvdG1WNlYwMWtoeVNFRGppMTVTei81?= =?utf-8?B?R0JMRFd0dVlPRWQvTVFXd082Q2RFL2RVZFo1Q2xIaHB5bkE3ZHhDdW56UHFS?= =?utf-8?B?bVp4MzhTTG1KczRLT2loWWYrK3BVMWttWGI3ek5jU1BJMTdZZkZXbHRpOWh3?= =?utf-8?B?Y2o5OHlOMjVrdis1Si9jeUpYMHNMYTZSNkFYemtmaXBkNzFsc3dGcUJYYlRp?= =?utf-8?B?UWRya09jNkxuR0huTW1YVVZBTzdXMmV6R3Y1VGhKd3dpVHhrK0E0Qk9XdFJB?= =?utf-8?B?czBlS1cxSmtuSzB0b2VHOUFMdk8yOEwxbDRlRHYwOFd0aU03ai84OVQvUm85?= =?utf-8?B?aXoxRFpaTGYvekdIYW9rdDFiK09DRFdxSUtTN1RHV3lLVTlpeTcrRHRtWEFw?= =?utf-8?B?bUJwaTNTSktENW9QY3ltNWhlenlac2xlbSt2TThXTERPaWphdnpUaXdNTEJN?= =?utf-8?B?TXBIcmdsME5UdE1CblpuWnBRYzMzaEhZRDBNMzRMLzVBMkZYbWhjY3QwTHFV?= =?utf-8?B?T1lkWGJNOTJjcVhsM1dWUVhSS0Q1eWpETmNWR0dpUXkvNkFkRW1vQTNXNlJH?= =?utf-8?B?L2dFdVFHdE9YZEIwOHJpTTVYakNvdmxieUUyZkVYNFlobEJZNTMzYWVBPT0=?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: bda77904-0ee1-44d9-2b55-08dc7b24e4f4 X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 May 2024 12:35:57.3858 (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: DU0P250MB0578 Subject: Re: [FFmpeg-devel] [PATCH 1/5] avcodec/vvc_mc: split the SAD dsp prototype into one function per blocksize width 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: James Almer: > Signed-off-by: James Almer > --- The commit message should explain what the advantage of this is. Particularly, what is the advantage of this over jumping in the function to based upon blocksize vs. selecting an appropriate function in the generic code (even when these functions turn out all the same as is for the C version). > libavcodec/vvc/dsp.h | 2 +- > libavcodec/vvc/inter.c | 6 ++++-- > libavcodec/vvc/inter_template.c | 6 +++++- > libavcodec/x86/vvc/vvc_sad.asm | 32 ++++++++++++++++++++++++++------ > libavcodec/x86/vvc/vvcdsp_init.c | 22 +++++++++++++++++----- > tests/checkasm/vvc_mc.c | 3 ++- > 6 files changed, 55 insertions(+), 16 deletions(-) > > diff --git a/libavcodec/vvc/dsp.h b/libavcodec/vvc/dsp.h > index 1f14096c41..55c4c81f53 100644 > --- a/libavcodec/vvc/dsp.h > +++ b/libavcodec/vvc/dsp.h > @@ -99,7 +99,7 @@ typedef struct VVCInterDSPContext { > > void (*apply_bdof)(uint8_t *dst, ptrdiff_t dst_stride, int16_t *src0, int16_t *src1, int block_w, int block_h); > > - int (*sad)(const int16_t *src0, const int16_t *src1, int dx, int dy, int block_w, int block_h); > + int (*sad[5])(const int16_t *src0, const int16_t *src1, int dx, int dy, int block_w, int block_h); > void (*dmvr[2][2])(int16_t *dst, const uint8_t *src, ptrdiff_t src_stride, int height, > intptr_t mx, intptr_t my, int width); > } VVCInterDSPContext; > diff --git a/libavcodec/vvc/inter.c b/libavcodec/vvc/inter.c > index e1011b4fa1..0214e46634 100644 > --- a/libavcodec/vvc/inter.c > +++ b/libavcodec/vvc/inter.c > @@ -740,6 +740,8 @@ static void dmvr_mv_refine(VVCLocalContext *lc, MvField *mvf, MvField *orig_mv, > const AVFrame *ref0, const AVFrame *ref1, const int x_off, const int y_off, const int block_w, const int block_h) > { > const VVCFrameContext *fc = lc->fc; > + static const uint8_t sad_tab[16] = { 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4 }; > + const int tab = sad_tab[(FFALIGN(block_w, 8) >> 3) - 1]; > const int sr_range = 2; > const AVFrame *ref[] = { ref0, ref1 }; > int16_t *tmp[] = { lc->tmp, lc->tmp1 }; > @@ -763,7 +765,7 @@ static void dmvr_mv_refine(VVCLocalContext *lc, MvField *mvf, MvField *orig_mv, > fc->vvcdsp.inter.dmvr[!!my][!!mx](tmp[i], src, src_stride, pred_h, mx, my, pred_w); > } > > - min_sad = fc->vvcdsp.inter.sad(tmp[L0], tmp[L1], dx, dy, block_w, block_h); > + min_sad = fc->vvcdsp.inter.sad[tab](tmp[L0], tmp[L1], dx, dy, block_w, block_h); > min_sad -= min_sad >> 2; > sad[dy][dx] = min_sad; > > @@ -773,7 +775,7 @@ static void dmvr_mv_refine(VVCLocalContext *lc, MvField *mvf, MvField *orig_mv, > for (dy = 0; dy < SAD_ARRAY_SIZE; dy++) { > for (dx = 0; dx < SAD_ARRAY_SIZE; dx++) { > if (dx != sr_range || dy != sr_range) { > - sad[dy][dx] = fc->vvcdsp.inter.sad(lc->tmp, lc->tmp1, dx, dy, block_w, block_h); > + sad[dy][dx] = fc->vvcdsp.inter.sad[tab](lc->tmp, lc->tmp1, dx, dy, block_w, block_h); > if (sad[dy][dx] < min_sad) { > min_sad = sad[dy][dx]; > min_dx = dx; > diff --git a/libavcodec/vvc/inter_template.c b/libavcodec/vvc/inter_template.c > index a8068f4ba8..34485321d3 100644 > --- a/libavcodec/vvc/inter_template.c > +++ b/libavcodec/vvc/inter_template.c > @@ -626,7 +626,11 @@ static void FUNC(ff_vvc_inter_dsp_init)(VVCInterDSPContext *const inter) > inter->apply_prof_uni_w = FUNC(apply_prof_uni_w); > inter->apply_bdof = FUNC(apply_bdof); > inter->prof_grad_filter = FUNC(prof_grad_filter); > - inter->sad = vvc_sad; > + inter->sad[0] = > + inter->sad[1] = > + inter->sad[2] = > + inter->sad[3] = > + inter->sad[4] = vvc_sad; > } > > #undef FUNCS > diff --git a/libavcodec/x86/vvc/vvc_sad.asm b/libavcodec/x86/vvc/vvc_sad.asm > index b468d89ac2..a20818530f 100644 > --- a/libavcodec/x86/vvc/vvc_sad.asm > +++ b/libavcodec/x86/vvc/vvc_sad.asm > @@ -51,7 +51,7 @@ SECTION .text > > INIT_YMM avx2 > > -cglobal vvc_sad, 6, 9, 5, src1, src2, dx, dy, block_w, block_h, off1, off2, row_idx > +cglobal vvc_sad_8, 6, 9, 5, src1, src2, dx, dy, block_w, block_h, off1, off2, row_idx > movsxdifnidn dxq, dxd > movsxdifnidn dyq, dyd > > @@ -76,10 +76,6 @@ cglobal vvc_sad, 6, 9, 5, src1, src2, dx, dy, block_w, block_h, off1, off2, row_ > pxor m3, m3 > vpbroadcastd m4, [pw_1] > > - cmp block_wd, 16 > - jge vvc_sad_16_128 > - > - vvc_sad_8: > .loop_height: > movu xm0, [src1q] > vinserti128 m0, m0, [src1q + MAX_PB_SIZE * ROWS * 2], 1 > @@ -100,7 +96,31 @@ cglobal vvc_sad, 6, 9, 5, src1, src2, dx, dy, block_w, block_h, off1, off2, row_ > movd eax, xm0 > RET > > - vvc_sad_16_128: > +cglobal vvc_sad_16, 6, 9, 5, src1, src2, dx, dy, block_w, block_h, off1, off2, row_idx > + movsxdifnidn dxq, dxd > + movsxdifnidn dyq, dyd > + > + sub dxq, 2 > + sub dyq, 2 > + > + mov off1q, 2 > + mov off2q, 2 > + > + add off1q, dyq > + sub off2q, dyq > + > + shl off1q, 7 > + shl off2q, 7 > + > + add off1q, dxq > + sub off2q, dxq > + > + lea src1q, [src1q + off1q * 2 + 2 * 2] > + lea src2q, [src2q + off2q * 2 + 2 * 2] > + > + pxor m3, m3 > + vpbroadcastd m4, [pw_1] > + > sar block_wd, 4 > .loop_height: > mov off1q, src1q > diff --git a/libavcodec/x86/vvc/vvcdsp_init.c b/libavcodec/x86/vvc/vvcdsp_init.c > index 4b4a2aa937..bd60963432 100644 > --- a/libavcodec/x86/vvc/vvcdsp_init.c > +++ b/libavcodec/x86/vvc/vvcdsp_init.c > @@ -312,8 +312,20 @@ ALF_FUNCS(16, 12, avx2) > c->alf.classify = ff_vvc_alf_classify_##bd##_avx2; \ > } while (0) > > -int ff_vvc_sad_avx2(const int16_t *src0, const int16_t *src1, int dx, int dy, int block_w, int block_h); > -#define SAD_INIT() c->inter.sad = ff_vvc_sad_avx2 > +#define SAD_PROTOTYPE(w, opt) \ > +int bf(ff_vvc_sad, w, opt)(const int16_t *src0, const int16_t *src1, \ > + int dx, int dy, int block_w, int block_h) \ > + > +SAD_PROTOTYPE(8, avx2); > +SAD_PROTOTYPE(16, avx2); > + > +#define SAD_INIT(opt) do { \ > + c->inter.sad[0] = ff_vvc_sad_8_##opt; \ > + c->inter.sad[1] = \ > + c->inter.sad[2] = \ > + c->inter.sad[3] = \ > + c->inter.sad[4] = ff_vvc_sad_16_##opt; \ > +} while (0) > #endif > > void ff_vvc_dsp_init_x86(VVCDSPContext *const c, const int bd) > @@ -330,7 +342,7 @@ void ff_vvc_dsp_init_x86(VVCDSPContext *const c, const int bd) > ALF_INIT(8); > AVG_INIT(8, avx2); > MC_LINKS_AVX2(8); > - SAD_INIT(); > + SAD_INIT(avx2); > } > break; > case 10: > @@ -342,7 +354,7 @@ void ff_vvc_dsp_init_x86(VVCDSPContext *const c, const int bd) > AVG_INIT(10, avx2); > MC_LINKS_AVX2(10); > MC_LINKS_16BPC_AVX2(10); > - SAD_INIT(); > + SAD_INIT(avx2); > } > break; > case 12: > @@ -354,7 +366,7 @@ void ff_vvc_dsp_init_x86(VVCDSPContext *const c, const int bd) > AVG_INIT(12, avx2); > MC_LINKS_AVX2(12); > MC_LINKS_16BPC_AVX2(12); > - SAD_INIT(); > + SAD_INIT(avx2); > } > break; > default: > diff --git a/tests/checkasm/vvc_mc.c b/tests/checkasm/vvc_mc.c > index 1e889e2cff..deae1014d2 100644 > --- a/tests/checkasm/vvc_mc.c > +++ b/tests/checkasm/vvc_mc.c > @@ -327,6 +327,7 @@ static void check_avg(void) > static void check_vvc_sad(void) > { > const int bit_depth = 10; > + static const uint8_t sad_tab[16] = { 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4 }; > VVCDSPContext c; > LOCAL_ALIGNED_32(uint16_t, src0, [MAX_CTU_SIZE * MAX_CTU_SIZE * 4]); > LOCAL_ALIGNED_32(uint16_t, src1, [MAX_CTU_SIZE * MAX_CTU_SIZE * 4]); > @@ -341,7 +342,7 @@ static void check_vvc_sad(void) > for (int w = 8; w <= MAX_CTU_SIZE; w *= 2) { > for(int offy = 0; offy <= 4; offy++) { > for(int offx = 0; offx <= 4; offx++) { > - if(check_func(c.inter.sad, "sad_%dx%d", w, h)) { > + if(check_func(c.inter.sad[sad_tab[(w >> 3) - 1]], "sad_%dx%d", w, h)) { > int result0; > int result1; > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".