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 2AAC74687C for ; Sat, 22 Jul 2023 18:54:16 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DD32A68C59C; Sat, 22 Jul 2023 21:54:13 +0300 (EEST) Received: from mail-ed1-f49.google.com (mail-ed1-f49.google.com [209.85.208.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0B4C768C1CC for ; Sat, 22 Jul 2023 21:54:08 +0300 (EEST) Received: by mail-ed1-f49.google.com with SMTP id 4fb4d7f45d1cf-5221ee899a0so515523a12.1 for ; Sat, 22 Jul 2023 11:54:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1690052047; x=1690656847; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=LEkv/AIaaZGCxGrfBezbMIRVkOkp8I3jksx91FN2zXk=; b=A5wyXUjIGftLevECvTYR+yMK4O3b7QnXHdGU6pB15wahs0wgB9+6JjxZc1U+1V/oGc NmpwGK90Ad8B5+qjhLwPk8UlS7IDlEdtp9ijBmeZRlgGxSillV3mEip88E/17XwSkHsv dNArE0hrCtmhdJV52cJWjCxvs9xz/kk+Dwl0g2lNar1cs3npvVOb8VnzGuOaKwvtibAK uBKn2kDaiy2YqYeeQvgaMScEwGXttbllAs2IrMulfibXnS9/sYQJIAcV+dozNi8I0NOc ucbHMXHdXtJwnIXPNmS18Ja0Id6UWtJyE3iNAt9Y9NzE6EubxSwKbgex2WPgjCz4Sv0c NhBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690052047; x=1690656847; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=LEkv/AIaaZGCxGrfBezbMIRVkOkp8I3jksx91FN2zXk=; b=eCMDEp0yMUyf2TCJ04oLgJHr0azGSttKIYQnyHz2WXRm3u7xme3WUbc2a5cDZmuxSU 9HT1PWKbKb/w7f15LyqSwh+4GAHvjqrZj5L60ra2k0EHe9Np8SlxoG11iSI21KuQup2b O3li/GIT9Z0V2AJBMsnrCp54H3Canp1htMnda/K3HJBNGH2thrF9WT1wwTmp0tWzVeQD DgzMCDmv6zS8pubSIPuJ34QOI/gpTF+tf5SzT3ehn4LKFBh3PtBQkwzwkj0Yhpjds6D/ 0nTOgH/maB/Hb89a8hV+awbxjsxbe8xvwD+kKx2BR1UoBvAk2ZMHBYxCLyzhH9wenQUF ZgFg== X-Gm-Message-State: ABy/qLbWCyXJ4+0uxfplcbEbyZrvWvZWPlqm9pn0AWLaJ9KdObZihnmg Zyd6EpHjmZFVhGi3HuNaxzBtPqAOO1qWEQ== X-Google-Smtp-Source: APBJJlGCKtZlN/HJT/7sE/+QDV5+XgLnYbiKcNm98dnrkFtmj0tsgrHfPymWaD4SjT9yNYSDqHdijA== X-Received: by 2002:a17:906:7792:b0:99b:5a73:4d09 with SMTP id s18-20020a170906779200b0099b5a734d09mr5376477ejm.43.1690052047080; Sat, 22 Jul 2023 11:54:07 -0700 (PDT) Received: from [192.168.1.104] (84-112-104-25.cable.dynamic.surfer.at. [84.112.104.25]) by smtp.gmail.com with ESMTPSA id lx26-20020a170906af1a00b0099b76c3041csm1513855ejb.7.2023.07.22.11.54.05 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 22 Jul 2023 11:54:06 -0700 (PDT) From: Marvin Scholz To: FFmpeg development discussions and patches Date: Sat, 22 Jul 2023 20:54:04 +0200 X-Mailer: MailMate (1.14r5964) Message-ID: In-Reply-To: <20230722164157.964161-2-jc@kynesim.co.uk> References: <20230722164157.964161-1-jc@kynesim.co.uk> <20230722164157.964161-2-jc@kynesim.co.uk> MIME-Version: 1.0 Subject: Re: [FFmpeg-devel] [PATCH v2 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: On 22 Jul 2023, at 18:41, John Cox wrote: > 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..070b743186 100644 > --- a/libavfilter/buffersink.c > +++ b/libavfilter/buffersink.c > @@ -62,6 +62,11 @@ typedef struct BufferSinkContext { > int sample_rates_size; > > AVFrame *peeked_frame; > + > + union { > + av_buffersink_alloc_video_frame * 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 bs = ctx->priv; > + return bs->alloc_cb.video ? bs->alloc_cb.video(ctx, bs->alloc_v, w, h) : > + ff_default_get_video_buffer(link, w, h); > +} > + > +void av_buffersink_set_alloc_video_frame(AVFilterContext *ctx, av_buffersink_alloc_video_frame * cb, void * v) > +{ > + BufferSinkContext * const bs = ctx->priv; > + bs->alloc_cb.video = cb; > + bs->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..73f0ddc476 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 Nit: You can use @ref av_buffersink_set_alloc_video_frame or even shorter ::av_buffersink_set_alloc_video_frame to get a proper reference to that function that will be linked. > + * @param w width of frame to allocate > + * @param height of frame to allocate > + * > + * @return > + * - The newly allocated frame > + * - NULL if error Nit: This can use retval, for example like that: @retval AVFrame* The newly allocated frame @retval NULL Error allocating the frame > + */ > +typedef AVFrame * av_buffersink_alloc_video_frame(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, av_buffersink_alloc_video_frame * 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 > > > -- > 2.39.2 > > _______________________________________________ > 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". _______________________________________________ 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".