diff mbox

[FFmpeg-devel] FATE: Add test for libavfilter/scale2ref

Message ID 20170604075331.28661-1-kmark937@gmail.com
State Accepted
Commit 4af496473a0684b798d5712d8c96357e9b036b43
Headers show

Commit Message

Kevin Mark June 4, 2017, 7:53 a.m. UTC
This new FATE test for the scale2ref filter makes use of the recently
added scale2ref-specific variables to maintain the aspect ratio of a
test input.

Filtergraph explanation:
[main] has an AR of 4:3. [ref] has an AR of 16:9.
640 / 4 = 160. So the new width for [main] is 160.
160 / ((320 / 240) * (1 / 1)) = 160 / (4 / 3) = 120. So the new
height for [main] is 120.
160 / 120 = 4 / 3 so [main]'s aspect ratio has been maintained while
using [ref]'s width as a reference point.

[ref] is nullsink'd since it is left unchanged by scale2ref (and so
shouldn't need to be tested).

If we were to use "iw/4:-1" in place of "iw/4:ow/mdar":
640 / 4 = 160. So the new width for [main] would be 160.
360 / 4 = 90. So the new height for [main] would be 90.
160 / 90 = 16 / 9 so [main] now has the same aspect ratio as [ref]
which is probably what you do not want.

This is currently the only test for scale2ref.

Signed-off-by: Kevin Mark <kmark937@gmail.com>
---
 tests/fate/filter-video.mak                 |  4 ++++
 tests/filtergraphs/scale2ref_keep_aspect    |  5 +++++
 tests/ref/fate/filter-scale2ref_keep_aspect | 14 ++++++++++++++
 3 files changed, 23 insertions(+)
 create mode 100644 tests/filtergraphs/scale2ref_keep_aspect
 create mode 100644 tests/ref/fate/filter-scale2ref_keep_aspect

Comments

Gyan June 4, 2017, 8:19 a.m. UTC | #1
On Sun, Jun 4, 2017 at 1:23 PM, Kevin Mark <kmark937@gmail.com> wrote:

>
> If we were to use "iw/4:-1" in place of "iw/4:ow/mdar":
> 640 / 4 = 160. So the new width for [main] would be 160.
> 360 / 4 = 90. So the new height for [main] would be 90.
> 160 / 90 = 16 / 9 so [main] now has the same aspect ratio as [ref]
> which is probably what you do not want.
>

 Now that this feature has been applied, it may be helpful to check if one
of the W/H arguments is of the form '-n' and log a warning that this will
force the ref's display aspect ratio. The warning should also convey the
expression to use: 'oh*mdar' or 'ow/mdar' , as the case may be.

Additionally, since the output SAR will be adjusted to force the ref's DAR,
it would be helpful to add a warning for that (tell users to append
setsar=1 after the scale)  --or--  (ideally) patch the filter so that the
main's DAR is preserved.
Michael Niedermayer June 5, 2017, 12:07 a.m. UTC | #2
On Sun, Jun 04, 2017 at 03:53:31AM -0400, Kevin Mark wrote:
> This new FATE test for the scale2ref filter makes use of the recently
> added scale2ref-specific variables to maintain the aspect ratio of a
> test input.
> 
> Filtergraph explanation:
> [main] has an AR of 4:3. [ref] has an AR of 16:9.
> 640 / 4 = 160. So the new width for [main] is 160.
> 160 / ((320 / 240) * (1 / 1)) = 160 / (4 / 3) = 120. So the new
> height for [main] is 120.
> 160 / 120 = 4 / 3 so [main]'s aspect ratio has been maintained while
> using [ref]'s width as a reference point.
> 
> [ref] is nullsink'd since it is left unchanged by scale2ref (and so
> shouldn't need to be tested).
> 
> If we were to use "iw/4:-1" in place of "iw/4:ow/mdar":
> 640 / 4 = 160. So the new width for [main] would be 160.
> 360 / 4 = 90. So the new height for [main] would be 90.
> 160 / 90 = 16 / 9 so [main] now has the same aspect ratio as [ref]
> which is probably what you do not want.
> 
> This is currently the only test for scale2ref.
> 
> Signed-off-by: Kevin Mark <kmark937@gmail.com>
> ---
>  tests/fate/filter-video.mak                 |  4 ++++
>  tests/filtergraphs/scale2ref_keep_aspect    |  5 +++++
>  tests/ref/fate/filter-scale2ref_keep_aspect | 14 ++++++++++++++
>  3 files changed, 23 insertions(+)
>  create mode 100644 tests/filtergraphs/scale2ref_keep_aspect
>  create mode 100644 tests/ref/fate/filter-scale2ref_keep_aspect

