Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: Chema Gonzalez <chema@berkeley.edu>
To: Paul B Mahol <onemda@gmail.com>
Cc: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Subject: Re: [FFmpeg-devel] [PATCH 1/3] lavfi/vf_psnr: add warning when color ranges differ
Date: Sat, 1 Apr 2023 10:48:02 -0700
Message-ID: <CAEb0MfcYVHmW+JD8FPzhd2Yi+7b8JekHJuM5PBPRd=Vz2CtMbA@mail.gmail.com> (raw)
In-Reply-To: <CAPYw7P4ks9BLpwFCiS96XE-Bk96fP6D=n8gQe4L3G63Eztr7Zw@mail.gmail.com>

Removed "Warning: " tidbit in the 3 patches.

-Chema

On Sat, Apr 1, 2023 at 1:14 AM Paul B Mahol <onemda@gmail.com> wrote:
>
>
>
> On Fri, Mar 31, 2023 at 6:49 PM Chema Gonzalez <chemag@gmail.com> wrote:
>>
>> The PSNR filter uses the pixel values without considering
>> the color ranges. This is incorrect. Patch adds a warning
>> so at least the user knows it.
>>
>> Let's see an example:
>>
>> (1) Let's get a simple black pixel/white pixel image.
>> ```
>> $ echo -n -e "\x00\x00\x00\xff\xff\xff" > /tmp/foo.rgb24
>> ```
>>
>> (2) From this image, let's distill full and limited range y4m
>> copies.
>>
>> ```
>> $ ffmpeg -y -f rawvideo -video_size 2x1 -pix_fmt rgb24 -i /tmp/foo.rgb24 -vf scale="out_range=full" -pix_fmt yuv420p /tmp/foo.full.y4m
>> $ xxd /tmp/foo.full.y4m
>> 00000000: 5955 5634 4d50 4547 3220 5732 2048 3120  YUV4MPEG2 W2 H1
>> 00000010: 4632 353a 3120 4970 2041 303a 3020 4334  F25:1 Ip A0:0 C4
>> 00000020: 3230 6a70 6567 2058 5953 4353 533d 3432  20jpeg XYSCSS=42
>> 00000030: 304a 5045 4720 5843 4f4c 4f52 5241 4e47  0JPEG XCOLORRANG
>> 00000040: 453d 4655 4c4c 0a46 5241 4d45 0a00 ff80  E=FULL.FRAME....
>> 00000050: 80                                       .
>> ```
>>
>> and
>>
>> ```
>> $ ffmpeg -y -f rawvideo -video_size 2x1 -pix_fmt rgb24 -i /tmp/foo.rgb24 -vf scale="out_range=limited" -pix_fmt yuv420p /tmp/foo.limited.y4m
>> $ xxd /tmp/foo.limited.y4m
>> 00000000: 5955 5634 4d50 4547 3220 5732 2048 3120  YUV4MPEG2 W2 H1
>> 00000010: 4632 353a 3120 4970 2041 303a 3020 4334  F25:1 Ip A0:0 C4
>> 00000020: 3230 6a70 6567 2058 5953 4353 533d 3432  20jpeg XYSCSS=42
>> 00000030: 304a 5045 4720 5843 4f4c 4f52 5241 4e47  0JPEG XCOLORRANG
>> 00000040: 453d 4c49 4d49 5445 440a 4652 414d 450a  E=LIMITED.FRAME.
>> 00000050: 10eb 8080                                ....
>> ```
>>
>> Note that the 2x images are the same (both have 1x pixel at the
>> darkest black, and one at the brightest white). Only difference
>> is the range.
>>
>> (3) Let's calculate the PSNR score:
>> ```
>> $ ./ffmpeg -filter_threads 1 -filter_complex_threads 1 -i /tmp/foo.full.y4m -i /tmp/foo.limited.y4m -lavfi "psnr" -f null -
>> ...
>> [Parsed_psnr_0 @ 0x2f5dac0] PSNR y:22.972065 u:inf v:inf average:25.982365 min:25.982365 max:25.982365
>> ```
>>
>> As we are comparing an image with itself, we expect "y:inf" as the
>> luma PSNR. Issue here is that the PSNR filter just uses the pixel
>> values, ignoring the color ranges.
>>
>> A possible solution would be to have the filter do the conversion.
>>
>> Proposed solution is to add a warning.
>>
>> ```
>> $ ./ffmpeg -filter_threads 1 -filter_complex_threads 1 -i /tmp/foo.full.y4m -i /tmp/foo.limited.y4m -lavfi "psnr" -f null -
>> ...
>> [Parsed_psnr_0 @ 0x2f5dac0] Warning: master and reference frames use different color ranges (pc != tv)
>
>
>
> NAK
>
> "Warning: " part is not needed.
>
>> ...
>> [Parsed_psnr_0 @ 0x2f5dac0] PSNR y:22.972065 u:inf v:inf average:25.982365 min:25.982365 max:25.982365
>> ```
>>
>> Tested:
>>
>> Ran fate.
>> ```
>> $ make fate -j
>> ...
>> TEST    seek-lavf-ppmpipe
>> TEST    seek-lavf-pgmpipe
>> TEST    seek-lavf-mxf_opatom
>> ```
>> ---
>>  libavfilter/vf_psnr.c | 7 +++++++
>>  1 file changed, 7 insertions(+)
>>
>> diff --git a/libavfilter/vf_psnr.c b/libavfilter/vf_psnr.c
>> index 15cde7e8c8..bd33322593 100644
>> --- a/libavfilter/vf_psnr.c
>> +++ b/libavfilter/vf_psnr.c
>> @@ -188,6 +188,13 @@ static int do_psnr(FFFrameSync *fs)
>>          td.planeheight[c] = s->planeheight[c];
>>      }
>>
>> +    if (master->color_range != ref->color_range) {
>> +        av_log(ctx, AV_LOG_WARNING, "Warning: master and reference "
>> +               "frames use different color ranges (%s != %s)\n",
>> +               av_color_range_name(master->color_range),
>> +               av_color_range_name(ref->color_range));
>> +    }
>> +
>>      ff_filter_execute(ctx, compute_images_mse, &td, NULL,
>>                        FFMIN(s->planeheight[1], s->nb_threads));
>>
>> --
>> 2.39.2
>>
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel@ffmpeg.org
>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>
>> To unsubscribe, visit link above, or email
>> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

  reply	other threads:[~2023-04-01 17:48 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-31 16:49 [FFmpeg-devel] [PATCH 0/3] add warnings to quality metrics on color range mistmatch Chema Gonzalez
2023-03-31 16:49 ` [FFmpeg-devel] [PATCH 1/3] lavfi/vf_psnr: add warning when color ranges differ Chema Gonzalez
2023-04-01  8:14   ` Paul B Mahol
2023-04-01 17:48     ` Chema Gonzalez [this message]
2023-03-31 16:49 ` [FFmpeg-devel] [PATCH 2/3] lavfi/vf_ssim: " Chema Gonzalez
2023-03-31 16:49 ` [FFmpeg-devel] [PATCH 3/3] lavfi/vf_libvmaf: " Chema Gonzalez
2023-04-01 17:47 [FFmpeg-devel] [PATCH 1/3] lavfi/vf_psnr: " Chema Gonzalez
2023-09-23 14:54 ` Niklas Haas

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAEb0MfcYVHmW+JD8FPzhd2Yi+7b8JekHJuM5PBPRd=Vz2CtMbA@mail.gmail.com' \
    --to=chema@berkeley.edu \
    --cc=ffmpeg-devel@ffmpeg.org \
    --cc=onemda@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git