diff --git a/doc/APIchanges b/doc/APIchanges index ded81cb68d..e4145bbceb 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -2,6 +2,9 @@ The last version increases of all libraries were on 2024-03-07 API changes, most recent first: +2025-01-25 - xxxxxxxxxx - lavfi 10.8.100 - buffersrc.h + Add AVBufferSrcParameters.side_data and AVBufferSrcParameters.nb_side_data + 2025-01-25 - xxxxxxxxxx - lavfi 10.7.100 - avfilter.h Add AVFilterLink.side_data and AVFilterLink.nb_side_data diff --git a/libavfilter/buffersrc.c b/libavfilter/buffersrc.c index cb1e9c8d6f..15333f00dd 100644 --- a/libavfilter/buffersrc.c +++ b/libavfilter/buffersrc.c @@ -61,6 +61,8 @@ typedef struct BufferSourceContext { enum AVSampleFormat sample_fmt; int channels; AVChannelLayout ch_layout; + AVFrameSideData **side_data; + int nb_side_data; int eof; int64_t last_pts; @@ -160,6 +162,17 @@ int av_buffersrc_parameters_set(AVFilterContext *ctx, AVBufferSrcParameters *par return AVERROR_BUG; } + if (param->nb_side_data > 0) + av_frame_side_data_free(&s->side_data, &s->nb_side_data); + for (int i = 0; i < param->nb_side_data; i++) { + int ret = av_frame_side_data_clone(&s->side_data, &s->nb_side_data, + param->side_data[i], 0); + if (ret < 0) { + av_frame_side_data_free(&s->side_data, &s->nb_side_data); + return ret; + } + } + return 0; } @@ -432,6 +445,7 @@ static av_cold void uninit(AVFilterContext *ctx) BufferSourceContext *s = ctx->priv; av_buffer_unref(&s->hw_frames_ctx); av_channel_layout_uninit(&s->ch_layout); + av_frame_side_data_free(&s->side_data, &s->nb_side_data); } static int query_formats(const AVFilterContext *ctx, @@ -523,6 +537,18 @@ static int config_props(AVFilterLink *link) return AVERROR(EINVAL); } + for (int i = 0; i < c->nb_side_data; i++) { + const AVSideDataDescriptor *desc = av_frame_side_data_desc(c->side_data[i]->type); + int ret; + + ret = av_frame_side_data_clone(&link->side_data, &link->nb_side_data, + c->side_data[i], 0); + if (ret < 0) { + av_frame_side_data_free(&link->side_data, &link->nb_side_data); + return ret; + } + } + link->time_base = c->time_base; l->frame_rate = c->frame_rate; return 0; diff --git a/libavfilter/buffersrc.h b/libavfilter/buffersrc.h index 6f3344f445..2db9b8fb59 100644 --- a/libavfilter/buffersrc.h +++ b/libavfilter/buffersrc.h @@ -120,6 +120,9 @@ typedef struct AVBufferSrcParameters { */ enum AVColorSpace color_space; enum AVColorRange color_range; + + AVFrameSideData **side_data; + int nb_side_data; } AVBufferSrcParameters; /** diff --git a/libavfilter/version.h b/libavfilter/version.h index 0050874108..ba8a6fdab2 100644 --- a/libavfilter/version.h +++ b/libavfilter/version.h @@ -31,7 +31,7 @@ #include "version_major.h" -#define LIBAVFILTER_VERSION_MINOR 7 +#define LIBAVFILTER_VERSION_MINOR 8 #define LIBAVFILTER_VERSION_MICRO 100