[FFmpeg-devel] [PATCH] libavfilter/scale2ref: Add constants for the primary input

Michael Niedermayer michael at niedermayer.cc
Fri Jun 2 00:37:26 EEST 2017

On Tue, May 30, 2017 at 01:34:29PM -0400, Kevin Mark wrote:
> Variables pertaining to the main video are now available when
> using the scale2ref filter. This allows, as an example, scaling a
> video with another as a reference point while maintaining the
> original aspect ratio of the primary/non-reference video.
> Consider the following graph: scale2ref=iw/6:-1 [main][ref]
> This will scale [main] to 1/6 the width of [ref] while maintaining
> the aspect ratio. This works well when the AR of [ref] is equal to
> the AR of [main] only. What the above filter really does is
> maintain the AR of [ref] when scaling [main]. So in all non-same-AR
> situations [main] will appear stretched or compressed to conform to
> the same AR of the reference video. Without doing this calculation
> externally there is no way to scale in reference to another input
> while maintaining AR in libavfilter.
> To make this possible, we introduce eight new constants to be used
> in the w and h expressions only in the scale2ref filter:
>  * main_w/main_h: width/height of the main input video
>  * main_a: aspect ratio of the main input video
>  * main_sar: sample aspect ratio of the main input video
>  * main_dar: display aspect ratio of the main input video
>  * main_hsub/main_vsub: horiz/vert chroma subsample vals of main
>  * mdar: a shorthand alias of main_dar
> Of course, not all of these constants are needed for maintaining the
> AR, but adding additional constants in line of what is available for
> in/out allows for other scaling possibilities I have not imagined.
> So to now scale a video to 1/6 the size of another video using the
> width and maintaining its own aspect ratio you can do this:
> scale2ref=iw/6:ow/mdar [main][ref]
> This is ideal for picture-in-picture configurations where you could
> have a square or 4:3 video overlaid on a corner of a larger 16:9
> feed all while keeping the scaled video in the corner at its correct
> aspect ratio and always the same size relative to the larger video.
> I've tried to re-use as much code as possible. I could not find a way
> to avoid duplication of the var_names array. It must now be kept in
> sync with the other (the normal one and the scale2ref one) for
> everything to work which does not seem ideal. For every new variable
> introduced/removed into/from the normal scale filter one must be
> added/removed to/from the scale2ref version. Suggestions on how to
> avoid var_names duplication are welcome.
> var_values has been increased to always be large enough for the
> additional scale2ref variables. I do not forsee this being a problem
> as the names variable will always be the correct size. From my
> understanding of av_expr_parse_and_eval it will stop processing
> variables when it runs out of names even though there may be
> additional (potentially uninitialized) entries in the values array.
> The ideal solution here would be using a variable-length array but
> that is unsupported in C90.
> This patch does not remove any functionality and is strictly a
> feature patch. There are no API changes. Behavior does not change for
> any previously valid inputs.
> The applicable documentation has also been updated.
> Signed-off-by: Kevin Mark <kmark937 at gmail.com>
> ---
>  doc/filters.texi    | 26 ++++++++++++++++++-
>  libavfilter/scale.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++---
>  2 files changed, 93 insertions(+), 5 deletions(-)


can you add a fate test that uses the new identifers ?


Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Opposition brings concord. Out of discord comes the fairest harmony.
-- Heraclitus
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20170601/0548c4cc/attachment.sig>

More information about the ffmpeg-devel mailing list