diff mbox

[FFmpeg-devel,2/2] libavfilter/scale2ref: Maintain main input's DAR

Message ID 20170605105521.45420-2-kmark937@gmail.com
State Accepted
Headers show

Commit Message

Kevin Mark June 5, 2017, 10:55 a.m. UTC
The scale2ref filter will now maintain the DAR of the main input and
not the DAR of the reference input. This previous behavior was deemed
counterintuitive for most (all?) use-cases.

Before:
scale2ref=iw/4:ow/mdar
in  w:320 h:240 fmt:rgb24 sar:1/1
ref w:640 h:360 fmt:rgb24 sar:1/1
out w:160 h:120 fmt:rgb24 sar:4/3 flags:0x2
SAR: ((120 * 640) / (160 * 360)) * (1 / 1) = 4 / 3
DAR: (160 / 120) * (4 / 3) = 16 / 9
(main out now same DAR as ref)

Now:
scale2ref=iw/4:ow/mdar
in  w:320 h:240 fmt:rgb24 sar:1/1
ref w:640 h:360 fmt:rgb24 sar:1/1
out w:160 h:120 fmt:rgb24 sar:1/1 flags:0x2
SAR: ((120 * 320) / (160 * 240)) * (1 / 1) = 1 / 1
DAR: (160 / 120) * (1 / 1) = 4 / 3
(main out same DAR as main in)

The scale2ref FATE test has also been updated.

Signed-off-by: Kevin Mark <kmark937@gmail.com>
---
 libavfilter/vf_scale.c                      | 6 +++---
 tests/ref/fate/filter-scale2ref_keep_aspect | 2 +-
 2 files changed, 4 insertions(+), 4 deletions(-)

Comments

Kevin Mark June 12, 2017, 5:08 a.m. UTC | #1
I've been using this patch for the past week now and I believe it's
good to go. Does someone want to take a second look before merging?

