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 8558947F9B for ; Sat, 6 Jan 2024 10:52:43 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3E9BC68CD06; Sat, 6 Jan 2024 12:52:37 +0200 (EET) Received: from APC01-PSA-obe.outbound.protection.outlook.com (mail-psaapc01olkn2107.outbound.protection.outlook.com [40.92.52.107]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5C1C568CCEE for ; Sat, 6 Jan 2024 12:52:30 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ALaaGMlrn5TJ/z6GLvuY7HUpQ4zMeMOt56DMSFXOtOOKSEQrs6AC7OYQZiBqgxVvV/qYvysjg/z8A3rtc4CN2t5KYeDkEgccyoP+e892/Od54mml8Y22qyJ7H87K2dOciN5Iacz6d4OT9mT4+7LKtvB8R/SdH31Z541UAPZtNdO3SoyFBCcZhcxOEQZE+/zwZ8PBGM4sGIgTzLG6yAzS9RyfOdCQ95V9FGgRnDD4TOx7fJlRBXiZBYIu7dsH7U8/8+e22umTNpfmmXOOoO99f6qIMJyUEoeQSKavtQv9ZLpb7dK9eVT9RNKCOSK84GLBZ2R+STKt2aPuK9zlmJ1M9g== 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=1Daof+jVIjDPN5F3SPVQWU89v+SF659smGyw5gUCZfQ=; b=mvi+8HvlEhYFzrRSu8yL4zBgdyV7A9P7fGJcQLAbGak/Un16mqVeRIfQkAhh0K0C/K9AbIXSRXDHIyEZ6omttmcyqGvObyx9IMFTRBE9ebIEl3VByDvVRBGad/K7fJVKTypW3mf6sFE+Wa3i8WeB1sKMdkVbnYvqb717tza6rumy/Hi+nmsevsqg0NhPUAudMaE6UvA+mCVm8DvS/9xapgs7k0YP2KEdYiO8S8smt4WDTIE3JEmKiTBP9AlvTPF4HF3vkIqneBkejIc9gIv0e4XkWRcZWOytjJyLuyeclEXOKB9ymNW5H25F1ja5pQyYhxefOXfJ3FvjYJIxCKP0xA== 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=1Daof+jVIjDPN5F3SPVQWU89v+SF659smGyw5gUCZfQ=; b=ucf19iRfXnmLsA8VxYkfAS2JSPSys//oy9pCtfzwDlqoLSXqroFc34JuVVXOO1zyu6UoHwlKOsLRh1pKwdtusTvUJ/R7xwbjR6FDNvkM2oknZ9R51TzKaAKeUZ5+yToquMfrXupLOLuFmcH9sQLm2k31TY8kmUSC/q8lHHVmMqem9M7K73TOkgZEdxiNkP6cfmg7sT4pz227+WVLvKSFHIM/cLKQSKMrX+hyYCPtxnFD9u9OCaKEE8vdAfgB9DjFwDf4ZJCCkmMQITW7yuEHOsOVIbX4/T2B0KPfGGOLt4vY9ry6KT55In30uFu3Agla+4wFoAbvSQznl1w7t7rGEA== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by SI2PR06MB3946.apcprd06.prod.outlook.com (2603:1096:4:ea::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7159.17; Sat, 6 Jan 2024 10:52:15 +0000 Received: from TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::e139:fd7a:1b66:a3f7]) by TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::e139:fd7a:1b66:a3f7%7]) with mapi id 15.20.7159.018; Sat, 6 Jan 2024 10:52:15 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sat, 6 Jan 2024 18:51:31 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240106105132.31509-1-nuomi2021@gmail.com> References: <20240106105132.31509-1-nuomi2021@gmail.com> X-TMN: [ROrRSJmCB4rLJrNM+cxLfIhsVY5ngHs+] X-ClientProxiedBy: TYAPR04CA0003.apcprd04.prod.outlook.com (2603:1096:404:15::15) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20240106105132.31509-3-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|SI2PR06MB3946:EE_ X-MS-Office365-Filtering-Correlation-Id: 2a790e4a-f3ec-4bd8-b0fb-08dc0ea58b37 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: pe2SmoqylrGZyC9rYpsoQ/e23iYCE/08+VVagHY2YbPODPO8Nn0eFg+IxKPkiEUjSWQpAaHaD7tTDUhxhwA7R203oHriaRX5ya8MnM5w4ydjtcKkuH15pQENBmQ3XDpRIrCIA4spybAuqYqPcuNQ07E6+Sxkj6Z/k6Qn7fEs0CA/qRGYJ0L3DI23hc0c4JiyvCm4VaEaNeDUn7m+hCZfqRQX04bxvguf+5GpUO4b8NmN/jmmmq+eGN4qTtDoX606TesPTHVawIQHYi33aZsrgYZpjcc/3U/vphtyqg/5vTfB78lzAWxyw+sMrzmFq6yNEcgnzUiNGiJ2BgETnJH+vXfYj07gMx1mUdOKBUcFgm9URRKrtBg2zJ6IxGqJQ8grx7MBv4eVHr8OpunCeucs3pIzuaZUyfgzvbsEbDF1SxH4cQawo6nFuv0+5liRJWscXXU9WoIRfZUaEAkm46NbLAZLtDD3YxvvKxslR5UyyE793bBipjZDSr9+TFPc8jb+X0yw8hFE59oPJSg8tGi6sKuMP6OvIAggPIbFRLctOmJcKQU1xDvXmUUbxLRm+FMh7hiF/mzr32dGVGcHlZNr1Vovmf348JM5AQVhNB9BmFhbxE14R7ASKRmagwaktsod X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ueREWn7zOkozUqGM+pajxHtZ9aq1JfV4rWDQqFJi41/e+u4rwCPbxkPnO6k1?= =?us-ascii?Q?7jsdOBunHj1AIqebjbEpejcY23mxy95S5pW7l+QJKDIkkN6ypt7ttDvGy6r3?= =?us-ascii?Q?zLsj5ZbQxD+FhFQvZzzQ4gmnoawlaT7/b3MoZi/sLLhFpSzboGdoDaFVTK1E?= =?us-ascii?Q?fda2QRmgw7+hY+PIWENsRBxM/FsTKLeyutkm05S7HQeXktxnaRNR+DhWFwNn?= =?us-ascii?Q?rGWoJs3jnAum3BdPEdq5jpIaiTV+tuzJKCD2uwYkSn2qzPUl7vcARE3NnQPf?= =?us-ascii?Q?htNzXBawIdG8/HYgKyn7BHQOa2+CGzrKJmzg/Diqdn92MS2pyOsRBN2cBcEl?= =?us-ascii?Q?ZejBHwAW90voV4I0l1SBtjN9738++Z1DzFkKWLknK7LLIZlGBf1xlXjAC1Bv?= =?us-ascii?Q?SlxI6c/BBpweVqr44hyMFEpwM2h7kFf2xY8pCgfucLYosS9pHIGl1bJky+CT?= =?us-ascii?Q?zPkitWQz4lg8rG4SKBbOA1Lx8ZW8hNovzDkmTgIea3bPWBmnUHJD27uaPSpq?= =?us-ascii?Q?RYdAwkxsbTkJFCdTJ7Pt1fn8duqJscLK4uc/XKE2YEIAJv/mA7kuyNWrASFl?= =?us-ascii?Q?7csHq4KZ1iuh+WO0ntnG0rSnRqIEN7DDSflApji4JPlUyEBduSUDzIcN0Cve?= =?us-ascii?Q?HO2On3UyFZZsKcapS/PXu6IeyDW3NYTVt1ho0RTaDLGe/hUHrOJOElkeQttk?= =?us-ascii?Q?HHIFhwbCzcgWy9KYFanhDqQIAnskBtfvJ26BpP/I5POY9eauIcbyOW+yKlKL?= =?us-ascii?Q?YLzgJcLGnpg0iK0/1YAO/9NvO1whgMcTZsaQYg91rrgMRiw91zIby1FH0sD9?= =?us-ascii?Q?AFUiG+rU+qlmjypYGzjTkaxloMzDeypPe1fPuKSdkQ1SnJ/rVSeDXHKqNmCb?= =?us-ascii?Q?kDrkCvqfzAij3G62kXhyRhiWJJaEktG4FfAXyuwPwTyt3GLoaU8HIzIVcdDX?= =?us-ascii?Q?3VAXIpsRTKofBiWasZhl3+ja1hkfBQxW5UwgmW4ks+ZjVeA8Py4HTxUuRsPK?= =?us-ascii?Q?p0sYy0MwVevSlQeb4g3VBKMr3/BOez6+dp3ooG10w3EaijSP9yVw2K66WC2U?= =?us-ascii?Q?jMUr8KZsAx/jqY4jKz94sCw17I/N775uco5U9GYlulOTUOZm+6WEBgPzYK22?= =?us-ascii?Q?WF36HhXmjzfU2+wJ+0BEatOAnRve/yJGS5J+4d+C0HHBtYWNsuTUluju7ldz?= =?us-ascii?Q?oO5Fxpz9CuZ2S+JRVxhrmEL5760lucYgdj5bMnxMdJHn4TnNUgGv/8AnKfyi?= =?us-ascii?Q?U56yF0hSyV/U6q/n9uHq?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2a790e4a-f3ec-4bd8-b0fb-08dc0ea58b37 X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jan 2024 10:52:15.0217 (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: SI2PR06MB3946 Subject: [FFmpeg-devel] [PATCH v2 3/4] hevcdec: move deblock template to h26x/h2656_deblock_template.c 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: Nuo Mi 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: --- libavcodec/h26x/h2656_deblock_template.c | 99 ++++++++++++++++++++++++ libavcodec/hevcdsp_template.c | 96 ++++------------------- 2 files changed, 116 insertions(+), 79 deletions(-) create mode 100644 libavcodec/h26x/h2656_deblock_template.c diff --git a/libavcodec/h26x/h2656_deblock_template.c b/libavcodec/h26x/h2656_deblock_template.c new file mode 100644 index 0000000000..8ed95e754d --- /dev/null +++ b/libavcodec/h26x/h2656_deblock_template.c @@ -0,0 +1,99 @@ + +/* + * HEVC/VVC deblocking dsp template + * + * Copyright (C) 2024 Nuo Mi + * Copyright (C) 2012 - 2013 Guillaume Martres + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +static void FUNC(loop_filter_luma_strong)(pixel *pix, const ptrdiff_t xstride, const ptrdiff_t ystride, + const int32_t tc, const int32_t tc2, const int tc3, + const uint8_t no_p, const uint8_t no_q) +{ + for (int d = 0; d < 4; d++) { + const int p3 = P3; + const int p2 = P2; + const int p1 = P1; + const int p0 = P0; + const int q0 = Q0; + const int q1 = Q1; + const int q2 = Q2; + const int q3 = Q3; + if (!no_p) { + P0 = p0 + av_clip(((p2 + 2 * p1 + 2 * p0 + 2 * q0 + q1 + 4) >> 3) - p0, -tc3, tc3); + P1 = p1 + av_clip(((p2 + p1 + p0 + q0 + 2) >> 2) - p1, -tc2, tc2); + P2 = p2 + av_clip(((2 * p3 + 3 * p2 + p1 + p0 + q0 + 4) >> 3) - p2, -tc, tc); + } + if (!no_q) { + Q0 = q0 + av_clip(((p1 + 2 * p0 + 2 * q0 + 2 * q1 + q2 + 4) >> 3) - q0, -tc3, tc3); + Q1 = q1 + av_clip(((p0 + q0 + q1 + q2 + 2) >> 2) - q1, -tc2, tc2); + Q2 = q2 + av_clip(((2 * q3 + 3 * q2 + q1 + q0 + p0 + 4) >> 3) - q2, -tc, tc); + } + pix += ystride; + } +} + +static void FUNC(loop_filter_luma_weak)(pixel *pix, const ptrdiff_t xstride, const ptrdiff_t ystride, + const int32_t tc, const int32_t beta, const uint8_t no_p, const uint8_t no_q, const int nd_p, const int nd_q) +{ + const int tc_2 = tc >> 1; + for (int d = 0; d < 4; d++) { + const int p2 = P2; + const int p1 = P1; + const int p0 = P0; + const int q0 = Q0; + const int q1 = Q1; + const int q2 = Q2; + int delta0 = (9 * (q0 - p0) - 3 * (q1 - p1) + 8) >> 4; + if (abs(delta0) < 10 * tc) { + delta0 = av_clip(delta0, -tc, tc); + if (!no_p) + P0 = av_clip_pixel(p0 + delta0); + if (!no_q) + Q0 = av_clip_pixel(q0 - delta0); + if (!no_p && nd_p > 1) { + const int deltap1 = av_clip((((p2 + p0 + 1) >> 1) - p1 + delta0) >> 1, -tc_2, tc_2); + P1 = av_clip_pixel(p1 + deltap1); + } + if (!no_q && nd_q > 1) { + const int deltaq1 = av_clip((((q2 + q0 + 1) >> 1) - q1 - delta0) >> 1, -tc_2, tc_2); + Q1 = av_clip_pixel(q1 + deltaq1); + } + } + pix += ystride; + } +} + +static void FUNC(loop_filter_chroma_weak)(pixel *pix, const ptrdiff_t xstride, const ptrdiff_t ystride, + const int size, const int32_t tc, const uint8_t no_p, const uint8_t no_q) +{ + for (int d = 0; d < size; d++) { + int delta0; + const int p1 = P1; + const int p0 = P0; + const int q0 = Q0; + const int q1 = Q1; + delta0 = av_clip((((q0 - p0) * 4) + p1 - q1 + 4) >> 3, -tc, tc); + if (!no_p) + P0 = av_clip_pixel(p0 + delta0); + if (!no_q) + Q0 = av_clip_pixel(q0 - delta0); + pix += ystride; + } +} diff --git a/libavcodec/hevcdsp_template.c b/libavcodec/hevcdsp_template.c index 2ff1776b92..0de14e9dcf 100644 --- a/libavcodec/hevcdsp_template.c +++ b/libavcodec/hevcdsp_template.c @@ -1319,19 +1319,20 @@ static void FUNC(put_hevc_epel_bi_w_hv)(uint8_t *_dst, ptrdiff_t _dststride, #define TQ2 pix[2 * xstride + 3 * ystride] #define TQ3 pix[3 * xstride + 3 * ystride] +#include "h26x/h2656_deblock_template.c" + static void FUNC(hevc_loop_filter_luma)(uint8_t *_pix, ptrdiff_t _xstride, ptrdiff_t _ystride, int beta, const int *_tc, const uint8_t *_no_p, const uint8_t *_no_q) { - int d, j; - pixel *pix = (pixel *)_pix; ptrdiff_t xstride = _xstride / sizeof(pixel); ptrdiff_t ystride = _ystride / sizeof(pixel); beta <<= BIT_DEPTH - 8; - for (j = 0; j < 2; j++) { + for (int j = 0; j < 2; j++) { + pixel* pix = (pixel*)_pix + j * 4 * ystride; const int dp0 = abs(P2 - 2 * P1 + P0); const int dq0 = abs(Q2 - 2 * Q1 + Q0); const int dp3 = abs(TP2 - 2 * TP1 + TP0); @@ -1342,10 +1343,7 @@ static void FUNC(hevc_loop_filter_luma)(uint8_t *_pix, const int no_p = _no_p[j]; const int no_q = _no_q[j]; - if (d0 + d3 >= beta) { - pix += 4 * ystride; - continue; - } else { + if (d0 + d3 < beta) { const int beta_3 = beta >> 3; const int beta_2 = beta >> 2; const int tc25 = ((tc * 5 + 1) >> 1); @@ -1353,63 +1351,16 @@ static void FUNC(hevc_loop_filter_luma)(uint8_t *_pix, if (abs(P3 - P0) + abs(Q3 - Q0) < beta_3 && abs(P0 - Q0) < tc25 && abs(TP3 - TP0) + abs(TQ3 - TQ0) < beta_3 && abs(TP0 - TQ0) < tc25 && (d0 << 1) < beta_2 && (d3 << 1) < beta_2) { - // strong filtering const int tc2 = tc << 1; - for (d = 0; d < 4; d++) { - const int p3 = P3; - const int p2 = P2; - const int p1 = P1; - const int p0 = P0; - const int q0 = Q0; - const int q1 = Q1; - const int q2 = Q2; - const int q3 = Q3; - if (!no_p) { - P0 = p0 + av_clip(((p2 + 2 * p1 + 2 * p0 + 2 * q0 + q1 + 4) >> 3) - p0, -tc2, tc2); - P1 = p1 + av_clip(((p2 + p1 + p0 + q0 + 2) >> 2) - p1, -tc2, tc2); - P2 = p2 + av_clip(((2 * p3 + 3 * p2 + p1 + p0 + q0 + 4) >> 3) - p2, -tc2, tc2); - } - if (!no_q) { - Q0 = q0 + av_clip(((p1 + 2 * p0 + 2 * q0 + 2 * q1 + q2 + 4) >> 3) - q0, -tc2, tc2); - Q1 = q1 + av_clip(((p0 + q0 + q1 + q2 + 2) >> 2) - q1, -tc2, tc2); - Q2 = q2 + av_clip(((2 * q3 + 3 * q2 + q1 + q0 + p0 + 4) >> 3) - q2, -tc2, tc2); - } - pix += ystride; - } - } else { // normal filtering + FUNC(loop_filter_luma_strong)(pix, xstride, ystride, tc2, tc2, tc2, no_p, no_q); + } else { int nd_p = 1; int nd_q = 1; - const int tc_2 = tc >> 1; if (dp0 + dp3 < ((beta + (beta >> 1)) >> 3)) nd_p = 2; if (dq0 + dq3 < ((beta + (beta >> 1)) >> 3)) nd_q = 2; - - for (d = 0; d < 4; d++) { - const int p2 = P2; - const int p1 = P1; - const int p0 = P0; - const int q0 = Q0; - const int q1 = Q1; - const int q2 = Q2; - int delta0 = (9 * (q0 - p0) - 3 * (q1 - p1) + 8) >> 4; - if (abs(delta0) < 10 * tc) { - delta0 = av_clip(delta0, -tc, tc); - if (!no_p) - P0 = av_clip_pixel(p0 + delta0); - if (!no_q) - Q0 = av_clip_pixel(q0 - delta0); - if (!no_p && nd_p > 1) { - const int deltap1 = av_clip((((p2 + p0 + 1) >> 1) - p1 + delta0) >> 1, -tc_2, tc_2); - P1 = av_clip_pixel(p1 + deltap1); - } - if (!no_q && nd_q > 1) { - const int deltaq1 = av_clip((((q2 + q0 + 1) >> 1) - q1 - delta0) >> 1, -tc_2, tc_2); - Q1 = av_clip_pixel(q1 + deltaq1); - } - } - pix += ystride; - } + FUNC(loop_filter_luma_weak)(pix, xstride, ystride, tc, beta, no_p, no_q, nd_p, nd_q); } } } @@ -1419,32 +1370,19 @@ static void FUNC(hevc_loop_filter_chroma)(uint8_t *_pix, ptrdiff_t _xstride, ptrdiff_t _ystride, const int *_tc, const uint8_t *_no_p, const uint8_t *_no_q) { - int d, j, no_p, no_q; - pixel *pix = (pixel *)_pix; + int no_p, no_q; ptrdiff_t xstride = _xstride / sizeof(pixel); ptrdiff_t ystride = _ystride / sizeof(pixel); + const int size = 4; - for (j = 0; j < 2; j++) { + for (int j = 0; j < 2; j++) { + pixel *pix = (pixel *)_pix + j * size * ystride; const int tc = _tc[j] << (BIT_DEPTH - 8); - if (tc <= 0) { - pix += 4 * ystride; - continue; - } - no_p = _no_p[j]; - no_q = _no_q[j]; - - for (d = 0; d < 4; d++) { - int delta0; - const int p1 = P1; - const int p0 = P0; - const int q0 = Q0; - const int q1 = Q1; - delta0 = av_clip((((q0 - p0) * 4) + p1 - q1 + 4) >> 3, -tc, tc); - if (!no_p) - P0 = av_clip_pixel(p0 + delta0); - if (!no_q) - Q0 = av_clip_pixel(q0 - delta0); - pix += ystride; + if (tc > 0) { + no_p = _no_p[j]; + no_q = _no_q[j]; + + FUNC(loop_filter_chroma_weak)(pix, xstride, ystride, size, tc, no_p, no_q); } } } -- 2.25.1 _______________________________________________ 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".