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 092C242EDD for ; Wed, 10 Aug 2022 21:55:45 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4421B68B8D7; Thu, 11 Aug 2022 00:55:43 +0300 (EEST) Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-oln040092066100.outbound.protection.outlook.com [40.92.66.100]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C8C4C68B1E1 for ; Thu, 11 Aug 2022 00:55:36 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=To1jv1wRG482rXqDQa7vf9JslPDLb3NJyoNLCePwSv+AfYblj7S0Mce6lD6CN2RWS1OtFsYIeIYusUFv7nFTAdKApv7ztJQP+R5YsnW1bU9+lT+hOJ1NTXoRZFeVxbSi2O6riCoQDgWRfF9hXUuQirU0vQVwYFRsLRwI4V4A9SL4CzV4iDLqt/3TfkSb+tu9BB/uyjx+Ju27UJQHgyucKIDBiiDbbZ6xIPeeTSDAbKkbjQR37xsmobW/t03MmAAHIokEK/LvVSYQnjHc0P1Zoq4TSCb3hLHHPndgzK3bEvbYy/wBxiT5SKU5Estru4xlHlNp02dAxR6nkqbUgM7XTg== 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=6soEj4rN5/IGw4AhPlfbs6vrxu+x+Xg+nmzUBn7GfIA=; b=essqoPCGTC3scRb8Icdpt9BwD0tky5q0Q4GcUr88zvXQ7NGRK1IwZ0UKULHXRTgF5HNPi9Vk52FigUAt7iVaybio5+DD2GYqmFGoq9KOSodJKcQXx+B3F2H6ahaO43FJ8SWc9j6zKQrOKplUidZig3F5jUav/BegBRduewvIdg/dbyj+yVnN90N9qw3tRdYd71Be1qxi4uE1yl0dnBgPdxEejq2eiuk1yiuag5c3NT3s43QU9e9fxAF6Y8hecRWy4gB9QHPpKptOr2YSdkItLs1lZLc7EFSXrW+pFiDsIeSChPy5fstMd9t0JR9IFQZW5cn46MjZP3zVMurZi/SVlg== 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=6soEj4rN5/IGw4AhPlfbs6vrxu+x+Xg+nmzUBn7GfIA=; b=PP4b6pqa4yKoCbnzCKPpbrRZ3DauVi713fKwKAq4TZgEsuyxk1UveYnXChN7rwghDkG4w6CVhCkxxsCVcN0bTee3w6rVBroc4rd4WcyKN4ZUELbmLp+MiKLAs+hY3tnE7Fa3ebIb7Ka+f8OxSj7SYk7hWuy51X8kX3Ks9Ym+CT1o7XHZNKQLt+Z/LEndB58OmhRPkQ/4B8zKNwby1C/4sQ17jBICRyC7wWkCHwM92y0y0KpRBPYo/XrmYeN68o/+6KxifXkbtBYxTHIu2iwvrE8+oN2rgeEGnVSzXTkURVbvS/y+Zp8CUjO3R1IGq65PvqsZg4mdmJYQzSyanQVXlg== Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) by VI1PR0102MB2703.eurprd01.prod.exchangelabs.com (2603:10a6:802:f::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5504.17; Wed, 10 Aug 2022 21:55:34 +0000 Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::210e:b627:bcc9:8c46]) by DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::210e:b627:bcc9:8c46%11]) with mapi id 15.20.5504.020; Wed, 10 Aug 2022 21:55:34 +0000 Message-ID: Date: Wed, 10 Aug 2022 23:55:31 +0200 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20220810204712.3123-1-timo@rothenpieler.org> <20220810204712.3123-10-timo@rothenpieler.org> From: Andreas Rheinhardt In-Reply-To: <20220810204712.3123-10-timo@rothenpieler.org> X-TMN: [sOAMKxYbzZgcU6uxE3ZrWyb4RjUbghy2] X-ClientProxiedBy: ZR0P278CA0145.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:41::15) To DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) X-Microsoft-Original-Message-ID: <06ee9096-5479-be99-ff79-3c43900e8b82@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 37acc008-4f68-4650-85ec-08da7b1b0d05 X-MS-TrafficTypeDiagnostic: VI1PR0102MB2703:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Mwb4EEw+5FrZ/NxPaHY95D7H/oozcTE2tGMbkAnka/YdqjNZh0HmpNdJ+OAO8BilBcYFCzVk1zfHi4OngukHYYMRSzY973OB0xuyLDzsOnNwYd22YG6gBf0hlGTa/zyFn3aAcaDUG3l+CEF/nZhdEliUY62/a8cTS8AxElWZdc29HCm4mphmmVa9Ujba8S+RxJuaA8WsxxP+X3oWi6H3sX30eZPoEySNbzZ8PqNj2nFnsk/PBp+yiw2wPIUvAz9djdCN4xSVY3+eQJifMAMY7+m9BVa+7gZqMVZh4hMn7H5RmkiRrxyehGgzSRNVNKvlcM4bRI6fmsl2xEgyHhUcLrj8Rv+5wAlUXSed81C1qTIfMjYdv/Bdl74t7pvMBOJUswipKivl6ZEpjuNb2Zzj5r/qQq0sNgrtax1HiAzZoWrObtxU7ND0V1Ogb5cJgnQxAGvmhOihb0V747USxjdqr4YRuRilNAUX6xxPywwdd0YhP0RFT/cZQb0KsIgxd7aTHjieOT9TrVi5AW7D6UVDf8R5/BVCceQQXkg/DIRyddbOgzsygay74JYcbkcVAzsPMWHmsim06DPSaea+0tJb6wtmdpiWcNV0VSNEj3Rkmee7TiC/j/2lbRitf0hYhuNq0JTNGBzlZwMAreKXelk4tk2L2XcJeVoiM+zwuUuJQa93ECjW9L8b1dk1j+0432vY X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TUU0OTdXUml5MmVhVzg4eVVOa1lDSzE5TkZ0OXcwWFl6K1VscmZDUEs3cTlV?= =?utf-8?B?WGtoNWtlSVVBM2VXdUVoU1IvNHduNEgrNjgyNVJZUk9XdVoyYnMzYUpRcEpD?= =?utf-8?B?bGlMNU9iSC9hV0JjWjhkSStub0x2NjcvSXhuWmdMOXhjVHlVR1ovc0ROVjh2?= =?utf-8?B?Zy9yYkhRUDNNejF6WHlWcXBJdW9iMllkZ2JHa2tMb3REWDJiRzlIMmZ2N0l6?= =?utf-8?B?RDR2bStVanVWNEVVWGV0ZTJBV1YvRUtpUWdBbFFhSkRYa2tVaE5FM3BWSXNE?= =?utf-8?B?UlF0ZlpuRWNaeDhHV0NzZ2hjRCtaZXAvVktuSUc3ckxHQVJFOStMUkp6NkNx?= =?utf-8?B?c21vUzZvVWlJYVBDU0JTQ3lNZStoQUlicm5MYTFaUlp5TDJxMDR0R3dDdits?= =?utf-8?B?KzZ2Ry9BN3ZmNDlqSHYvTFM5aC9UbU5nTzdtbWJ0NmVPejAvblczaml6bjdP?= =?utf-8?B?cE5lQ2NxQ3cyYk5jNFl5MzFVZ1p4d0VOTDROVHRVQm5vMXhXZDRhTjE4VFBY?= =?utf-8?B?SVN1RmE1T1p5NVdEY3hPV2tGMjRoTlZvSVd5Y283VWFMSzhVOGl2dENpQ2Jh?= =?utf-8?B?eXRXWnFNWHRuL2kveWRxTm9aS2pwQ3Z1RGkzN28ySGhsN0RsYUJyWlFFREk4?= =?utf-8?B?a0MvWFo3RmY0OFdYNFJzdFRXcmVwUVVFUmR3cXRoNTZwc0hOdHlXcG1JOVFF?= =?utf-8?B?V1dNT2kyOXdQdE1nVTl0UnZoL3B4VFlyMWRRRHdYdGRCOUFzcjlUNjFoUytw?= =?utf-8?B?VDMyZE5EK2dtbjNSZTk1TW5tcmc4c2tGU21GOGRXdFJ6cHl2SjgvNGh0WDl1?= =?utf-8?B?dGxjaDN6SlNEd1JRbTJQS3Z6MVRrVzhma3poVno1T25yV0x1VFBMUERYTFpE?= =?utf-8?B?REZ6emhNbFJmVWVGOUxZMHQ5YjVxVmZreGpQait4WVNKWno5MFJ6ZzY1b01I?= =?utf-8?B?aFYzS1J1L21lY25mRCtHNmdEM1MzQWs1d0FiNzVYazFldGk2L3VieURQZEtM?= =?utf-8?B?UERGdTNCQkVvYUZ5cUVlYXFhcXZ5UWJpUFo3Um9FaGtUYW5zbGlHUC9ESkNj?= =?utf-8?B?NGpWK3hxdUs3a2ZiL0RjN3lqcHBhdEtqMlhXV1VjeDQ0K2x1QmxwTXF5dkp2?= =?utf-8?B?cjRNMlorUnArbE9xZjBCZ2NqK3ZrV3hRQ09tZEZxK0U0eUp0NCtBMXVrdmNj?= =?utf-8?B?dUlBOEVLdFp3MHRIazBEdHh0anpZNVlUZEJta2ZwY2lpbzJSYVBFV1Q1UWNp?= =?utf-8?B?SkZ0bHhUdXNmZVhUY0c0enpBdjAyMVdxdDlyRysyZXFCNTM3SUlna0JzVHhm?= =?utf-8?B?YWI1SUhTRGFrNUFudjA1WDI1SGFhRkViWDNyRFROZUhIQWluWWVaendsRU9K?= =?utf-8?B?a2Y2VmxoY2hma3VVOSs0UUF2d0NOTXJxeml3OEVBa3ExN2FueXczckQ0VXRU?= =?utf-8?B?MExaa2lDekQzNWdzVzIrNlZaUjZWSTB6TWZDVCtNYjV3eCtTNVpFWnJoZ0FK?= =?utf-8?B?M3BFZGRMRFRhWVhQcDJ2c3M0d0RsU3hSVC9HM21tejFFU3lHWnpWMVpOQUhh?= =?utf-8?B?ZmVJcjFWTTQ2WEg0NkhORG1tMEh4YzJVclFENmlvckV0V3hvMENtYmRLMTZ6?= =?utf-8?B?eEpsQmhRRnJiQVpYanBBbVR3V2JoL1JIdzBiU0VYZHMrVkFia3crY2l2SStj?= =?utf-8?B?MThIZThoZ0d1Z01nWVpCc3dTQ0poWXkwKzlBbGJtQTZPY1RiTDNqbzdHbGhE?= =?utf-8?Q?X/GqkOIyd5pHe6dcs4=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 37acc008-4f68-4650-85ec-08da7b1b0d05 X-MS-Exchange-CrossTenant-AuthSource: DB6PR0101MB2214.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Aug 2022 21:55:34.1645 (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: VI1PR0102MB2703 Subject: Re: [FFmpeg-devel] [PATCH 10/11] swscale: add SwsContext parameter to input functions 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: Timo Rothenpieler: > --- > libswscale/hscale.c | 12 +-- > libswscale/input.c | 149 ++++++++++++++++++---------------- > libswscale/swscale_internal.h | 17 ++-- > libswscale/x86/swscale.c | 13 +-- > 4 files changed, 106 insertions(+), 85 deletions(-) > > diff --git a/libswscale/hscale.c b/libswscale/hscale.c > index eca0635338..6789ce7540 100644 > --- a/libswscale/hscale.c > +++ b/libswscale/hscale.c > @@ -105,18 +105,18 @@ static int lum_convert(SwsContext *c, SwsFilterDescriptor *desc, int sliceY, int > uint8_t * dst = desc->dst->plane[0].line[i]; > > if (c->lumToYV12) { > - c->lumToYV12(dst, src[0], src[1], src[2], srcW, pal); > + c->lumToYV12(dst, src[0], src[1], src[2], srcW, pal, c->input_opaque); > } else if (c->readLumPlanar) { > - c->readLumPlanar(dst, src, srcW, c->input_rgb2yuv_table); > + c->readLumPlanar(dst, src, srcW, c->input_rgb2yuv_table, c->input_opaque); > } > > > if (desc->alpha) { > dst = desc->dst->plane[3].line[i]; > if (c->alpToYV12) { > - c->alpToYV12(dst, src[3], src[1], src[2], srcW, pal); > + c->alpToYV12(dst, src[3], src[1], src[2], srcW, pal, c->input_opaque); > } else if (c->readAlpPlanar) { > - c->readAlpPlanar(dst, src, srcW, NULL); > + c->readAlpPlanar(dst, src, srcW, NULL, c->input_opaque); > } > } > } > @@ -224,9 +224,9 @@ static int chr_convert(SwsContext *c, SwsFilterDescriptor *desc, int sliceY, int > uint8_t * dst1 = desc->dst->plane[1].line[i]; > uint8_t * dst2 = desc->dst->plane[2].line[i]; > if (c->chrToYV12) { > - c->chrToYV12(dst1, dst2, src[0], src[1], src[2], srcW, pal); > + c->chrToYV12(dst1, dst2, src[0], src[1], src[2], srcW, pal, c->input_opaque); > } else if (c->readChrPlanar) { > - c->readChrPlanar(dst1, dst2, src, srcW, c->input_rgb2yuv_table); > + c->readChrPlanar(dst1, dst2, src, srcW, c->input_rgb2yuv_table, c->input_opaque); > } > } > return sliceH; > diff --git a/libswscale/input.c b/libswscale/input.c > index 68abc4d62c..36ef1e43ac 100644 > --- a/libswscale/input.c > +++ b/libswscale/input.c > @@ -88,7 +88,7 @@ rgb64ToUV_half_c_template(uint16_t *dstU, uint16_t *dstV, > > #define rgb64funcs(pattern, BE_LE, origin) \ > static void pattern ## 64 ## BE_LE ## ToY_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused0, const uint8_t *unused1,\ > - int width, uint32_t *rgb2yuv) \ > + int width, uint32_t *rgb2yuv, void *opq) \ > { \ > const uint16_t *src = (const uint16_t *) _src; \ > uint16_t *dst = (uint16_t *) _dst; \ > @@ -97,7 +97,7 @@ static void pattern ## 64 ## BE_LE ## ToY_c(uint8_t *_dst, const uint8_t *_src, > \ > static void pattern ## 64 ## BE_LE ## ToUV_c(uint8_t *_dstU, uint8_t *_dstV, \ > const uint8_t *unused0, const uint8_t *_src1, const uint8_t *_src2, \ > - int width, uint32_t *rgb2yuv) \ > + int width, uint32_t *rgb2yuv, void *opq) \ > { \ > const uint16_t *src1 = (const uint16_t *) _src1, \ > *src2 = (const uint16_t *) _src2; \ > @@ -107,7 +107,7 @@ static void pattern ## 64 ## BE_LE ## ToUV_c(uint8_t *_dstU, uint8_t *_dstV, \ > \ > static void pattern ## 64 ## BE_LE ## ToUV_half_c(uint8_t *_dstU, uint8_t *_dstV, \ > const uint8_t *unused0, const uint8_t *_src1, const uint8_t *_src2, \ > - int width, uint32_t *rgb2yuv) \ > + int width, uint32_t *rgb2yuv, void *opq) \ > { \ > const uint16_t *src1 = (const uint16_t *) _src1, \ > *src2 = (const uint16_t *) _src2; \ > @@ -192,7 +192,8 @@ static void pattern ## 48 ## BE_LE ## ToY_c(uint8_t *_dst, \ > const uint8_t *_src, \ > const uint8_t *unused0, const uint8_t *unused1,\ > int width, \ > - uint32_t *rgb2yuv) \ > + uint32_t *rgb2yuv, \ > + void *opq) \ > { \ > const uint16_t *src = (const uint16_t *)_src; \ > uint16_t *dst = (uint16_t *)_dst; \ > @@ -205,7 +206,8 @@ static void pattern ## 48 ## BE_LE ## ToUV_c(uint8_t *_dstU, \ > const uint8_t *_src1, \ > const uint8_t *_src2, \ > int width, \ > - uint32_t *rgb2yuv) \ > + uint32_t *rgb2yuv, \ > + void *opq) \ > { \ > const uint16_t *src1 = (const uint16_t *)_src1, \ > *src2 = (const uint16_t *)_src2; \ > @@ -220,7 +222,8 @@ static void pattern ## 48 ## BE_LE ## ToUV_half_c(uint8_t *_dstU, \ > const uint8_t *_src1, \ > const uint8_t *_src2, \ > int width, \ > - uint32_t *rgb2yuv) \ > + uint32_t *rgb2yuv, \ > + void *opq) \ > { \ > const uint16_t *src1 = (const uint16_t *)_src1, \ > *src2 = (const uint16_t *)_src2; \ > @@ -345,7 +348,7 @@ static av_always_inline void rgb16_32ToUV_half_c_template(int16_t *dstU, > #define rgb16_32_wrapper(fmt, name, shr, shg, shb, shp, maskr, \ > maskg, maskb, rsh, gsh, bsh, S) \ > static void name ## ToY_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, \ > - int width, uint32_t *tab) \ > + int width, uint32_t *tab, void *opq) \ > { \ > rgb16_32ToY_c_template((int16_t*)dst, src, width, fmt, shr, shg, shb, shp, \ > maskr, maskg, maskb, rsh, gsh, bsh, S, tab); \ > @@ -353,7 +356,7 @@ static void name ## ToY_c(uint8_t *dst, const uint8_t *src, const uint8_t *unuse > \ > static void name ## ToUV_c(uint8_t *dstU, uint8_t *dstV, \ > const uint8_t *unused0, const uint8_t *src, const uint8_t *dummy, \ > - int width, uint32_t *tab) \ > + int width, uint32_t *tab, void *opq) \ > { \ > rgb16_32ToUV_c_template((int16_t*)dstU, (int16_t*)dstV, src, width, fmt, \ > shr, shg, shb, shp, \ > @@ -363,7 +366,7 @@ static void name ## ToUV_c(uint8_t *dstU, uint8_t *dstV, \ > static void name ## ToUV_half_c(uint8_t *dstU, uint8_t *dstV, \ > const uint8_t *unused0, const uint8_t *src, \ > const uint8_t *dummy, \ > - int width, uint32_t *tab) \ > + int width, uint32_t *tab, void *opq) \ > { \ > rgb16_32ToUV_half_c_template((int16_t*)dstU, (int16_t*)dstV, src, width, fmt, \ > shr, shg, shb, shp, \ > @@ -392,7 +395,7 @@ rgb16_32_wrapper(AV_PIX_FMT_X2BGR10LE, bgr30le, 0, 6, 16, 0, 0x3FF, 0xFFC00, 0x3 > > static void gbr24pToUV_half_c(uint8_t *_dstU, uint8_t *_dstV, > const uint8_t *gsrc, const uint8_t *bsrc, const uint8_t *rsrc, > - int width, uint32_t *rgb2yuv) > + int width, uint32_t *rgb2yuv, void *opq) > { > uint16_t *dstU = (uint16_t *)_dstU; > uint16_t *dstV = (uint16_t *)_dstV; > @@ -411,7 +414,7 @@ static void gbr24pToUV_half_c(uint8_t *_dstU, uint8_t *_dstV, > } > > static void rgba64leToA_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused1, > - const uint8_t *unused2, int width, uint32_t *unused) > + const uint8_t *unused2, int width, uint32_t *unused, void *opq) > { > int16_t *dst = (int16_t *)_dst; > const uint16_t *src = (const uint16_t *)_src; > @@ -421,7 +424,7 @@ static void rgba64leToA_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unu > } > > static void rgba64beToA_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused1, > - const uint8_t *unused2, int width, uint32_t *unused) > + const uint8_t *unused2, int width, uint32_t *unused, void *opq) > { > int16_t *dst = (int16_t *)_dst; > const uint16_t *src = (const uint16_t *)_src; > @@ -430,7 +433,8 @@ static void rgba64beToA_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unu > dst[i] = AV_RB16(src + 4 * i + 3); > } > > -static void abgrToA_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, uint32_t *unused) > +static void abgrToA_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, > + const uint8_t *unused2, int width, uint32_t *unused, void *opq) > { > int16_t *dst = (int16_t *)_dst; > int i; > @@ -439,7 +443,8 @@ static void abgrToA_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, > } > } > > -static void rgbaToA_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, uint32_t *unused) > +static void rgbaToA_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, > + const uint8_t *unused2, int width, uint32_t *unused, void *opq) > { > int16_t *dst = (int16_t *)_dst; > int i; > @@ -448,7 +453,8 @@ static void rgbaToA_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, > } > } > > -static void palToA_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, uint32_t *pal) > +static void palToA_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, > + const uint8_t *unused2, int width, uint32_t *pal, void *opq) > { > int16_t *dst = (int16_t *)_dst; > int i; > @@ -459,7 +465,8 @@ static void palToA_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, > } > } > > -static void palToY_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, uint32_t *pal) > +static void palToY_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, > + const uint8_t *unused2, int width, uint32_t *pal, void *opq) > { > int16_t *dst = (int16_t *)_dst; > int i; > @@ -471,8 +478,8 @@ static void palToY_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, > } > > static void palToUV_c(uint8_t *_dstU, uint8_t *_dstV, > - const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2, > - int width, uint32_t *pal) > + const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2, > + int width, uint32_t *pal, void *opq) > { > uint16_t *dstU = (uint16_t *)_dstU; > int16_t *dstV = (int16_t *)_dstV; > @@ -486,7 +493,8 @@ static void palToUV_c(uint8_t *_dstU, uint8_t *_dstV, > } > } > > -static void monowhite2Y_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, uint32_t *unused) > +static void monowhite2Y_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, > + const uint8_t *unused2, int width, uint32_t *unused, void *opq) > { > int16_t *dst = (int16_t *)_dst; > int i, j; > @@ -503,7 +511,8 @@ static void monowhite2Y_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unus > } > } > > -static void monoblack2Y_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, uint32_t *unused) > +static void monoblack2Y_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, > + const uint8_t *unused2, int width, uint32_t *unused, void *opq) > { > int16_t *dst = (int16_t *)_dst; > int i, j; > @@ -520,8 +529,8 @@ static void monoblack2Y_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unus > } > } > > -static void yuy2ToY_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, > - uint32_t *unused) > +static void yuy2ToY_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, > + uint32_t *unused, void *opq) > { > int i; > for (i = 0; i < width; i++) > @@ -529,7 +538,7 @@ static void yuy2ToY_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, > } > > static void yuy2ToUV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src1, > - const uint8_t *src2, int width, uint32_t *unused) > + const uint8_t *src2, int width, uint32_t *unused, void *opq) > { > int i; > for (i = 0; i < width; i++) { > @@ -540,7 +549,7 @@ static void yuy2ToUV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, con > } > > static void yvy2ToUV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src1, > - const uint8_t *src2, int width, uint32_t *unused) > + const uint8_t *src2, int width, uint32_t *unused, void *opq) > { > int i; > for (i = 0; i < width; i++) { > @@ -551,7 +560,7 @@ static void yvy2ToUV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, con > } > > static void y210le_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src, > - const uint8_t *unused1, int width, uint32_t *unused2) > + const uint8_t *unused1, int width, uint32_t *unused2, void *opq) > { > int i; > for (i = 0; i < width; i++) { > @@ -561,7 +570,7 @@ static void y210le_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, co > } > > static void y210le_Y_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, > - const uint8_t *unused1, int width, uint32_t *unused2) > + const uint8_t *unused1, int width, uint32_t *unused2, void *opq) > { > int i; > for (i = 0; i < width; i++) > @@ -569,7 +578,7 @@ static void y210le_Y_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, > } > > static void bswap16Y_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused1, const uint8_t *unused2, int width, > - uint32_t *unused) > + uint32_t *unused, void *opq) > { > int i; > const uint16_t *src = (const uint16_t *)_src; > @@ -579,7 +588,7 @@ static void bswap16Y_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused > } > > static void bswap16UV_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused0, const uint8_t *_src1, > - const uint8_t *_src2, int width, uint32_t *unused) > + const uint8_t *_src2, int width, uint32_t *unused, void *opq) > { > int i; > const uint16_t *src1 = (const uint16_t *)_src1, > @@ -592,7 +601,7 @@ static void bswap16UV_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused0, > } > > static void read_ya16le_gray_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, > - uint32_t *unused) > + uint32_t *unused, void *opq) > { > int i; > for (i = 0; i < width; i++) > @@ -600,7 +609,7 @@ static void read_ya16le_gray_c(uint8_t *dst, const uint8_t *src, const uint8_t * > } > > static void read_ya16le_alpha_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, > - uint32_t *unused) > + uint32_t *unused, void *opq) > { > int i; > for (i = 0; i < width; i++) > @@ -608,7 +617,7 @@ static void read_ya16le_alpha_c(uint8_t *dst, const uint8_t *src, const uint8_t > } > > static void read_ya16be_gray_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, > - uint32_t *unused) > + uint32_t *unused, void *opq) > { > int i; > for (i = 0; i < width; i++) > @@ -616,7 +625,7 @@ static void read_ya16be_gray_c(uint8_t *dst, const uint8_t *src, const uint8_t * > } > > static void read_ya16be_alpha_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, > - uint32_t *unused) > + uint32_t *unused, void *opq) > { > int i; > for (i = 0; i < width; i++) > @@ -624,7 +633,7 @@ static void read_ya16be_alpha_c(uint8_t *dst, const uint8_t *src, const uint8_t > } > > static void read_ayuv64le_Y_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width, > - uint32_t *unused2) > + uint32_t *unused2, void *opq) > { > int i; > for (i = 0; i < width; i++) > @@ -633,7 +642,7 @@ static void read_ayuv64le_Y_c(uint8_t *dst, const uint8_t *src, const uint8_t *u > > > static void read_ayuv64le_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src, > - const uint8_t *unused1, int width, uint32_t *unused2) > + const uint8_t *unused1, int width, uint32_t *unused2, void *opq) > { > int i; > for (i = 0; i < width; i++) { > @@ -643,7 +652,7 @@ static void read_ayuv64le_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unus > } > > static void read_ayuv64le_A_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width, > - uint32_t *unused2) > + uint32_t *unused2, void *opq) > { > int i; > for (i = 0; i < width; i++) > @@ -651,7 +660,7 @@ static void read_ayuv64le_A_c(uint8_t *dst, const uint8_t *src, const uint8_t *u > } > > static void read_vuya_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src, > - const uint8_t *unused1, int width, uint32_t *unused2) > + const uint8_t *unused1, int width, uint32_t *unused2, void *opq) > { > int i; > for (i = 0; i < width; i++) { > @@ -661,7 +670,7 @@ static void read_vuya_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, > } > > static void read_vuya_Y_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width, > - uint32_t *unused2) > + uint32_t *unused2, void *opq) > { > int i; > for (i = 0; i < width; i++) > @@ -669,7 +678,7 @@ static void read_vuya_Y_c(uint8_t *dst, const uint8_t *src, const uint8_t *unuse > } > > static void read_vuya_A_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width, > - uint32_t *unused2) > + uint32_t *unused2, void *opq) > { > int i; > for (i = 0; i < width; i++) > @@ -679,7 +688,7 @@ static void read_vuya_A_c(uint8_t *dst, const uint8_t *src, const uint8_t *unuse > /* This is almost identical to the previous, end exists only because > * yuy2ToY/UV)(dst, src + 1, ...) would have 100% unaligned accesses. */ > static void uyvyToY_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, > - uint32_t *unused) > + uint32_t *unused, void *opq) > { > int i; > for (i = 0; i < width; i++) > @@ -687,7 +696,7 @@ static void uyvyToY_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, > } > > static void uyvyToUV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src1, > - const uint8_t *src2, int width, uint32_t *unused) > + const uint8_t *src2, int width, uint32_t *unused, void *opq) > { > int i; > for (i = 0; i < width; i++) { > @@ -709,20 +718,20 @@ static av_always_inline void nvXXtoUV_c(uint8_t *dst1, uint8_t *dst2, > > static void nv12ToUV_c(uint8_t *dstU, uint8_t *dstV, > const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2, > - int width, uint32_t *unused) > + int width, uint32_t *unused, void *opq) > { > nvXXtoUV_c(dstU, dstV, src1, width); > } > > static void nv21ToUV_c(uint8_t *dstU, uint8_t *dstV, > const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2, > - int width, uint32_t *unused) > + int width, uint32_t *unused, void *opq) > { > nvXXtoUV_c(dstV, dstU, src1, width); > } > > static void p010LEToY_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, > - const uint8_t *unused2, int width, uint32_t *unused) > + const uint8_t *unused2, int width, uint32_t *unused, void *opq) > { > int i; > for (i = 0; i < width; i++) { > @@ -731,7 +740,7 @@ static void p010LEToY_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1 > } > > static void p010BEToY_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, > - const uint8_t *unused2, int width, uint32_t *unused) > + const uint8_t *unused2, int width, uint32_t *unused, void *opq) > { > int i; > for (i = 0; i < width; i++) { > @@ -741,7 +750,7 @@ static void p010BEToY_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1 > > static void p010LEToUV_c(uint8_t *dstU, uint8_t *dstV, > const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2, > - int width, uint32_t *unused) > + int width, uint32_t *unused, void *opq) > { > int i; > for (i = 0; i < width; i++) { > @@ -751,8 +760,8 @@ static void p010LEToUV_c(uint8_t *dstU, uint8_t *dstV, > } > > static void p010BEToUV_c(uint8_t *dstU, uint8_t *dstV, > - const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2, > - int width, uint32_t *unused) > + const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2, > + int width, uint32_t *unused, void *opq) > { > int i; > for (i = 0; i < width; i++) { > @@ -762,8 +771,8 @@ static void p010BEToUV_c(uint8_t *dstU, uint8_t *dstV, > } > > static void p016LEToUV_c(uint8_t *dstU, uint8_t *dstV, > - const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2, > - int width, uint32_t *unused) > + const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2, > + int width, uint32_t *unused, void *opq) > { > int i; > for (i = 0; i < width; i++) { > @@ -773,8 +782,8 @@ static void p016LEToUV_c(uint8_t *dstU, uint8_t *dstV, > } > > static void p016BEToUV_c(uint8_t *dstU, uint8_t *dstV, > - const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2, > - int width, uint32_t *unused) > + const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2, > + int width, uint32_t *unused, void *opq) > { > int i; > for (i = 0; i < width; i++) { > @@ -786,7 +795,7 @@ static void p016BEToUV_c(uint8_t *dstU, uint8_t *dstV, > #define input_pixel(pos) (isBE(origin) ? AV_RB16(pos) : AV_RL16(pos)) > > static void bgr24ToY_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, > - int width, uint32_t *rgb2yuv) > + int width, uint32_t *rgb2yuv, void *opq) > { > int16_t *dst = (int16_t *)_dst; > int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX]; > @@ -801,7 +810,7 @@ static void bgr24ToY_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1 > } > > static void bgr24ToUV_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused0, const uint8_t *src1, > - const uint8_t *src2, int width, uint32_t *rgb2yuv) > + const uint8_t *src2, int width, uint32_t *rgb2yuv, void *opq) > { > int16_t *dstU = (int16_t *)_dstU; > int16_t *dstV = (int16_t *)_dstV; > @@ -820,7 +829,7 @@ static void bgr24ToUV_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused0, > } > > static void bgr24ToUV_half_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused0, const uint8_t *src1, > - const uint8_t *src2, int width, uint32_t *rgb2yuv) > + const uint8_t *src2, int width, uint32_t *rgb2yuv, void *opq) > { > int16_t *dstU = (int16_t *)_dstU; > int16_t *dstV = (int16_t *)_dstV; > @@ -839,7 +848,7 @@ static void bgr24ToUV_half_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unus > } > > static void rgb24ToY_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, > - uint32_t *rgb2yuv) > + uint32_t *rgb2yuv, void *opq) > { > int16_t *dst = (int16_t *)_dst; > int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX]; > @@ -854,7 +863,7 @@ static void rgb24ToY_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1 > } > > static void rgb24ToUV_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused0, const uint8_t *src1, > - const uint8_t *src2, int width, uint32_t *rgb2yuv) > + const uint8_t *src2, int width, uint32_t *rgb2yuv, void *opq) > { > int16_t *dstU = (int16_t *)_dstU; > int16_t *dstV = (int16_t *)_dstV; > @@ -873,7 +882,7 @@ static void rgb24ToUV_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused0, > } > > static void rgb24ToUV_half_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused0, const uint8_t *src1, > - const uint8_t *src2, int width, uint32_t *rgb2yuv) > + const uint8_t *src2, int width, uint32_t *rgb2yuv, void *opq) > { > int16_t *dstU = (int16_t *)_dstU; > int16_t *dstV = (int16_t *)_dstV; > @@ -891,7 +900,7 @@ static void rgb24ToUV_half_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unus > } > } > > -static void planar_rgb_to_y(uint8_t *_dst, const uint8_t *src[4], int width, int32_t *rgb2yuv) > +static void planar_rgb_to_y(uint8_t *_dst, const uint8_t *src[4], int width, int32_t *rgb2yuv, void *opq) > { > uint16_t *dst = (uint16_t *)_dst; > int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX]; > @@ -905,7 +914,7 @@ static void planar_rgb_to_y(uint8_t *_dst, const uint8_t *src[4], int width, int > } > } > > -static void planar_rgb_to_a(uint8_t *_dst, const uint8_t *src[4], int width, int32_t *unused) > +static void planar_rgb_to_a(uint8_t *_dst, const uint8_t *src[4], int width, int32_t *unused, void *opq) > { > uint16_t *dst = (uint16_t *)_dst; > int i; > @@ -913,7 +922,7 @@ static void planar_rgb_to_a(uint8_t *_dst, const uint8_t *src[4], int width, int > dst[i] = src[3][i] << 6; > } > > -static void planar_rgb_to_uv(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *src[4], int width, int32_t *rgb2yuv) > +static void planar_rgb_to_uv(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *src[4], int width, int32_t *rgb2yuv, void *opq) > { > uint16_t *dstU = (uint16_t *)_dstU; > uint16_t *dstV = (uint16_t *)_dstV; > @@ -1049,24 +1058,27 @@ static av_always_inline void grayf32ToY16_c(uint8_t *_dst, const uint8_t *_src, > > #define rgb9plus_planar_funcs_endian(nbits, endian_name, endian) \ > static void planar_rgb##nbits##endian_name##_to_y(uint8_t *dst, const uint8_t *src[4], \ > - int w, int32_t *rgb2yuv) \ > + int w, int32_t *rgb2yuv, void *opq) \ > { \ > planar_rgb16_to_y(dst, src, w, nbits, endian, rgb2yuv); \ > } \ > static void planar_rgb##nbits##endian_name##_to_uv(uint8_t *dstU, uint8_t *dstV, \ > - const uint8_t *src[4], int w, int32_t *rgb2yuv) \ > + const uint8_t *src[4], int w, int32_t *rgb2yuv, \ > + void *opq) \ > { \ > planar_rgb16_to_uv(dstU, dstV, src, w, nbits, endian, rgb2yuv); \ > } \ > > #define rgb9plus_planar_transparency_funcs(nbits) \ > static void planar_rgb##nbits##le_to_a(uint8_t *dst, const uint8_t *src[4], \ > - int w, int32_t *rgb2yuv) \ > + int w, int32_t *rgb2yuv, \ > + void *opq) \ > { \ > planar_rgb16_to_a(dst, src, w, nbits, 0, rgb2yuv); \ > } \ > static void planar_rgb##nbits##be_to_a(uint8_t *dst, const uint8_t *src[4], \ > - int w, int32_t *rgb2yuv) \ > + int w, int32_t *rgb2yuv, \ > + void *opq) \ > { \ > planar_rgb16_to_a(dst, src, w, nbits, 1, rgb2yuv); \ > } > @@ -1087,23 +1099,24 @@ rgb9plus_planar_transparency_funcs(16) > > #define rgbf32_planar_funcs_endian(endian_name, endian) \ > static void planar_rgbf32##endian_name##_to_y(uint8_t *dst, const uint8_t *src[4], \ > - int w, int32_t *rgb2yuv) \ > + int w, int32_t *rgb2yuv, void *opq) \ > { \ > planar_rgbf32_to_y(dst, src, w, endian, rgb2yuv); \ > } \ > static void planar_rgbf32##endian_name##_to_uv(uint8_t *dstU, uint8_t *dstV, \ > - const uint8_t *src[4], int w, int32_t *rgb2yuv) \ > + const uint8_t *src[4], int w, int32_t *rgb2yuv, \ > + void *opq) \ > { \ > planar_rgbf32_to_uv(dstU, dstV, src, w, endian, rgb2yuv); \ > } \ > static void planar_rgbf32##endian_name##_to_a(uint8_t *dst, const uint8_t *src[4], \ > - int w, int32_t *rgb2yuv) \ > + int w, int32_t *rgb2yuv, void *opq) \ > { \ > planar_rgbf32_to_a(dst, src, w, endian, rgb2yuv); \ > } \ > static void grayf32##endian_name##ToY16_c(uint8_t *dst, const uint8_t *src, \ > const uint8_t *unused1, const uint8_t *unused2, \ > - int width, uint32_t *unused) \ > + int width, uint32_t *unused, void *opq) \ > { \ > grayf32ToY16_c(dst, src, unused1, unused2, width, endian, unused); \ > } > diff --git a/libswscale/swscale_internal.h b/libswscale/swscale_internal.h > index e118b54457..9ab542933f 100644 > --- a/libswscale/swscale_internal.h > +++ b/libswscale/swscale_internal.h > @@ -559,26 +559,31 @@ typedef struct SwsContext { > yuv2packedX_fn yuv2packedX; > yuv2anyX_fn yuv2anyX; > > + /// Opaque data pointer passed to all input functions. > + void *input_opaque; > + > /// Unscaled conversion of luma plane to YV12 for horizontal scaler. > void (*lumToYV12)(uint8_t *dst, const uint8_t *src, const uint8_t *src2, const uint8_t *src3, > - int width, uint32_t *pal); > + int width, uint32_t *pal, void *opq); > /// Unscaled conversion of alpha plane to YV12 for horizontal scaler. > void (*alpToYV12)(uint8_t *dst, const uint8_t *src, const uint8_t *src2, const uint8_t *src3, > - int width, uint32_t *pal); > + int width, uint32_t *pal, void *opq); > /// Unscaled conversion of chroma planes to YV12 for horizontal scaler. > void (*chrToYV12)(uint8_t *dstU, uint8_t *dstV, > const uint8_t *src1, const uint8_t *src2, const uint8_t *src3, > - int width, uint32_t *pal); > + int width, uint32_t *pal, void *opq); > > /** > * Functions to read planar input, such as planar RGB, and convert > * internally to Y/UV/A. > */ > /** @{ */ > - void (*readLumPlanar)(uint8_t *dst, const uint8_t *src[4], int width, int32_t *rgb2yuv); > + void (*readLumPlanar)(uint8_t *dst, const uint8_t *src[4], int width, int32_t *rgb2yuv, > + void *opq); > void (*readChrPlanar)(uint8_t *dstU, uint8_t *dstV, const uint8_t *src[4], > - int width, int32_t *rgb2yuv); > - void (*readAlpPlanar)(uint8_t *dst, const uint8_t *src[4], int width, int32_t *rgb2yuv); > + int width, int32_t *rgb2yuv, void *opq); > + void (*readAlpPlanar)(uint8_t *dst, const uint8_t *src[4], int width, int32_t *rgb2yuv, > + void *opq); > /** @} */ > > /** > diff --git a/libswscale/x86/swscale.c b/libswscale/x86/swscale.c > index 628f12137c..270798ba3d 100644 > --- a/libswscale/x86/swscale.c > +++ b/libswscale/x86/swscale.c > @@ -299,13 +299,13 @@ VSCALE_FUNCS(avx, avx); > #define INPUT_Y_FUNC(fmt, opt) \ > void ff_ ## fmt ## ToY_ ## opt(uint8_t *dst, const uint8_t *src, \ > const uint8_t *unused1, const uint8_t *unused2, \ > - int w, uint32_t *unused) > + int w, uint32_t *unused, void *opq) > #define INPUT_UV_FUNC(fmt, opt) \ > void ff_ ## fmt ## ToUV_ ## opt(uint8_t *dstU, uint8_t *dstV, \ > const uint8_t *unused0, \ > const uint8_t *src1, \ > const uint8_t *src2, \ > - int w, uint32_t *unused) > + int w, uint32_t *unused, void *opq) > #define INPUT_FUNC(fmt, opt) \ > INPUT_Y_FUNC(fmt, opt); \ > INPUT_UV_FUNC(fmt, opt) > @@ -373,15 +373,18 @@ YUV2GBRP_DECL(avx2); > > #define INPUT_PLANAR_RGB_Y_FN_DECL(fmt, opt) \ > void ff_planar_##fmt##_to_y_##opt(uint8_t *dst, \ > - const uint8_t *src[4], int w, int32_t *rgb2yuv) > + const uint8_t *src[4], int w, int32_t *rgb2yuv, \ > + void *opq) > > #define INPUT_PLANAR_RGB_UV_FN_DECL(fmt, opt) \ > void ff_planar_##fmt##_to_uv_##opt(uint8_t *dstU, uint8_t *dstV, \ > - const uint8_t *src[4], int w, int32_t *rgb2yuv) > + const uint8_t *src[4], int w, int32_t *rgb2yuv, \ > + void *opq) > > #define INPUT_PLANAR_RGB_A_FN_DECL(fmt, opt) \ > void ff_planar_##fmt##_to_a_##opt(uint8_t *dst, \ > - const uint8_t *src[4], int w, int32_t *rgb2yuv) > + const uint8_t *src[4], int w, int32_t *rgb2yuv, \ > + void *opq) > > > #define INPUT_PLANAR_RGBXX_A_DECL(fmt, opt) \ Don't you need to update the assembly, too? (Do we support anything x86 where the callee has to clean up the stack?) - Andreas _______________________________________________ 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".