On Mon, Jun 5, 2017 at 6:55 AM, Kevin Mark <kmark937@gmail.com> wrote:
> The scale2ref filter will now maintain the DAR of the main input and
> not the DAR of the reference input. This previous behavior was deemed
> counterintuitive for most (all?) use-cases.
>
> Before:
> scale2ref=iw/4:ow/mdar
> in  w:320 h:240 fmt:rgb24 sar:1/1
> ref w:640 h:360 fmt:rgb24 sar:1/1
> out w:160 h:120 fmt:rgb24 sar:4/3 flags:0x2
> SAR: ((120 * 640) / (160 * 360)) * (1 / 1) = 4 / 3
> DAR: (160 / 120) * (4 / 3) = 16 / 9
> (main out now same DAR as ref)
>
> Now:
> scale2ref=iw/4:ow/mdar
> in  w:320 h:240 fmt:rgb24 sar:1/1
> ref w:640 h:360 fmt:rgb24 sar:1/1
> out w:160 h:120 fmt:rgb24 sar:1/1 flags:0x2
> SAR: ((120 * 320) / (160 * 240)) * (1 / 1) = 1 / 1
> DAR: (160 / 120) * (1 / 1) = 4 / 3
> (main out same DAR as main in)
>
> The scale2ref FATE test has also been updated.
>
> Signed-off-by: Kevin Mark <kmark937@gmail.com>
> ---
>  libavfilter/vf_scale.c                      | 6 +++---
>  tests/ref/fate/filter-scale2ref_keep_aspect | 2 +-
>  2 files changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c
> index 9232bc4439..5e55f9344b 100644
> --- a/libavfilter/vf_scale.c
> +++ b/libavfilter/vf_scale.c
> @@ -337,10 +337,10 @@ static int config_props(AVFilterLink *outlink)
>          }
>      }
>
> -    if (inlink->sample_aspect_ratio.num){
> -        outlink->sample_aspect_ratio = av_mul_q((AVRational){outlink->h * inlink->w, outlink->w * inlink->h}, inlink->sample_aspect_ratio);
> +    if (inlink0->sample_aspect_ratio.num){
> +        outlink->sample_aspect_ratio = av_mul_q((AVRational){outlink->h * inlink0->w, outlink->w * inlink0->h}, inlink0->sample_aspect_ratio);
>      } else
> -        outlink->sample_aspect_ratio = inlink->sample_aspect_ratio;
> +        outlink->sample_aspect_ratio = inlink0->sample_aspect_ratio;
>
>      if (ctx->filter == &ff_vf_scale2ref) {
>          av_log(ctx, AV_LOG_VERBOSE, "in  w:%d h:%d fmt:%s sar:%d/%d\n",
> diff --git a/tests/ref/fate/filter-scale2ref_keep_aspect b/tests/ref/fate/filter-scale2ref_keep_aspect
> index ca03277446..8dd0dbb13b 100644
> --- a/tests/ref/fate/filter-scale2ref_keep_aspect
> +++ b/tests/ref/fate/filter-scale2ref_keep_aspect
> @@ -5,7 +5,7 @@
>  #media_type 0: video
>  #codec_id 0: rawvideo
>  #dimensions 0: 160x120
> -#sar 0: 4/3
> +#sar 0: 1/1
>  #stream#, dts,        pts, duration,     size, hash
>  0,          0,          0,        1,    57600, 9a19c23dc3a557786840d0098606d5f1
>  0,          1,          1,        1,    57600, e6fbdabaf1bb0d28afc648ed4d27e9f0
> --
> 2.13.0
>
Kevin Mark June 30, 2017, 9:26 a.m. UTC | #2
Ping :)

On Mon, Jun 12, 2017 at 1:08 AM, Kevin Mark <kmark937@gmail.com> wrote:
> I've been using this patch for the past week now and I believe it's
> good to go. Does someone want to take a second look before merging?
>
> On Mon, Jun 5, 2017 at 6:55 AM, Kevin Mark <kmark937@gmail.com> wrote:
>> The scale2ref filter will now maintain the DAR of the main input and
>> not the DAR of the reference input. This previous behavior was deemed
>> counterintuitive for most (all?) use-cases.
>>
>> Before:
>> scale2ref=iw/4:ow/mdar
>> in  w:320 h:240 fmt:rgb24 sar:1/1
>> ref w:640 h:360 fmt:rgb24 sar:1/1
>> out w:160 h:120 fmt:rgb24 sar:4/3 flags:0x2
>> SAR: ((120 * 640) / (160 * 360)) * (1 / 1) = 4 / 3
>> DAR: (160 / 120) * (4 / 3) = 16 / 9
>> (main out now same DAR as ref)
>>
>> Now:
>> scale2ref=iw/4:ow/mdar
>> in  w:320 h:240 fmt:rgb24 sar:1/1
>> ref w:640 h:360 fmt:rgb24 sar:1/1
>> out w:160 h:120 fmt:rgb24 sar:1/1 flags:0x2
>> SAR: ((120 * 320) / (160 * 240)) * (1 / 1) = 1 / 1
>> DAR: (160 / 120) * (1 / 1) = 4 / 3
>> (main out same DAR as main in)
>>
>> The scale2ref FATE test has also been updated.
>>
>> Signed-off-by: Kevin Mark <kmark937@gmail.com>
>> ---
>>  libavfilter/vf_scale.c                      | 6 +++---
>>  tests/ref/fate/filter-scale2ref_keep_aspect | 2 +-
>>  2 files changed, 4 insertions(+), 4 deletions(-)
>>
>> diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c
>> index 9232bc4439..5e55f9344b 100644
>> --- a/libavfilter/vf_scale.c
>> +++ b/libavfilter/vf_scale.c
>> @@ -337,10 +337,10 @@ static int config_props(AVFilterLink *outlink)
>>          }
>>      }
>>
>> -    if (inlink->sample_aspect_ratio.num){
>> -        outlink->sample_aspect_ratio = av_mul_q((AVRational){outlink->h * inlink->w, outlink->w * inlink->h}, inlink->sample_aspect_ratio);
>> +    if (inlink0->sample_aspect_ratio.num){
>> +        outlink->sample_aspect_ratio = av_mul_q((AVRational){outlink->h * inlink0->w, outlink->w * inlink0->h}, inlink0->sample_aspect_ratio);
>>      } else
>> -        outlink->sample_aspect_ratio = inlink->sample_aspect_ratio;
>> +        outlink->sample_aspect_ratio = inlink0->sample_aspect_ratio;
>>
>>      if (ctx->filter == &ff_vf_scale2ref) {
>>          av_log(ctx, AV_LOG_VERBOSE, "in  w:%d h:%d fmt:%s sar:%d/%d\n",
>> diff --git a/tests/ref/fate/filter-scale2ref_keep_aspect b/tests/ref/fate/filter-scale2ref_keep_aspect
>> index ca03277446..8dd0dbb13b 100644
>> --- a/tests/ref/fate/filter-scale2ref_keep_aspect
>> +++ b/tests/ref/fate/filter-scale2ref_keep_aspect
>> @@ -5,7 +5,7 @@
>>  #media_type 0: video
>>  #codec_id 0: rawvideo
>>  #dimensions 0: 160x120
>> -#sar 0: 4/3
>> +#sar 0: 1/1
>>  #stream#, dts,        pts, duration,     size, hash
>>  0,          0,          0,        1,    57600, 9a19c23dc3a557786840d0098606d5f1
>>  0,          1,          1,        1,    57600, e6fbdabaf1bb0d28afc648ed4d27e9f0
>> --
>> 2.13.0
>>
Michael Niedermayer July 4, 2017, 1:11 p.m. UTC | #3
On Mon, Jun 05, 2017 at 06:55:21AM -0400, Kevin Mark wrote:
> The scale2ref filter will now maintain the DAR of the main input and
> not the DAR of the reference input. This previous behavior was deemed
> counterintuitive for most (all?) use-cases.
> 
> Before:
> scale2ref=iw/4:ow/mdar
> in  w:320 h:240 fmt:rgb24 sar:1/1
> ref w:640 h:360 fmt:rgb24 sar:1/1
> out w:160 h:120 fmt:rgb24 sar:4/3 flags:0x2
> SAR: ((120 * 640) / (160 * 360)) * (1 / 1) = 4 / 3
> DAR: (160 / 120) * (4 / 3) = 16 / 9
> (main out now same DAR as ref)
> 
> Now:
> scale2ref=iw/4:ow/mdar
> in  w:320 h:240 fmt:rgb24 sar:1/1
> ref w:640 h:360 fmt:rgb24 sar:1/1
> out w:160 h:120 fmt:rgb24 sar:1/1 flags:0x2
> SAR: ((120 * 320) / (160 * 240)) * (1 / 1) = 1 / 1
> DAR: (160 / 120) * (1 / 1) = 4 / 3
> (main out same DAR as main in)
> 
> The scale2ref FATE test has also been updated.
> 
> Signed-off-by: Kevin Mark <kmark937@gmail.com>
> ---
>  libavfilter/vf_scale.c                      | 6 +++---
>  tests/ref/fate/filter-scale2ref_keep_aspect | 2 +-
>  2 files changed, 4 insertions(+), 4 deletions(-)

applied

thx

[...]
diff mbox

Patch

diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c
index 9232bc4439..5e55f9344b 100644
--- a/libavfilter/vf_scale.c
+++ b/libavfilter/vf_scale.c
@@ -337,10 +337,10 @@  static int config_props(AVFilterLink *outlink)
         }
     }
 
-    if (inlink->sample_aspect_ratio.num){
-        outlink->sample_aspect_ratio = av_mul_q((AVRational){outlink->h * inlink->w, outlink->w * inlink->h}, inlink->sample_aspect_ratio);
+    if (inlink0->sample_aspect_ratio.num){
+        outlink->sample_aspect_ratio = av_mul_q((AVRational){outlink->h * inlink0->w, outlink->w * inlink0->h}, inlink0->sample_aspect_ratio);
     } else
-        outlink->sample_aspect_ratio = inlink->sample_aspect_ratio;
+        outlink->sample_aspect_ratio = inlink0->sample_aspect_ratio;
 
     if (ctx->filter == &ff_vf_scale2ref) {
         av_log(ctx, AV_LOG_VERBOSE, "in  w:%d h:%d fmt:%s sar:%d/%d\n",
diff --git a/tests/ref/fate/filter-scale2ref_keep_aspect b/tests/ref/fate/filter-scale2ref_keep_aspect
index ca03277446..8dd0dbb13b 100644
--- a/tests/ref/fate/filter-scale2ref_keep_aspect
+++ b/tests/ref/fate/filter-scale2ref_keep_aspect
@@ -5,7 +5,7 @@ 
 #media_type 0: video
 #codec_id 0: rawvideo
 #dimensions 0: 160x120
-#sar 0: 4/3
+#sar 0: 1/1
 #stream#, dts,        pts, duration,     size, hash
 0,          0,          0,        1,    57600, 9a19c23dc3a557786840d0098606d5f1
 0,          1,          1,        1,    57600, e6fbdabaf1bb0d28afc648ed4d27e9f0