[FFmpeg-devel] [PATCH 3/8] avfilter/buffersink: add a side_data field
James Almer
jamrial at gmail.com
Fri Jan 10 20:34:54 EET 2025
This will be used to propagate global side data through the filterchain.
Signed-off-by: James Almer <jamrial at gmail.com>
---
libavfilter/buffersink.c | 21 +++++++++++++++++++++
libavfilter/buffersink.h | 5 +++++
2 files changed, 26 insertions(+)
diff --git a/libavfilter/buffersink.c b/libavfilter/buffersink.c
index 565d084ddf..2ac7950b9b 100644
--- a/libavfilter/buffersink.c
+++ b/libavfilter/buffersink.c
@@ -364,6 +364,27 @@ int av_buffersink_get_ch_layout(const AVFilterContext *ctx, AVChannelLayout *out
return 0;
}
+int av_buffersink_get_side_data(const AVFilterContext *ctx,
+ AVFrameSideData ***side_data,
+ int *nb_side_data)
+{
+ AVFrameSideData **sd = NULL;
+ int nb_sd = 0;
+ av_assert0(ctx->filter->activate == activate);
+
+ for (int i = 0; i < ctx->inputs[0]->nb_side_data; i++) {
+ int ret = av_frame_side_data_clone(&sd, &nb_sd,
+ ctx->inputs[0]->side_data[i], 0);
+ if (ret < 0) {
+ av_frame_side_data_free(&sd, &nb_sd);
+ return ret;
+ }
+ }
+ *side_data = sd;
+ *nb_side_data = nb_sd;
+ return 0;
+}
+
#if FF_API_BUFFERSINK_OPTS
#define NB_ITEMS(list) (list ## _size / sizeof(*list))
#endif
diff --git a/libavfilter/buffersink.h b/libavfilter/buffersink.h
index 08cb6b3804..79e994e112 100644
--- a/libavfilter/buffersink.h
+++ b/libavfilter/buffersink.h
@@ -48,6 +48,7 @@
* - av_buffersink_get_channels(),
* - av_buffersink_get_ch_layout(),
* - av_buffersink_get_sample_rate().
+ * - av_buffersink_get_side_data().
*
* The layout returned by av_buffersink_get_ch_layout() must de uninitialized
* by the caller.
@@ -122,6 +123,10 @@ int av_buffersink_get_sample_rate (const AVFilterContext *c
AVBufferRef * av_buffersink_get_hw_frames_ctx (const AVFilterContext *ctx);
+int av_buffersink_get_side_data (const AVFilterContext *ctx,
+ AVFrameSideData ***side_data,
+ int *nb_side_data);
+
/** @} */
/**
--
2.47.1
More information about the ffmpeg-devel
mailing list