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 8579546F0C for ; Sun, 23 Jul 2023 08:31:02 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9E69268C698; Sun, 23 Jul 2023 11:30:59 +0300 (EEST) Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01olkn2024.outbound.protection.outlook.com [40.92.66.24]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CF0D368C562 for ; Sun, 23 Jul 2023 11:30:53 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Z5gefNrpBc9FPbbQ/Agsh9yVArvgDQzsfWuKxRxJ7jEmuQNYCYM5YlCE9DrNMRJv6haeqLnSe9gRcypjYI1p8IuS3nWvBjeFp3mGZxE7MQ+Er0lcAgNKnP1UHFLwCVrCwePOltfU9bPiZc4QUgz02G5dWrjFxB92BCIXsyqNm0zkStvSA/ojADs4tnOaL6gCGuj0DV/nkpsSnZjy2IHLjwbbhOcROb2f8x2Dj2UOyZC5McG6PHFPSl+VQk5wWpXhpobtrwidQJYQGgi86DDUMBFYcT2cxM3jSPd6lRpdPA9SFlgxz9UFqKF8iDIcE2PK3nIBQKegwdUjVM87hk/n9A== 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=7YJTtiUD6BhWdnwBU1Y484bdApvQ5BBsfVFi0xsd3vs=; b=mqxjx/RQ+AXDQ1wPISB8iRQ64kBG7ONgDcYQdh7rrstVez7UFf+ojH+RtFBIzzuLcWAYOBGqUUB1lmb2OkWbnyG05hwJNuaqqdNsmG1f4M+5kdy4wpFGU45L1ByPIg0DP5bMAlVghQDBMdu5ekYltEp7luhIzl2vzy26U6hxC7VrKpgwgZ1DYvb53fRqrflj2i6jrk8dNfYLys5ripOy/w94NmfIDjmOEtoXeZQJnKCdv9H7V5bkxZZlThnQSv8QAUTx7szLzaVz25ez/HKDuvROQwoinvpsPXkD4FqlGLJ5ab1Dz6eKIONfgwaI3mXOmI5gd6uh4faj18hzxkuQOQ== 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=7YJTtiUD6BhWdnwBU1Y484bdApvQ5BBsfVFi0xsd3vs=; b=LoGgTaUYiGR45l9RN3pUGP6zmSI+eS+wE4kCEGNuL0Y9gvG9wtc277gzNeYDZUCq2g7ThHNCdDYXJCiMbvVdvbuVEF9LMcyTGWtgEgY6s7+jyHN6C0GNCeQPFtGendI3VoSZBBKPJd9O5V1ZpPnBY/fn4N1cZmii6XeNs3yUlxgUaO35HAdhugGddp8DtjzwLUCghFH8KufzuX/6kZMDgWuCdZ68qiV6AnHfW/FX8CNjWo7l6NVu7ouu6xnQeHGrTxu8Dk6D5VaYIKZu831xUe+/V1JmSeD+dDNHCScxq/MR0uUazgNjt51Pwnwj0h0gZNe9k1bzr5mW5z+KqIsvLA== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by AS4P250MB0413.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:4c0::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6609.30; Sun, 23 Jul 2023 08:30:51 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::9bda:3062:4e88:521]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::9bda:3062:4e88:521%3]) with mapi id 15.20.6609.031; Sun, 23 Jul 2023 08:30:51 +0000 Message-ID: Date: Sun, 23 Jul 2023 10:32:02 +0200 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20230722170357.964313-1-jc@kynesim.co.uk> <20230722170357.964313-2-jc@kynesim.co.uk> From: Andreas Rheinhardt In-Reply-To: X-TMN: [iU2RrzngTG6AUjp/hdkc8Som9vzEkWF/] X-ClientProxiedBy: ZR0P278CA0032.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:1c::19) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <4081bb8e-23fa-9e2f-efa9-f65c432d756e@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|AS4P250MB0413:EE_ X-MS-Office365-Filtering-Correlation-Id: ad205230-909c-4261-4986-08db8b571fbc X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: GTpg0nb6GOMcUghus31lQZ8dFu5jyodLdbChqbVXECYG61gTWf7yqbnYCs8LAPDmOsGTSlLYuU0z4u9fcOqTMyPXPI2Go5vw/INlP4FDYg4Ox/3yJuOOD4dsA7m8IbA3l9TMtU5wCo/gXDbpuxqcswSF/QOPL5KNR6QAecTV94EfyT5dPhQXuS9kWLo5iK3Xf7nAjazSRRJgdMZGuwthr79lSWnRfhRHdxheDet9C3ifgi9IYy9zLu1I/m3z3/LYdL6PjoLEjU99olLCLAETPYCjYxSaJwTO5vc8eNVvJNT2Hso1iQ3vy7yw/5mYj7FVl1ZtYMH6GCIx3K121/INitr4ROhLY2yCVjiSJAP/n37hYGzch9Wgqyp9js+x4U7bFsDtmHjS1ZsF3yU3Kk5twv2VC4zm2+MHKVqDN0qu6jrdlgzQXx5fTlE6a2sQ7E7cKapkoh4+w/uh/z0rFF++7ywjprbudzngghvQxEVNE49pQte6ZQwRrW8yJpthxWB1GP+DZ0zdAX30daepmFveIB1cicj8v3jwMlC+BRb37adwX/xlx6z3EXuMjY3n8ubA X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Sk9hc09RNDVldzVyWUtjbXV6MWo3clMxR2VVL3dSeCtETzhHWXdXSllzZTda?= =?utf-8?B?WjhDZmYyclFmVzQ0NGh2cEV1ODY2ZFpKUkppYWFOZWtvdGdzWmFCRWViaGEv?= =?utf-8?B?c1J2eXRRVGN3YUxSYzBDMXFhRVFqRXdab3RVM1YwdU5TM0VXQldhaE1nZGFa?= =?utf-8?B?ZXdUc0NucExTZzhEa09QRTNOaUpyTVpvVDhyWFZ0d252VHVnZXJPYU5uQ2hh?= =?utf-8?B?VzVZUW9hNEFkRDlLMmF3Q1V6K0cwYUQ3c24yeW9yVG9OWkpxNCtkcHZLZEl0?= =?utf-8?B?aThMS2dHamdUa0g3eWJTL1dNZ0xYaWZXNXQ5WjNOTnR5QytyWGhncElTbnFa?= =?utf-8?B?eVM3VzhERzZrV2VwdC9CZUdDMzVmVFZOdGJ1aERtdUorNGRKZ2N4Rmp1c01i?= =?utf-8?B?OEUvMEIrb2NyN1IxSnh6UllWM05HRXRYN1dCV1VmSjRCNHB2OEJjMmVVRk9N?= =?utf-8?B?WXFGVjUrWWExYVU4KzNJNHdKTmZiQnc0dmtwNTgra0FRQ09KbEJzLyt2SzNl?= =?utf-8?B?SGw3dm03cS9XTzlaZ3NXSTE3VjAyTjExTTVnMFMvUjVDSDJuRW9kR2Y2V0pt?= =?utf-8?B?MFlnSFMwOHFmWDBQSm9HK0E2L2l3a0xLaVpOS011TWhQRVNHb3hHZEJ4SEFm?= =?utf-8?B?KzVpaWtDUnd4cEQyMVFMZFp4VU9NQjJtRWgycGE5SmVlTThZUzkxR3lvVGg5?= =?utf-8?B?Q2s4NE5HMHJKZTRwOWJTNkVjUUhkZE10V3N6MU54N0tzZEJXdzhxWUQ1d091?= =?utf-8?B?Q3cvcTJ0NGd4VVd0N0Jmb3psVU5NWGkyck5pUS9jajNyOWVMSGRsc2J4Smgv?= =?utf-8?B?dFM2SlpQQzVKZ0MxYktUT3o5ekl2bE1aWjJpTE5mcG05c01IMDZwekF3T3Vk?= =?utf-8?B?RW8xeWg3MCtWN21hR2FXNStNdVM5aXNPazZWTUhpTlR4Z21wNmswTTlFNS9a?= =?utf-8?B?ejNrc0ZvVWpqNzVPU3RlU0hhQ0dWYmR0TksyZEV4YTg0U3FLd0JnSkIrMmZ2?= =?utf-8?B?aEg0aGd3NW85RWNWSXlLcTNoQS9FVmdLRWIzQkVaS1cvdG4rcGpFVk9QL29k?= =?utf-8?B?ckVUQUFJMlE3aVlDQ3FZNTEwcUEwYXVKYWRLdzROdkNoUHowbXBBcXBHejhV?= =?utf-8?B?U0hxcGdEY3BaMXFJSDBseHUrQWxVcEQ2MkN2N0xzK09KSlF5STdWakVUandC?= =?utf-8?B?Z29TOWg3bVdpcWZoaC9mcWtZVkJwTkJQMlRMOU5HTG5pRWNLMzBUVG83QjBy?= =?utf-8?B?TjV3U0lPN0pjZDVLdE9oL0E3VExWOUNQeVlHanNQMWNtNENQdm5sMndFci9W?= =?utf-8?B?L0pPSk9ldEUyczQyakVySVJITnJxd0xmSE9lWkdSQXRFc0t4cDR5UlN6Rkhh?= =?utf-8?B?Sm12bkV6QVBKM3J3QTNjaWFURFdJL21KSGZaSFV0V2Y2SlYxV3ZGMnFsK0Fz?= =?utf-8?B?dFpYLzQzaS9rTWdRWG1QL0VrMmpwY0ZqYnQvampGcEozSHJLKzdpVnJXMlB4?= =?utf-8?B?a3NHV00vbkE0R0lEUXZJZy9sdkdqRWpTQXdiMTVUMkc4U0g2Vjhwa2JHWCtJ?= =?utf-8?B?UWhzditENDJieHpjQWxqYnFOdGwzN1FJbzlKSmNObFNPNXZoT3NtQzBoSW5k?= =?utf-8?B?aEZ4WGdQMzNHSlJ4VU85NWtUb0h3Ni9IV3hlUmozdjlneXJodnE2empidWJ2?= =?utf-8?Q?OALcsxiPcWzHqufXu8DQ?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ad205230-909c-4261-4986-08db8b571fbc X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2023 08:30:51.6763 (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: AS4P250MB0413 Subject: Re: [FFmpeg-devel] [PATCH v3 1/1] avfilter/buffersink: Add video frame allocation callback 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: John Cox: > On Sat, 22 Jul 2023 21:14:24 +0200, you wrote: > >> John Cox: >>> Add a callback to enable user allocation of video frames on the final >>> stage of a filter chain. >>> >>> Signed-off-by: John Cox >>> --- >>> libavfilter/buffersink.c | 21 +++++++++++++++++++++ >>> libavfilter/buffersink.h | 27 +++++++++++++++++++++++++++ >>> libavfilter/version.h | 2 +- >>> 3 files changed, 49 insertions(+), 1 deletion(-) >>> >>> diff --git a/libavfilter/buffersink.c b/libavfilter/buffersink.c >>> index 306c283f77..e99d444530 100644 >>> --- a/libavfilter/buffersink.c >>> +++ b/libavfilter/buffersink.c >>> @@ -62,6 +62,11 @@ typedef struct BufferSinkContext { >>> int sample_rates_size; >>> >>> AVFrame *peeked_frame; >>> + >>> + union { >>> + AVBuffersinkAllocVideoFrameFunc video; >>> + } alloc_cb; >>> + void * alloc_v; >>> } BufferSinkContext; >>> >>> #define NB_ITEMS(list) (list ## _size / sizeof(*list)) >>> @@ -154,6 +159,21 @@ int attribute_align_arg av_buffersink_get_samples(AVFilterContext *ctx, >>> return get_frame_internal(ctx, frame, 0, nb_samples); >>> } >>> >>> +static AVFrame *alloc_video_buffer(AVFilterLink *link, int w, int h) >>> +{ >>> + AVFilterContext *const ctx = link->dst; >>> + BufferSinkContext *const buf = ctx->priv; >>> + return buf->alloc_cb.video ? buf->alloc_cb.video(ctx, buf->alloc_v, w, h) : >>> + ff_default_get_video_buffer(link, w, h); >>> +} >>> + >>> +void av_buffersink_set_alloc_video_frame(AVFilterContext *ctx, AVBuffersinkAllocVideoFrameFunc cb, void *v) >>> +{ >>> + BufferSinkContext *const buf = ctx->priv; >>> + buf->alloc_cb.video = cb; >>> + buf->alloc_v = v; >>> +} >>> + >>> static av_cold int common_init(AVFilterContext *ctx) >>> { >>> BufferSinkContext *buf = ctx->priv; >>> @@ -381,6 +401,7 @@ static const AVFilterPad avfilter_vsink_buffer_inputs[] = { >>> { >>> .name = "default", >>> .type = AVMEDIA_TYPE_VIDEO, >>> + .get_buffer = {.video = alloc_video_buffer}, >>> }, >>> }; >>> >>> diff --git a/libavfilter/buffersink.h b/libavfilter/buffersink.h >>> index 64e08de53e..2419d1bd80 100644 >>> --- a/libavfilter/buffersink.h >>> +++ b/libavfilter/buffersink.h >>> @@ -166,6 +166,33 @@ int av_buffersink_get_frame(AVFilterContext *ctx, AVFrame *frame); >>> */ >>> int av_buffersink_get_samples(AVFilterContext *ctx, AVFrame *frame, int nb_samples); >>> >>> +/** >>> + * Callback from av_buffersink_set_alloc_video_frame to allocate >>> + * a frame >>> + * >>> + * @param ctx pointer to a context of the abuffersink AVFilter. >>> + * @param v opaque pointer passed to >>> + * av_buffersink_set_alloc_video_frame >>> + * @param w width of frame to allocate >>> + * @param height of frame to allocate >>> + * >>> + * @return >>> + * - The newly allocated frame >>> + * - NULL if error >>> + */ >>> +typedef AVFrame *(*AVBuffersinkAllocVideoFrameFunc)(AVFilterContext * ctx, void * v, int w, int h); >>> + >>> +/** >>> + * Set a video frame allocation method for buffersink >>> + * >>> + * @param ctx pointer to a context of the abuffersink AVFilter. >>> + * @param cb Callback to the allocation function. If set to NULL >>> + * then the default avfilter allocation function will >>> + * be used. >>> + * @param v Opaque to pass to the allocation function >>> + */ >>> +void av_buffersink_set_alloc_video_frame(AVFilterContext *ctx, AVBuffersinkAllocVideoFrameFunc cb, void * v); >>> + >>> /** >>> * @} >>> */ >>> diff --git a/libavfilter/version.h b/libavfilter/version.h >>> index c001693e3c..54950497be 100644 >>> --- a/libavfilter/version.h >>> +++ b/libavfilter/version.h >>> @@ -31,7 +31,7 @@ >>> >>> #include "version_major.h" >>> >>> -#define LIBAVFILTER_VERSION_MINOR 8 >>> +#define LIBAVFILTER_VERSION_MINOR 9 >>> #define LIBAVFILTER_VERSION_MICRO 102 >> >> Not commenting on the actual patch, but when bumping minor, you need to >> reset micro. > > To zero? or one? (I'm guessing 0) > 100 - 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".