PR #25410 opened by Daniel Campos Ramos (danielcamposramos) URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/25410 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/25410.patch
Prepared with AI assistance through Codex. A stereo3d conversion leaves the input packing on its output link. That stale entry reaches encoder initialization and container metadata even when the filter changes the layout. Replace it with the selected output packing while preserving the camera fields and leaving the shared input data unchanged. Remove the entry for mono and anaglyph output, and leave the global eye unspecified for alternating output. I need the converted layout to reach encoder initialization in Sparky Stereo OS. This addresses link metadata alongside #25378's separate per-frame correction. It applies independently to master and includes a standalone FATE reference test for all 37 named outputs, with and without input metadata. Validation: GCC 16.2 and clang 21.1.8 each pass all 6,077 applicable FATE targets. The reference differs in 58 output cases before the fix and matches all 74 cases afterward, with shared input data preserved. >From 156ee91e22e82877728ef717eb4fc248eafe81fd Mon Sep 17 00:00:00 2001 From: Daniel Campos Ramos <[email protected]> Date: Fri, 23 Oct 2026 15:33:48 -0300 Subject: [PATCH] avfilter/stereo3d: describe output packing in link side data Output links inherit the input Stereo 3D entry, which reaches encoder initialization and container metadata even when the filter converts the layout. Replace it using the output packing, preserving camera fields without changing the shared input buffer. Remove it for mono and anaglyph, and leave the global view unspecified for alternating output. Add an independent FATE test with 74 buffersrc-parameter and buffersink-side-data cases covering all named outputs, absent and shared input metadata. The FATE comparison fails before this change with GCC and clang. Signed-off-by: Daniel Campos Ramos <[email protected]> Assisted-by: gpt-6-astra via Codex --- libavfilter/Makefile | 1 + libavfilter/tests/stereo3d_link.c | 134 +++++++++++++++++++++++++ libavfilter/vf_stereo3d.c | 79 ++++++++++++++- tests/fate/filter-video.mak | 4 + tests/ref/fate/filter-stereo3d-link | 148 ++++++++++++++++++++++++++++ 5 files changed, 365 insertions(+), 1 deletion(-) create mode 100644 libavfilter/tests/stereo3d_link.c create mode 100644 tests/ref/fate/filter-stereo3d-link diff --git a/libavfilter/Makefile b/libavfilter/Makefile index ef2542b98b9..f705b2fbbb5 100644 --- a/libavfilter/Makefile +++ b/libavfilter/Makefile @@ -691,6 +691,7 @@ TOOLS = graph2dot TESTPROGS = drawutils filtfmts formats integral TESTPROGS-$(CONFIG_DRAWVG_FILTER) += drawvg +TESTPROGS-$(CONFIG_STEREO3D_FILTER) += stereo3d_link TOOLS-$(CONFIG_LIBZMQ) += zmqsend diff --git a/libavfilter/tests/stereo3d_link.c b/libavfilter/tests/stereo3d_link.c new file mode 100644 index 00000000000..7de3aa6189e --- /dev/null +++ b/libavfilter/tests/stereo3d_link.c @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2026 Daniel Campos Ramos + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <inttypes.h> +#include <stdio.h> +#include <string.h> + +#include "libavutil/common.h" +#include "libavutil/mem.h" +#include "libavutil/stereo3d.h" +#include "libavfilter/avfilter.h" +#include "libavfilter/buffersink.h" +#include "libavfilter/buffersrc.h" + +static const char *const outputs[] = { + "sbsl", "sbsr", "sbs2l", "sbs2r", + "abl", "abr", "ab2l", "ab2r", "tbl", "tbr", "tb2l", "tb2r", + "irl", "irr", "icl", "icr", "chl", "chr", "al", "ar", "hdmi", + "ml", "mr", "agmc", "agmd", "agmg", "agmh", "arbg", "arcc", + "arcd", "arcg", "arch", "argg", "aybc", "aybd", "aybg", "aybh", +}; + +static void print_stereo(const AVFrameSideData *const *side_data, int nb_side_data) +{ + int entries = 0; + + for (int i = 0; i < nb_side_data; i++) { + const AVFrameSideData *side = side_data[i]; + const AVStereo3D *sd; + + if (side->type != AV_FRAME_DATA_STEREO3D) + continue; + sd = (const AVStereo3D *)side->data; + printf(" [%d: type=%s flags=%d view=%s primary=%s baseline=%"PRIu32 + " disparity=%d/%d fov=%d/%d]", + entries++, av_stereo3d_type_name(sd->type), sd->flags, + av_stereo3d_view_name(sd->view), + av_stereo3d_primary_eye_name(sd->primary_eye), sd->baseline, + sd->horizontal_disparity_adjustment.num, + sd->horizontal_disparity_adjustment.den, + sd->horizontal_field_of_view.num, + sd->horizontal_field_of_view.den); + } + printf(" entries=%d\n", entries); +} + +static int check_link(unsigned output, int marked) +{ + AVFilterGraph *graph = avfilter_graph_alloc(); + AVFilterContext *source, *filter, *sink; + AVBufferSrcParameters *par = av_buffersrc_parameters_alloc(); + AVFrame *frame = av_frame_alloc(); + const AVFrameSideData *const *side_data; + const char *name = outputs[output]; + char args[128]; + int ret = AVERROR(ENOMEM), nb_side_data; + + if (!graph || !par || !frame) + goto end; + graph->nb_threads = 1; + for (int i = 0; i < marked; i++) { + AVStereo3D *sd = av_stereo3d_create_side_data(frame); + if (!sd) + goto end; + sd->type = AV_STEREO3D_TOPBOTTOM; + sd->flags = AV_STEREO3D_FLAG_INVERT; + sd->view = AV_STEREO3D_VIEW_RIGHT; + sd->primary_eye = AV_PRIMARY_EYE_RIGHT; + sd->baseline = 65000; + sd->horizontal_disparity_adjustment = (AVRational) { 1, 8 }; + sd->horizontal_field_of_view = (AVRational) { 90, 1 }; + } + snprintf(args, sizeof(args), "video_size=64x%d:pix_fmt=rgb24:" + "time_base=1/25:frame_rate=25/1:pixel_aspect=1/1", + !strcmp(name, "hdmi") ? 1440 : 96); + ret = avfilter_graph_create_filter(&source, avfilter_get_by_name("buffer"), + "in", args, NULL, graph); + if (ret < 0) + goto end; + par->side_data = frame->side_data; + par->nb_side_data = frame->nb_side_data; + ret = av_buffersrc_parameters_set(source, par); + if (ret < 0) + goto end; + snprintf(args, sizeof(args), "abl:%s", name); + ret = avfilter_graph_create_filter(&filter, avfilter_get_by_name("stereo3d"), + "stereo", args, NULL, graph); + if (ret < 0) + goto end; + ret = avfilter_graph_create_filter(&sink, avfilter_get_by_name("buffersink"), + "out", NULL, NULL, graph); + if (ret < 0 || (ret = avfilter_link(source, 0, filter, 0)) < 0 || + (ret = avfilter_link(filter, 0, sink, 0)) < 0 || + (ret = avfilter_graph_config(graph, NULL)) < 0) + goto end; + side_data = av_buffersink_get_side_data(sink, &nb_side_data); + printf("link abl:%s marked=%d", name, marked); + print_stereo(side_data, nb_side_data); + printf("input link after filtering"); + print_stereo((const AVFrameSideData *const *)frame->side_data, frame->nb_side_data); +end: + av_frame_free(&frame); + av_free(par); + avfilter_graph_free(&graph); + return ret; +} + +int main(void) +{ + int failed = 0; + + av_log_set_level(AV_LOG_ERROR); + for (unsigned i = 0; i < FF_ARRAY_ELEMS(outputs); i++) + for (int marked = 0; marked <= 1; marked++) + failed |= check_link(i, marked) < 0; + return failed; +} diff --git a/libavfilter/vf_stereo3d.c b/libavfilter/vf_stereo3d.c index 15d6f31c11f..3ad4d97f552 100644 --- a/libavfilter/vf_stereo3d.c +++ b/libavfilter/vf_stereo3d.c @@ -22,9 +22,11 @@ #include "libavutil/avassert.h" #include "libavutil/imgutils.h" #include "libavutil/intreadwrite.h" +#include "libavutil/mem.h" #include "libavutil/opt.h" #include "libavutil/parseutils.h" #include "libavutil/pixdesc.h" +#include "libavutil/stereo3d.h" #include "avfilter.h" #include "drawutils.h" #include "filters.h" @@ -361,6 +363,81 @@ static void anaglyph(uint8_t *dst, uint8_t *lsrc, uint8_t *rsrc, } } +static void set_stereo(Stereo3DContext *s, AVStereo3D *stereo, + enum AVStereo3DView view) +{ + stereo->flags = s->out.format & 1 ? AV_STEREO3D_FLAG_INVERT : 0; + stereo->view = AV_STEREO3D_VIEW_PACKED; + + switch (s->out.format) { + case SIDE_BY_SIDE_LR: + case SIDE_BY_SIDE_RL: + case SIDE_BY_SIDE_2_LR: + case SIDE_BY_SIDE_2_RL: + stereo->type = AV_STEREO3D_SIDEBYSIDE; + break; + case ABOVE_BELOW_LR: + case ABOVE_BELOW_RL: + case ABOVE_BELOW_2_LR: + case ABOVE_BELOW_2_RL: + stereo->type = AV_STEREO3D_TOPBOTTOM; + break; + case INTERLEAVE_ROWS_LR: + case INTERLEAVE_ROWS_RL: + stereo->type = AV_STEREO3D_LINES; + break; + case INTERLEAVE_COLS_LR: + case INTERLEAVE_COLS_RL: + stereo->type = AV_STEREO3D_COLUMNS; + break; + case CHECKERBOARD_LR: + case CHECKERBOARD_RL: + stereo->type = AV_STEREO3D_CHECKERBOARD; + break; + case ALTERNATING_LR: + case ALTERNATING_RL: + stereo->type = AV_STEREO3D_FRAMESEQUENCE; + stereo->view = view; + break; + case HDMI: + /* The blanking area cannot be described by AV_STEREO3D_TOPBOTTOM. */ + stereo->type = AV_STEREO3D_UNSPEC; + break; + default: + av_assert0(0); + } +} + +static int config_stereo(AVFilterLink *outlink) +{ + Stereo3DContext *s = outlink->src->priv; + const AVFrameSideData *sd = av_frame_side_data_get(outlink->side_data, + outlink->nb_side_data, + AV_FRAME_DATA_STEREO3D); + AVFrameSideData *dst; + AVStereo3D *stereo; + size_t size; + + if (s->out.format <= MONO_R) { + av_frame_side_data_remove(&outlink->side_data, &outlink->nb_side_data, + AV_FRAME_DATA_STEREO3D); + return 0; + } + stereo = av_stereo3d_alloc_size(&size); + if (!stereo) + return AVERROR(ENOMEM); + if (sd) + *stereo = *(const AVStereo3D *)sd->data; + set_stereo(s, stereo, AV_STEREO3D_VIEW_UNSPEC); + dst = av_frame_side_data_new(&outlink->side_data, &outlink->nb_side_data, + AV_FRAME_DATA_STEREO3D, size, + AV_FRAME_SIDE_DATA_FLAG_UNIQUE); + if (dst) + memcpy(dst->data, stereo, size); + av_free(stereo); + return dst ? 0 : AVERROR(ENOMEM); +} + static int config_output(AVFilterLink *outlink) { AVFilterContext *ctx = outlink->src; @@ -607,7 +684,7 @@ static int config_output(AVFilterLink *outlink) ff_stereo3d_init_x86(&s->dsp); #endif - return 0; + return config_stereo(outlink); } typedef struct ThreadData { diff --git a/tests/fate/filter-video.mak b/tests/fate/filter-video.mak index 4a065ec0320..f4669f2c173 100644 --- a/tests/fate/filter-video.mak +++ b/tests/fate/filter-video.mak @@ -1,3 +1,7 @@ +FATE_FILTER-$(CONFIG_STEREO3D_FILTER) += fate-filter-stereo3d-link +fate-filter-stereo3d-link: libavfilter/tests/stereo3d_link$(EXESUF) +fate-filter-stereo3d-link: CMD = run libavfilter/tests/stereo3d_link$(EXESUF) + # Contains the requirements added implicitly if CMD is video_filter. VIDEO_FILTER = $(call ALLYES, $(1:%=%_FILTER) $(2) FILE_PROTOCOL IMAGE2_DEMUXER PGMYUV_DECODER RAWVIDEO_ENCODER NUT_MUXER MD5_PROTOCOL) diff --git a/tests/ref/fate/filter-stereo3d-link b/tests/ref/fate/filter-stereo3d-link new file mode 100644 index 00000000000..9507767bcb5 --- /dev/null +++ b/tests/ref/fate/filter-stereo3d-link @@ -0,0 +1,148 @@ +link abl:sbsl marked=0 [0: type=side by side flags=0 view=packed primary=none baseline=0 disparity=0/1 fov=0/1] entries=1 +input link after filtering entries=0 +link abl:sbsl marked=1 [0: type=side by side flags=0 view=packed primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:sbsr marked=0 [0: type=side by side flags=1 view=packed primary=none baseline=0 disparity=0/1 fov=0/1] entries=1 +input link after filtering entries=0 +link abl:sbsr marked=1 [0: type=side by side flags=1 view=packed primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:sbs2l marked=0 [0: type=side by side flags=0 view=packed primary=none baseline=0 disparity=0/1 fov=0/1] entries=1 +input link after filtering entries=0 +link abl:sbs2l marked=1 [0: type=side by side flags=0 view=packed primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:sbs2r marked=0 [0: type=side by side flags=1 view=packed primary=none baseline=0 disparity=0/1 fov=0/1] entries=1 +input link after filtering entries=0 +link abl:sbs2r marked=1 [0: type=side by side flags=1 view=packed primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:abl marked=0 [0: type=top and bottom flags=0 view=packed primary=none baseline=0 disparity=0/1 fov=0/1] entries=1 +input link after filtering entries=0 +link abl:abl marked=1 [0: type=top and bottom flags=0 view=packed primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:abr marked=0 [0: type=top and bottom flags=1 view=packed primary=none baseline=0 disparity=0/1 fov=0/1] entries=1 +input link after filtering entries=0 +link abl:abr marked=1 [0: type=top and bottom flags=1 view=packed primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:ab2l marked=0 [0: type=top and bottom flags=0 view=packed primary=none baseline=0 disparity=0/1 fov=0/1] entries=1 +input link after filtering entries=0 +link abl:ab2l marked=1 [0: type=top and bottom flags=0 view=packed primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:ab2r marked=0 [0: type=top and bottom flags=1 view=packed primary=none baseline=0 disparity=0/1 fov=0/1] entries=1 +input link after filtering entries=0 +link abl:ab2r marked=1 [0: type=top and bottom flags=1 view=packed primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:tbl marked=0 [0: type=top and bottom flags=0 view=packed primary=none baseline=0 disparity=0/1 fov=0/1] entries=1 +input link after filtering entries=0 +link abl:tbl marked=1 [0: type=top and bottom flags=0 view=packed primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:tbr marked=0 [0: type=top and bottom flags=1 view=packed primary=none baseline=0 disparity=0/1 fov=0/1] entries=1 +input link after filtering entries=0 +link abl:tbr marked=1 [0: type=top and bottom flags=1 view=packed primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:tb2l marked=0 [0: type=top and bottom flags=0 view=packed primary=none baseline=0 disparity=0/1 fov=0/1] entries=1 +input link after filtering entries=0 +link abl:tb2l marked=1 [0: type=top and bottom flags=0 view=packed primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:tb2r marked=0 [0: type=top and bottom flags=1 view=packed primary=none baseline=0 disparity=0/1 fov=0/1] entries=1 +input link after filtering entries=0 +link abl:tb2r marked=1 [0: type=top and bottom flags=1 view=packed primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:irl marked=0 [0: type=interleaved lines flags=0 view=packed primary=none baseline=0 disparity=0/1 fov=0/1] entries=1 +input link after filtering entries=0 +link abl:irl marked=1 [0: type=interleaved lines flags=0 view=packed primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:irr marked=0 [0: type=interleaved lines flags=1 view=packed primary=none baseline=0 disparity=0/1 fov=0/1] entries=1 +input link after filtering entries=0 +link abl:irr marked=1 [0: type=interleaved lines flags=1 view=packed primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:icl marked=0 [0: type=interleaved columns flags=0 view=packed primary=none baseline=0 disparity=0/1 fov=0/1] entries=1 +input link after filtering entries=0 +link abl:icl marked=1 [0: type=interleaved columns flags=0 view=packed primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:icr marked=0 [0: type=interleaved columns flags=1 view=packed primary=none baseline=0 disparity=0/1 fov=0/1] entries=1 +input link after filtering entries=0 +link abl:icr marked=1 [0: type=interleaved columns flags=1 view=packed primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:chl marked=0 [0: type=checkerboard flags=0 view=packed primary=none baseline=0 disparity=0/1 fov=0/1] entries=1 +input link after filtering entries=0 +link abl:chl marked=1 [0: type=checkerboard flags=0 view=packed primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:chr marked=0 [0: type=checkerboard flags=1 view=packed primary=none baseline=0 disparity=0/1 fov=0/1] entries=1 +input link after filtering entries=0 +link abl:chr marked=1 [0: type=checkerboard flags=1 view=packed primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:al marked=0 [0: type=frame alternate flags=0 view=unspecified primary=none baseline=0 disparity=0/1 fov=0/1] entries=1 +input link after filtering entries=0 +link abl:al marked=1 [0: type=frame alternate flags=0 view=unspecified primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:ar marked=0 [0: type=frame alternate flags=1 view=unspecified primary=none baseline=0 disparity=0/1 fov=0/1] entries=1 +input link after filtering entries=0 +link abl:ar marked=1 [0: type=frame alternate flags=1 view=unspecified primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:hdmi marked=0 [0: type=unspecified flags=0 view=packed primary=none baseline=0 disparity=0/1 fov=0/1] entries=1 +input link after filtering entries=0 +link abl:hdmi marked=1 [0: type=unspecified flags=0 view=packed primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:ml marked=0 entries=0 +input link after filtering entries=0 +link abl:ml marked=1 entries=0 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:mr marked=0 entries=0 +input link after filtering entries=0 +link abl:mr marked=1 entries=0 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:agmc marked=0 entries=0 +input link after filtering entries=0 +link abl:agmc marked=1 entries=0 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:agmd marked=0 entries=0 +input link after filtering entries=0 +link abl:agmd marked=1 entries=0 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:agmg marked=0 entries=0 +input link after filtering entries=0 +link abl:agmg marked=1 entries=0 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:agmh marked=0 entries=0 +input link after filtering entries=0 +link abl:agmh marked=1 entries=0 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:arbg marked=0 entries=0 +input link after filtering entries=0 +link abl:arbg marked=1 entries=0 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:arcc marked=0 entries=0 +input link after filtering entries=0 +link abl:arcc marked=1 entries=0 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:arcd marked=0 entries=0 +input link after filtering entries=0 +link abl:arcd marked=1 entries=0 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:arcg marked=0 entries=0 +input link after filtering entries=0 +link abl:arcg marked=1 entries=0 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:arch marked=0 entries=0 +input link after filtering entries=0 +link abl:arch marked=1 entries=0 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:argg marked=0 entries=0 +input link after filtering entries=0 +link abl:argg marked=1 entries=0 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:aybc marked=0 entries=0 +input link after filtering entries=0 +link abl:aybc marked=1 entries=0 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:aybd marked=0 entries=0 +input link after filtering entries=0 +link abl:aybd marked=1 entries=0 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:aybg marked=0 entries=0 +input link after filtering entries=0 +link abl:aybg marked=1 entries=0 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 +link abl:aybh marked=0 entries=0 +input link after filtering entries=0 +link abl:aybh marked=1 entries=0 +input link after filtering [0: type=top and bottom flags=1 view=right primary=right baseline=65000 disparity=1/8 fov=90/1] entries=1 -- 2.54.0 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]
