[FFmpeg-cvslog] lavfi/f_select: allow selection based on view ID
Anton Khirnov
git at videolan.org
Mon Sep 23 18:25:22 EEST 2024
ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Sun Jun 9 18:41:38 2024 +0200| [299d9115d4c7c6c108197f48960e140d7433dae6] | committer: Anton Khirnov
lavfi/f_select: allow selection based on view ID
Can be used together with the split filter to decompose multiview video
into individual views.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=299d9115d4c7c6c108197f48960e140d7433dae6
---
doc/filters.texi | 3 +++
libavfilter/f_select.c | 9 +++++++++
2 files changed, 12 insertions(+)
diff --git a/doc/filters.texi b/doc/filters.texi
index db2f4b7ea7..428986a1e9 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -31111,6 +31111,9 @@ Represents the width of the input video frame.
@item ih @emph{(video only)}
Represents the height of the input video frame.
+ at item view @emph{(video only)}
+View ID for multi-view video.
+
@end table
The default value of the select expression is "1".
diff --git a/libavfilter/f_select.c b/libavfilter/f_select.c
index 6ba96bd7c5..ba0ae31f1b 100644
--- a/libavfilter/f_select.c
+++ b/libavfilter/f_select.c
@@ -93,6 +93,8 @@ static const char *const var_names[] = {
"ih", ///< ih: Represents the height of the input video frame.
"iw", ///< iw: Represents the width of the input video frame.
+ "view",
+
NULL
};
@@ -150,6 +152,8 @@ enum var_name {
VAR_IH,
VAR_IW,
+ VAR_VIEW,
+
VAR_VARS_NB
};
@@ -343,6 +347,7 @@ static void select_frame(AVFilterContext *ctx, AVFrame *frame)
SelectContext *select = ctx->priv;
AVFilterLink *inlink = ctx->inputs[0];
FilterLink *inl = ff_filter_link(inlink);
+ const AVFrameSideData *sd;
double res;
if (isnan(select->var_values[VAR_START_PTS]))
@@ -381,6 +386,10 @@ FF_ENABLE_DEPRECATION_WARNINGS
snprintf(buf, sizeof(buf), "%f", select->var_values[VAR_SCENE]);
av_dict_set(&frame->metadata, "lavfi.scene_score", buf, 0);
}
+
+ sd = av_frame_side_data_get(frame->side_data, frame->nb_side_data,
+ AV_FRAME_DATA_VIEW_ID);
+ select->var_values[VAR_VIEW] = sd ? *(int*)sd->data : NAN;
break;
}
More information about the ffmpeg-cvslog
mailing list