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 ESMTPS id 8514D4DF51 for ; Wed, 5 Mar 2025 21:41:55 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C321168F20F; Wed, 5 Mar 2025 23:41:50 +0200 (EET) Received: from EUR02-DB5-obe.outbound.protection.outlook.com (mail-db5eur02olkn2098.outbound.protection.outlook.com [40.92.50.98]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 964B868F10D for ; Wed, 5 Mar 2025 23:41:43 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KNqiusQHiLEyCj2+x3YjQzPINYc+Qnq+U/uDdnzGNs3QrNTDuRPyR4rvqL+collkWQKaqjoprQD6tl4jpEglHkTiaVPP29lg2kk7F/HBaK4I1VRVlqpqfwQeqgybomBnrGbTjWqjl3n+1DIJHTq0KWXdTXM+IzD8pzXE+vbJ+Yfw0J0kObXTKj1R2zHN8yxBSdUHXO3ETDVg7MNLVQz5wiPtscDS1yRq4zIlUWZltaEggJ6VnlSAmjWlkI6OzTpjumZXt5LyJ/9xKcyrOXKQI7scFiJnObbhTEpDIjE3fsi8Q+vVz0PyCvZx0/sZEylZfaSSc+edy97BCtboT2C0ww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=k2vRzM2oP2yDc6Aqy0dKkPYkPOGxpA+qMih1Ft7q7gA=; b=X9GK1ZkSqiFTHq4wk++r6HYeeng6npXcOqxxx+Wr9yGnfMs9eze8E2H/nw1ZQ3oFSXkPmLQZOS9SNwAVEi6qBhO6BkujRxOLOEBOioCB3Ypc8glhndf7nJxxz4g3IXAxDSA+E7BjquODMK3wytkHdYLBPvyQe6takgKO2Vi+uLD2V1H3CYhjZSZ58QSPlhLJ8N7g/B9BMC+nN/R+Ndz/7g9Ux0Ke35fTntQzZMVT/tpTVIzRbwmAHDkiwTcMcp40sFguZIL6ZLdme1XnfUEiBICi8sqF9ukOPt6oAhfuAbe+N6AYwwaLci9fx0F3ISkNDE4odqb/2pITrhBcOBr5eg== 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=k2vRzM2oP2yDc6Aqy0dKkPYkPOGxpA+qMih1Ft7q7gA=; b=plrmUuc103+/NxEMrU1CPE08MBWn0ugvw5szDXl+DOUFWWfkqPOwJNvquxfIhKYz/FcbMPFtEV+1bZirp59LSxuZvwK2rmzHg6GtwR0hDH0TAAZMJkVxvujaDVFjMd7R8lnN9d3zI+T1QGmnQ8J1msmSlyWOwNRzgXGzNNuUy/o8y9gFe/U1A6HmGIcpjVRoJJ1woeSKuiCFeu5v4JLYv1uNVBottgHL0hjjQC/mBTYtsB6OivvtSEU6PPE3qYNQddl0PDuhxm163hMdM88AdfhX9a8tmitRncRuceW68hyjOebB/rv6k5v8/FHe+GZ61bcE3LAMkctjjE+qYMrK9Q== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by AS8P250MB0396.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:37f::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.16; Wed, 5 Mar 2025 21:41:42 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::384d:40d4:ecb7:1c9]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::384d:40d4:ecb7:1c9%5]) with mapi id 15.20.8511.014; Wed, 5 Mar 2025 21:41:42 +0000 Message-ID: Date: Wed, 5 Mar 2025 22:41:40 +0100 User-Agent: Mozilla Thunderbird To: ffmpeg-devel@ffmpeg.org References: <20250305204413.36950-3-jamrial@gmail.com> <20250305213347.40999-1-jamrial@gmail.com> Content-Language: en-US From: Andreas Rheinhardt In-Reply-To: <20250305213347.40999-1-jamrial@gmail.com> X-ClientProxiedBy: FR4P281CA0167.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:b7::8) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <140a2a20-f711-40fb-bf25-17d1c736e76d@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|AS8P250MB0396:EE_ X-MS-Office365-Filtering-Correlation-Id: 5d1ead12-cd6e-4320-af8c-08dd5c2e844d X-Microsoft-Antispam: BCL:0; ARA:14566002|8060799006|15080799006|461199028|5072599009|19110799003|7092599003|6090799003|440099028|3412199025|41001999003; X-Microsoft-Antispam-Message-Info: =?utf-8?B?bm5hMnhtWGwzZmg5ejd5YldWL1JKWi85VkhtVGFQNUdCRWwzWVpPRFNOcVpD?= =?utf-8?B?ajlMS05qd1JacnVBeTIxc1VkUDM0UkpIRGJ0WFdsdmt6THc2WEp4bStIMm40?= =?utf-8?B?aTMyamFlZmRPNWJjMnNnZjgzVFJRdXN5T3ExZ0psaGlneTlZMG5PS1RkY0t4?= =?utf-8?B?bmdsV2ZqRWFFMzdLYm1OR1dBenIrRmgwcXI1MFVST3BsRDR0WVp2OHJGVEdV?= =?utf-8?B?QmlWNFM0a3hnVlNOaFIzTHRWNkVRUEJqQzRNbTBERzFrM2V0ZDE5VWxNRElN?= =?utf-8?B?RVJDZkxrY3NBdU5iV3BxYWdoNHA2TUowTVcraXhHbEhvSmMzL1ZGamFKVWNO?= =?utf-8?B?YmIvKzVjS25ydTdsQ1AzWmFXSXdwNU52MXFPUlBmdk9MblFuVHpiZHhSM2g5?= =?utf-8?B?djh2SVZPVnVnRGFhZXQrem5lMXVOZGVZMFRBNVAyVkdJOElSRmdrNFdFSXp0?= =?utf-8?B?NWMrUi9La2VCc2VtU0VXb3RVeWFPVWRIbUFhdVJub2J0eXBWQWJjQW82Zm5i?= =?utf-8?B?K09iTXVVOGM4Mm1PeXlvZzVlTGs0U3AyZ1NnOFhxZkc3dVdaaWZUTGFFaEh5?= =?utf-8?B?aU80RXhsdlFjcVhIV3pIaEhKZXJNMmtPdG5LajRWTmFyU3JjcjRST3NJN29Z?= =?utf-8?B?RTRmUnptcG1raWR6UlNhRHQ1VHc1aGFHTWVJM2RTQk40UWJmNjRJSEN5V1Br?= =?utf-8?B?Yk50bG9HSUpqLzV4RUxHSm5ZM3pmTFEwWmtwVzdqaUE5emdkUkd3VDdWMy9V?= =?utf-8?B?eDRLYks2c3ZxS0h2TnNleEZpakRDYzQ5WG5UcEFGejdSc3NHWlVreXU0MStP?= =?utf-8?B?NktXNTFMRHJOQUFkM3hzdUM4L3dhSlYxVG93ZlNyd0pQUGE0bTI4L3pxRWVw?= =?utf-8?B?amR0MU5WRDdxZCs5WHRJVTE0TDZVNjQwNkxnT1VoNTJRQnIrSEUzZlQrY3VK?= =?utf-8?B?UmdkU2ZibThURWdIeTdtTmk2VEtuYkdCMlBDMEc2SkUrTG5iSzY1bjNyc1ZZ?= =?utf-8?B?MkROamQxNUZsMkhqR3YzTURyTkVzdWovcjRleFVUbXF5SUZ1Q0t4SFc2YzV0?= =?utf-8?B?dXBEQTl3UkJDY093NWlPek1jQ1loQXprTHR0OEhNVDFBTUl2TU84L3NrdGky?= =?utf-8?B?SXZXMGh4a3BlaXg2UG1ETnV2dDN3M0VyNmZJZlVHQVBabVhhd0xGSzkyZGNw?= =?utf-8?B?K0tmWWVEL2czeDdJT1JlVVVtSHFWdytTcXpreVNCMWJ3UWh2c2JYN2NtdWFn?= =?utf-8?B?amExL2pYVU1TbStWRGUvN29Sb2RQenEyQUtLdGlxdmRGWWpsUFQrdTM1NFRT?= =?utf-8?B?WCtnb0FaS1Q3N043a3Ird2ZrYnBiaEFjVEtnMUJkdUFKb0ZaQmhteStUTUlt?= =?utf-8?B?dkV2cnFjVTlwM29FSXlleTUydzV2N0lHQ3V1b0hnNVVweTc5cGZMTTZUZEJF?= =?utf-8?B?Y2RZaVJkL0d0WW1YdUlWREJ6SVkrd0F0Q0d2WTZ3NkxLOUJmT2ptcG1GODZp?= =?utf-8?B?bGtza3MrRzgzWjNmc21BeXYzdUFFQUZHdWZGaXJ0dkQ2RUVObGgxSVU3N2l4?= =?utf-8?B?STlUZz09?= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?c254eVF4N3NLemlybEoxaVdlcFpybFM2WnVpMTdBdS9uenhoUlI2d1g2bE05?= =?utf-8?B?WHZNczFjMzYwcDNBZHpkSnIvdHJ6bkVQZjV6Mmhhb3F4U2NOaGplUUk4bWpD?= =?utf-8?B?d0VGclV5eVRHTVZXVUdrK1dyS21maW9QRzZFTTMrbysxaFFGU01ZRnhBMDZJ?= =?utf-8?B?TUFHK0VEMHdpQ1Y1UFg3ZGRaaHFPdEk3ZXdMYW5FNlJLMDQwcDlJUW9ZV3h2?= =?utf-8?B?cXBCRFV4TGpEdDBuT28vaCtKR21CWC9zaGV0ZCtWRDE3ZUFLdDRnL3hrY2Y5?= =?utf-8?B?VTFBQS9rbEZjWHNTYWJXYXlZdEMyMHR5cFR3SmM2UXhRTlBUUmJIeGlDS0R6?= =?utf-8?B?Smcyb2FRajRUcjMrL2t6VVlBcVZ2d0pxNEZPVW1pMXJocGJBeHloNmIvSmJV?= =?utf-8?B?SEdHSTVsc0ZIRVRIbmhKUDlUdHNva3l1a2xROHpRclVMSG9Kb2lnd2o4K0Rk?= =?utf-8?B?R3JRTGpEKytxTGZacnJWWWdDSVlOQTNHUmtjQ3RBemZvb0xaOW1URSsrUkt3?= =?utf-8?B?OHppL1c5bTA1VmpnN1FEWG16aXFxNHJUcGlZR2thSnFWbnAzdVdjam5Hc2tv?= =?utf-8?B?a3ZMYzlnNUNDT2d1b2hFbWplblFmQnhtUE1pN3QxTTFaNVVoTWxaVmVocjlD?= =?utf-8?B?M3k3V21wVHVoTTZaRE53WnY3OWpselpyeTgzMzdMMENQSlh4RW80OEVjbnox?= =?utf-8?B?UFZNbkoxTTM1MG55MnQzVFl3cE5qbDlkaitLUFRaUWhxTXNEMTRDVUcxTUEy?= =?utf-8?B?SmNOd1g3am1CSkgwbGJhaGE1MEs2c3RsQjQ1SlVjLzNGNEsydzBVWEUxVkVp?= =?utf-8?B?akRJR291QlB5Zll0VzB1UFFDb2xqQWJlN0Y1ZGF6SkNVMjlNS1o4Z2lheHp1?= =?utf-8?B?ZFB0RGdULzFhampFKzNnc3d6eUNZK3hkcER4U0NLYUlYbExKQVpycitGaDNR?= =?utf-8?B?d0hIc2xjbnl4Mmo3QWovZzBBd2laSTFnbCtkOG1vallZL2JxR1N1eWFVRk9I?= =?utf-8?B?dlg1czBxbjFOYXlQLzdNbzJrVEg0eFJ0M0x5RU40eThGWUN1bC9sU2RPMWtJ?= =?utf-8?B?cDM0bnliYTFEWCtqQzkvckEybk9xUUVvT0FBbXBpWm9BVkV4aEVTWUR5STJ4?= =?utf-8?B?VXNMZG52YmNLRGZIMU9RWVBzTGtTQjhmTUxUR1hTU0tKK2VGcmc4WkJpL2N4?= =?utf-8?B?eGp0VFdiV1E5Y2gyQ2NXOVdVR2lRaFdCRHcrYWtKZnVOeGN0bWU3dktYcGJD?= =?utf-8?B?QThodXRQWEVtQlJXRFpHVlZzRHNUcWloTTI0Mk5RQk5rWklGbDR5WEQ0SHNV?= =?utf-8?B?R3BsRnVmTWF5ZDFTckxVdkVsYWdmc0pmWHp1ZHlqdjkxRHU5bU0wRDB5eUtP?= =?utf-8?B?RWhraGt3aHI5Q2x5OW9yYjBjd2hGdDdIMGxjRDZ3VUlDNVI5cE93LzlHZXFw?= =?utf-8?B?SjdnZld5NTlFZmgyUXdiMnd5clp4MnpGM0NubjlGRFQrbFRVSzc4enNCOVUz?= =?utf-8?B?bFB4cDNIdksraHlQbkxPNStBbFI3WEtGOXc4b01SZ3Y3UzVUNUV0SVJQYzQ2?= =?utf-8?B?alF5VzNpbzU1U3RHVCtJRWFPaEE4UjFMWlpLS01YdS94WXRnMzhOamM5WW9J?= =?utf-8?B?OHlGYWREbUhmSENtWDBJQzErK0pONWVJNTk4UkdjV2ZVZytBaUIzWlEwQzI3?= =?utf-8?B?SDg3MlB4ZEpHZVk3OHhsZi85ckRkU1lCbEtodjROMnBkKzdRdXk4bk9RPT0=?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5d1ead12-cd6e-4320-af8c-08dd5c2e844d X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Mar 2025 21:41:41.9697 (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: AS8P250MB0396 Subject: Re: [FFmpeg-devel] [PATCH v2 3/3] avcodec/exr: use luma+alpha float pixel formats 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 > --- > Updated for the latest git master changes. > > libavcodec/exr.c | 55 ++++++++------------ > tests/ref/fate/exr-ya-scanline-zip-half-12x8 | 2 +- > 2 files changed, 22 insertions(+), 35 deletions(-) > > diff --git a/libavcodec/exr.c b/libavcodec/exr.c > index b25e9ef397..fe5f62c3b5 100644 > --- a/libavcodec/exr.c > +++ b/libavcodec/exr.c > @@ -1352,33 +1352,32 @@ static int decode_block(AVCodecContext *avctx, void *tdata, > data_yoffset = FFABS(FFMIN(0, line)); > data_window_offset = (data_yoffset * td->channel_line_size) + data_xoffset; > > + if (s->channel_offsets[3] >= 0) > + channel_buffer[3] = src + (td->xsize * s->channel_offsets[3]) + data_window_offset; > if (!s->is_luma) { > channel_buffer[0] = src + (td->xsize * s->channel_offsets[0]) + data_window_offset; > channel_buffer[1] = src + (td->xsize * s->channel_offsets[1]) + data_window_offset; > channel_buffer[2] = src + (td->xsize * s->channel_offsets[2]) + data_window_offset; > rgb_channel_count = 3; > - } else { /* put y data in the first channel_buffer */ > + } else { /* put y data in the first channel_buffer and if needed, alpha in the second */ > channel_buffer[0] = src + (td->xsize * s->channel_offsets[1]) + data_window_offset; > + if (!(s->desc->flags & AV_PIX_FMT_FLAG_PLANAR)) > + channel_buffer[1] = channel_buffer[3]; > rgb_channel_count = 1; > } > - if (s->channel_offsets[3] >= 0) > - channel_buffer[3] = src + (td->xsize * s->channel_offsets[3]) + data_window_offset; > - > - if (s->desc->flags & AV_PIX_FMT_FLAG_PLANAR || s->desc->nb_components == 1 ) { > - /* todo: change this when a floating point pixel format with luma with alpha is implemented */ > - int channel_count = s->channel_offsets[3] >= 0 ? 4 : rgb_channel_count; > - if (s->is_luma) { > - channel_buffer[1] = channel_buffer[0]; > - channel_buffer[2] = channel_buffer[0]; > - } > > - for (c = 0; c < channel_count; c++) { > + if (s->desc->flags & AV_PIX_FMT_FLAG_FLOAT) { > + for (c = 0; c < s->desc->nb_components; c++) { > int plane = s->desc->comp[c].plane; > - ptr = p->data[plane] + window_ymin * p->linesize[plane] + (window_xmin * step); > + ptr = p->data[plane] + window_ymin * p->linesize[plane] + (window_xmin * step) + s->desc->comp[c].offset; > > for (i = 0; i < ysize; i++, ptr += p->linesize[plane]) { > const uint8_t *src; > > + // Zero out the start if xmin is not 0 > + if (s->desc->flags & AV_PIX_FMT_FLAG_PLANAR || !c) > + memset(ptr, 0, bxmin); > + > if (s->pixel_type == EXR_FLOAT || > s->compression == EXR_DWAA || > s->compression == EXR_DWAB) { > @@ -1387,42 +1386,36 @@ static int decode_block(AVCodecContext *avctx, void *tdata, > > src = channel_buffer[c]; > > - // Zero out the start if xmin is not 0 > - memset(ptr_x, 0, bxmin); > - ptr_x += 4 * window_xoffset; > + ptr_x += window_xoffset * step; > > if (trc_func && c < 3) { > - for (int x = 0; x < xsize; x++, ptr_x += 4) { > + for (x = 0; x < xsize; x++, ptr_x += step) { > float f = av_int2float(bytestream_get_le32(&src)); > AV_WN32A(ptr_x, av_float2int(trc_func(f))); > } > } else if (one_gamma != 1.f) { > - for (int x = 0; x < xsize; x++, ptr_x += 4) { > + for (x = 0; x < xsize; x++, ptr_x += step) { > float f = av_int2float(bytestream_get_le32(&src)); > if (f > 0.0f && c < 3) /* avoid negative values */ > f = powf(f, one_gamma); > AV_WN32A(ptr_x, av_float2int(f)); > } > } else { > - for (int x = 0; x < xsize; x++, ptr_x += 4) > + for (x = 0; x < xsize; x++, ptr_x += step) Don't remove loop-scope for iterators. > AV_WN32A(ptr_x, bytestream_get_le32(&src)); > } > - memset(ptr_x, 0, axmax); > } else if (s->pixel_type == EXR_HALF) { > src = channel_buffer[c]; > > - // Zero out the start if xmin is not 0 > - memset(ptr, 0, bxmin); > - > // 16-bit > for (x = window_xoffset; x < xsize + window_xoffset; x++) { > int v = bytestream_get_le16(&src); > - AV_WN16(ptr + x * sizeof(uint16_t), v); > + AV_WN16(ptr + x * step, v); What values can step have here? > } > - memset(ptr + x * sizeof(uint16_t), 0, axmax); > } > > // Zero out the end if xmax+1 is not w > + memset(ptr + x * step, 0, axmax); > channel_buffer[c] += td->channel_line_size; > } > } > @@ -2054,8 +2047,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *picture, > if (!s->is_luma) { > avctx->pix_fmt = AV_PIX_FMT_GBRAPF16; > } else { > - /* todo: change this when a floating point pixel format with luma with alpha is implemented */ > - avctx->pix_fmt = AV_PIX_FMT_GBRAPF16; > + avctx->pix_fmt = AV_PIX_FMT_YAF16; > } > } else { > if (!s->is_luma) { > @@ -2071,8 +2063,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *picture, > if (!s->is_luma) { > avctx->pix_fmt = AV_PIX_FMT_GBRAPF32; > } else { > - /* todo: change this when a floating point pixel format with luma with alpha is implemented */ > - avctx->pix_fmt = AV_PIX_FMT_GBRAPF32; > + avctx->pix_fmt = AV_PIX_FMT_YAF32; > } > } else { > if (!s->is_luma) { > @@ -2151,11 +2142,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *picture, > if (!s->desc) > return AVERROR_INVALIDDATA; > > - if (s->desc->flags & AV_PIX_FMT_FLAG_PLANAR) { > - planes = s->desc->nb_components; > - } else { > - planes = 1; > - } > + planes = av_pix_fmt_count_planes(avctx->pix_fmt); > out_line_size = avctx->width * s->desc->comp[0].step; > > if (s->is_tile) { > diff --git a/tests/ref/fate/exr-ya-scanline-zip-half-12x8 b/tests/ref/fate/exr-ya-scanline-zip-half-12x8 > index 97ea715962..6c07f19846 100644 > --- a/tests/ref/fate/exr-ya-scanline-zip-half-12x8 > +++ b/tests/ref/fate/exr-ya-scanline-zip-half-12x8 > @@ -3,4 +3,4 @@ > #codec_id 0: rawvideo > #dimensions 0: 12x8 > #sar 0: 1/1 > -0, 0, 0, 1, 1536, 0x2b457bd2 > +0, 0, 0, 1, 1536, 0xa33f5f69 _______________________________________________ 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".