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 DC1AB46F1B for ; Sat, 22 Jul 2023 19:13:23 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4C57668C624; Sat, 22 Jul 2023 22:13:21 +0300 (EEST) Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03olkn2032.outbound.protection.outlook.com [40.92.59.32]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1F04068BF8B for ; Sat, 22 Jul 2023 22:13:15 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=M20xRWvh7HzQZN6qeWpdxye9oGcOlrSShCWeqJ6AZXgO+oXIqsAUtvNnEdDjTYNoA4bav6HBe5sfzMG3CDWDzzXjPIv29ZozpyuJTjYA8ngAr3b+C7yJnYI1TIAFm4qCOn2cCVpuki3B7WitkoWla3a6hWz2KOKEMqo2llY7PGuFmH5JkVrBynoG69hQfQCXKW+MYicjP3GLACxz8FAmzbbVQ7QFSdxmdbikzeOmZ+ewZjTv/k9b5wKTXmQMdXl3RwIlBxBf3bFMJZLY24EJ+xKg5nsUdxNSxZpIidP59urXHHE10CMhtCShKfzgYFgal2IleFfuz74n15m72oLGJw== 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=4eS4IUJwGd27yQ7b2gRQAhdIau7SDxzP/sWWCQpGQY4=; b=ahtFO3RUZEcExp7/wT0sOTEYY2KMFgBnDSgg1Uf1I706xoJ7UieIWlOOTHn34ZIylv0/it5/gCvfWRm3DQQ6BaU88nar3cM5oTyFdQHtGCeu23W5pM7UoQpDuOe68H8Sjr78sK10hx6rka603NnxWm0GealqLkfSsEmsymuag0oPZ+jjoWA8JeP1VRrUdoLJCkR3QcTOl5WOEubaMAshGIlyCiytp5Pgm/v/B07Lk/Zxqp4jJIc0rQf+VaGpE6ZY9xYv9hcbN3bOyNFvyF1QfWYWvNGFKDHyIMy+6BA8C67a2uQF6Q0SNDA98UU75VxMDwjO2dNYOt5wR8c8RjXldQ== 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=4eS4IUJwGd27yQ7b2gRQAhdIau7SDxzP/sWWCQpGQY4=; b=nefOfkOMhMNeioa6LVc8J55DGmhQEuCo1DNuZVeVV2ep/ygzFgLgVVluHsUU3ZMA5WdCvPpVwT6jA6Yr7l/Dld8dtlDGzOFuyxl1i9zg4m9cBktEgeUu153hjBT0UwIN5yHK8a/St7yZJFxc8Uz1gYXdLLUelrx7kBljYsb1IpK/CV/ln2/A8nuyFrZO9psfZ4ZFMfdDrVzV4TWiNI9cZY0bSO/KXf2NjXg4I23QraO9y/Rn/ahfPI9KJkJVwO1mex8hOrdhRx6CiUFGCes2LwivjclgfRbsSQYpChvXfFv1VCrC/USaNMLCzT2NwqPaZbEI9aO/WEtAnUxZipZN2A== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by AS8P250MB0218.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:379::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6609.30; Sat, 22 Jul 2023 19:13:13 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa%3]) with mapi id 15.20.6609.029; Sat, 22 Jul 2023 19:13:13 +0000 Message-ID: Date: Sat, 22 Jul 2023 21:14:24 +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: <20230722170357.964313-2-jc@kynesim.co.uk> X-TMN: [FHqGoxiNk8fezWBj9JoI27qEfkW9Fre/] X-ClientProxiedBy: FR3P281CA0106.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::16) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|AS8P250MB0218:EE_ X-MS-Office365-Filtering-Correlation-Id: 658c8d21-09d6-4bcd-b42f-08db8ae7b243 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: hGmGP/6T2JXv8e3GLRB4oluNApO/nJSIk19X2kWO05Qir+vlEZ7WS+lk90oVTVYIYDZ0Ujg7xFTKJbqSajj0FXywhP59g2k5pZ+GTwPBmy2Wr3Oh5DgvjFkeLhoj02mfN7M/ft+f/L67MWRNxc/tCj3Gf7FpScmm5DkKlevUGRmkV8Ehoiz5wYITG7fTdSlfYwduHWoB8rRRdODHJr+a2HQlV4Pv0aeDtBVZy/qi8iFtwm0p3PMNcF+0kGkngD3OY1X+m5beQHsnUXq/0Fn6bChedyWKu8MXZpV9SkEgWJgkk5LDmItSRJ20Gksh6oRZOE8ZdfWpMXoUJzKX74CSaWBlyHqy/fIwE3uTGPEXtRE7P3enm+2ujRHKyUeLY1DV4qYBelF6FuGRLkspTy8zRr5xVvYa1DaV4T7PKPB1telQPNpZwEL4Wjoff6TZLjYmY67Q+3r5EYGgNjw2uQmo2A2V2BySrdieDfiZPpx+/0gJnTBzP8XefiP5C8JNzLfIKuY2xuZp9Q6pWgBqlERN0q/bVRuobNYxLOjdJxQi9VXkPRWk67on9tgcwl1nXjjh X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?S3FIM1RoTTRGOXR3UmVpZEJHSXEybi9ldUdLNHVGSlMyZGNRMjJ2NnRPa283?= =?utf-8?B?Qi84YmtXQmtzSmF6dWV5U2J0bi9UdHVha3RRWnlST0czMDdxY3VXSTZnMnVj?= =?utf-8?B?NVdnU1RiTFNSWXlrbjU1cGNEaGVvVGZQd0psUWJqSlUyZ2ZyTVBmd2Ewekdq?= =?utf-8?B?cmRsTERuSklERWZTQzVGQlppM2pMQW9RTFBCTGZQU3NqZStzY0RDSjZCdDVP?= =?utf-8?B?bFM1YmlhY2duZGloNWJSZ1BYNmNnR1NHYzBEd2lTN2hCcDZhYUVZWFN4K2di?= =?utf-8?B?UEt2dngxTXo3bGNhRk9BSCtjczFXR3ErakFBQWtWbm80T2o2OUNidEV4ckxw?= =?utf-8?B?dGpwTnpCWkxDQzRFUVowWi83SkZNWXFoV0dDTDFBcDJ5M1gyZHl4dHV0QXUz?= =?utf-8?B?Rjh5dzVCTnBHdElmWGtPSE02Y3F5Sm5pMTV4ZDVTRWJoSHdiL2c5bitpakFj?= =?utf-8?B?a1N3TjNSL2UrWEVRWVZLRlpwV3lvajJ1QWJWS3hST2MzT2dwMnhhdHBvN3Js?= =?utf-8?B?cVpOMXV1M0ZLRDZrcE1KcFdCR0thdTNQSHNEZmMzd2JuTklPUjQwMG1lcGpV?= =?utf-8?B?SjlwdHJVVHo0VG9ZNEU3WEhqSWVlaGY1VUhnRWNEWXdxMURMUWdrOUpJTTF2?= =?utf-8?B?WkhmQk44RE1GMU55RStxNGJZQUF1R1BXS0RjTlR6V0lSaGRQaWhyRUt4eFpP?= =?utf-8?B?OE5Oc2ZIRDg1YWNJZ0ZYUUxiMzYxRktmczZHSVlxQzFPTGN6eFQ3UVRmWFVR?= =?utf-8?B?eTlVdU9jQk0rL2k0OWhFNk04OGlWaTVkOHcxNUZqWFppNVRDNWo2U3IrZWlR?= =?utf-8?B?ajVWSGpjT3JwT29zRXpnWTFXVGR0d1NzZ1I5UnBibzcwbWNuRS9jYkpKMVdE?= =?utf-8?B?ZzMzL25lUnBraDRYWVBKTkpjRjhDWFZMalZHRWZlMVZrY2FnTmFXOFN1YVVR?= =?utf-8?B?a0RSbStlNC82eE9pQVdOYThDRDZxWG5meXF0M2JTanBtQmFzNTlpTDFPWFQ3?= =?utf-8?B?Ky84SFlhNkZlMndTRGpqTklocFRVajdYY2M3ZThGbnpDZnZXYzZGQk5vbitj?= =?utf-8?B?VmlHYjlFL3VscGFqSUtSeXBhWFUzYU92c3RTSXhySFRIWllyMUx2ZVhDek9E?= =?utf-8?B?YlBPdnVldHc4VVNkWGVMektTY3RJZ2Q5VXBtc09qWldKWUdIL250U0pISm9Y?= =?utf-8?B?TVhEVWs0WFBMR0VwdHZ6YkNsbmRFTG1SaSsvRDdDQUc2Z0JPRXp0UFdIRUR5?= =?utf-8?B?SHgvR1A0cElCN3BkcitFVGNsVmpaNVBBcEFlTGJjSUF2NjJWRFdzUjFPV2dq?= =?utf-8?B?bDU3OUlYd1ZKbEFDMFJwcW8wdksxUmFFNzM3eVV0em9lVUlIWmZqN1NQbW12?= =?utf-8?B?S1RvQkRPT1QyNHhSNXRGNlA5cXRibExuSlhsS1hKaU9kbjQyOUdTWHdoZkxV?= =?utf-8?B?WjJaVGovQ2MyYzNtbFovanJjdkR4ZHliNXNLdmxtWkJKa090K201UENPUHJU?= =?utf-8?B?Um5FaE1nVXdMcGhXTTdHUExGc3NYeW9oYmJ1SDVFTWh6ZXczdjZ3MUE4aVBN?= =?utf-8?B?SEVMRlJLUklybFlOamhzTmhkQnlGZ05keU9VdWF4eXFSbWQvb05ucmNGTFpB?= =?utf-8?B?MnUwcVBidUp5UEV4Yk81clJWODVJb0thK0piSjhLTXY4ODM2NmdnMWQxeVlp?= =?utf-8?Q?b0Nh1a5wcJ+F8YnGyO3t?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 658c8d21-09d6-4bcd-b42f-08db8ae7b243 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jul 2023 19:13:13.7956 (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: AS8P250MB0218 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: > 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. - 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".