applied

thx

[...]
Kevin Mark June 5, 2017, 3:09 a.m. UTC | #3
On Sun, Jun 4, 2017 at 4:19 AM, Gyan <gyandoshi@gmail.com> wrote:
>  Now that this feature has been applied, it may be helpful to check if one
> of the W/H arguments is of the form '-n' and log a warning that this will
> force the ref's display aspect ratio. The warning should also convey the
> expression to use: 'oh*mdar' or 'ow/mdar' , as the case may be.
>
> Additionally, since the output SAR will be adjusted to force the ref's DAR,
> it would be helpful to add a warning for that (tell users to append
> setsar=1 after the scale)  --or--  (ideally) patch the filter so that the
> main's DAR is preserved.

I was thinking about this as well. The next step for improving the
scale2ref filter is probably patching it to preserve main's DAR, as
you mentioned. It's definitely easy enough to correct with the setsar
filter but given scale2ref's purpose the current behavior still feels
dramatically unintuitive. Perhaps I'm just being unimaginative when it
comes to use-cases but it certainly seems like the vast majority of
uses would involve keeping main's DAR. This would be a breaking
change, unlike the previous patches.

The warning for the "-n" stuff sounds helpful. I'll take a look at this.
diff mbox

Patch

diff --git a/tests/fate/filter-video.mak b/tests/fate/filter-video.mak
index 1ca29e8d32..53fc7a6528 100644
--- a/tests/fate/filter-video.mak
+++ b/tests/fate/filter-video.mak
@@ -413,6 +413,10 @@  fate-filter-scale200: CMD = video_filter "scale=w=200:h=200"
 FATE_FILTER_VSYNTH-$(CONFIG_SCALE_FILTER) += fate-filter-scale500
 fate-filter-scale500: CMD = video_filter "scale=w=500:h=500"
 
+FATE_FILTER_VSYNTH-$(CONFIG_SCALE2REF_FILTER) += fate-filter-scale2ref_keep_aspect
+fate-filter-scale2ref_keep_aspect: tests/data/filtergraphs/scale2ref_keep_aspect
+fate-filter-scale2ref_keep_aspect: CMD = framemd5 -frames:v 5 -filter_complex_script $(TARGET_PATH)/tests/data/filtergraphs/scale2ref_keep_aspect -map "[main]"
+
 FATE_FILTER_VSYNTH-$(CONFIG_SCALE_FILTER) += fate-filter-scalechroma
 fate-filter-scalechroma: tests/data/vsynth1.yuv
 fate-filter-scalechroma: CMD = framecrc -flags bitexact -s 352x288 -pix_fmt yuv444p -i tests/data/vsynth1.yuv -pix_fmt yuv420p -sws_flags +bitexact -vf scale=out_v_chr_pos=33:out_h_chr_pos=151
diff --git a/tests/filtergraphs/scale2ref_keep_aspect b/tests/filtergraphs/scale2ref_keep_aspect
new file mode 100644
index 0000000000..f407460ec7
--- /dev/null
+++ b/tests/filtergraphs/scale2ref_keep_aspect
@@ -0,0 +1,5 @@ 
+sws_flags=+accurate_rnd+bitexact;
+testsrc=size=320x240 [main];
+testsrc=size=640x360 [ref];
+[main][ref] scale2ref=iw/4:ow/mdar [main][ref];
+[ref] nullsink
diff --git a/tests/ref/fate/filter-scale2ref_keep_aspect b/tests/ref/fate/filter-scale2ref_keep_aspect
new file mode 100644
index 0000000000..ca03277446
--- /dev/null
+++ b/tests/ref/fate/filter-scale2ref_keep_aspect
@@ -0,0 +1,14 @@ 
+#format: frame checksums
+#version: 2
+#hash: MD5
+#tb 0: 1/25
+#media_type 0: video
+#codec_id 0: rawvideo
+#dimensions 0: 160x120
+#sar 0: 4/3
+#stream#, dts,        pts, duration,     size, hash
+0,          0,          0,        1,    57600, 9a19c23dc3a557786840d0098606d5f1
+0,          1,          1,        1,    57600, e6fbdabaf1bb0d28afc648ed4d27e9f0
+0,          2,          2,        1,    57600, 52924ed0a751214c50fb2e7a626c8cc5
+0,          3,          3,        1,    57600, 67d5fd6ee71793f1cf8794d1c27afdce
+0,          4,          4,        1,    57600, 85f7775f7b01afd369fc8919dc759d30