Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH] swscale: Take the destination range into account for yuv->rgb->yuv conversions
@ 2022-02-18 14:45 Martin Storsjö
  2022-02-19 15:48 ` Michael Niedermayer
  0 siblings, 1 reply; 6+ messages in thread
From: Martin Storsjö @ 2022-02-18 14:45 UTC (permalink / raw)
  To: ffmpeg-devel

The range parameters need to be set up before calling
sws_init_context (which selects which fastpaths can be used;
this gets called by sws_getContext); solely passing them via
sws_setColorspaceDetails isn't enough.

This fixes producing full range YUV range output when doing
YUV->YUV conversions between different YUV color spaces.

Signed-off-by: Martin Storsjö <martin@martin.st>
---
 libswscale/utils.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/libswscale/utils.c b/libswscale/utils.c
index 7c8e1bbdde..34f7f0b869 100644
--- a/libswscale/utils.c
+++ b/libswscale/utils.c
@@ -1037,11 +1037,16 @@ int sws_setColorspaceDetails(struct SwsContext *c, const int inv_table[4],
                                      srcRange, table, dstRange,
                                      brightness, contrast, saturation);
 
-            c->cascaded_context[1] = sws_getContext(tmp_width, tmp_height, tmp_format,
-                                                    dstW, dstH, c->dstFormat,
-                                                    c->flags, NULL, NULL, c->param);
+            c->cascaded_context[1] = sws_alloc_set_opts(tmp_width, tmp_height, tmp_format,
+                                                        dstW, dstH, c->dstFormat,
+                                                        c->flags, c->param);
             if (!c->cascaded_context[1])
                 return -1;
+            c->cascaded_context[1]->srcRange = srcRange;
+            c->cascaded_context[1]->dstRange = dstRange;
+            ret = sws_init_context(c->cascaded_context[1], NULL , NULL);
+            if (ret < 0)
+                return ret;
             sws_setColorspaceDetails(c->cascaded_context[1], inv_table,
                                      srcRange, table, dstRange,
                                      0, 1 << 16, 1 << 16);
-- 
2.32.0 (Apple Git-132)

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [FFmpeg-devel] [PATCH] swscale: Take the destination range into account for yuv->rgb->yuv conversions
  2022-02-18 14:45 [FFmpeg-devel] [PATCH] swscale: Take the destination range into account for yuv->rgb->yuv conversions Martin Storsjö
@ 2022-02-19 15:48 ` Michael Niedermayer
  2022-02-19 21:43   ` Martin Storsjö
  2022-02-23 19:45   ` [FFmpeg-devel] [PATCH v2] " Martin Storsjö
  0 siblings, 2 replies; 6+ messages in thread
From: Michael Niedermayer @ 2022-02-19 15:48 UTC (permalink / raw)
  To: FFmpeg development discussions and patches


[-- Attachment #1.1: Type: text/plain, Size: 1085 bytes --]

On Fri, Feb 18, 2022 at 04:45:46PM +0200, Martin Storsjö wrote:
> The range parameters need to be set up before calling
> sws_init_context (which selects which fastpaths can be used;
> this gets called by sws_getContext); solely passing them via
> sws_setColorspaceDetails isn't enough.
> 
> This fixes producing full range YUV range output when doing
> YUV->YUV conversions between different YUV color spaces.
> 
> Signed-off-by: Martin Storsjö <martin@martin.st>
> ---
>  libswscale/utils.c | 11 ++++++++---
>  1 file changed, 8 insertions(+), 3 deletions(-)

Probably ok

please add a fate test for this

thx

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Modern terrorism, a quick summary: Need oil, start war with country that
has oil, kill hundread thousand in war. Let country fall into chaos,
be surprised about raise of fundamantalists. Drop more bombs, kill more
people, be surprised about them taking revenge and drop even more bombs
and strip your own citizens of their rights and freedoms. to be continued

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

[-- Attachment #2: Type: text/plain, Size: 251 bytes --]

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [FFmpeg-devel] [PATCH] swscale: Take the destination range into account for yuv->rgb->yuv conversions
  2022-02-19 15:48 ` Michael Niedermayer
@ 2022-02-19 21:43   ` Martin Storsjö
  2022-02-23 19:45   ` [FFmpeg-devel] [PATCH v2] " Martin Storsjö
  1 sibling, 0 replies; 6+ messages in thread
From: Martin Storsjö @ 2022-02-19 21:43 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

On Sat, 19 Feb 2022, Michael Niedermayer wrote:

> On Fri, Feb 18, 2022 at 04:45:46PM +0200, Martin Storsjö wrote:
>> The range parameters need to be set up before calling
>> sws_init_context (which selects which fastpaths can be used;
>> this gets called by sws_getContext); solely passing them via
>> sws_setColorspaceDetails isn't enough.
>>
>> This fixes producing full range YUV range output when doing
>> YUV->YUV conversions between different YUV color spaces.
>>
>> Signed-off-by: Martin Storsjö <martin@martin.st>
>> ---
>>  libswscale/utils.c | 11 ++++++++---
>>  1 file changed, 8 insertions(+), 3 deletions(-)
>
> Probably ok
>
> please add a fate test for this

Sure. I'm not offhand familiar with what kinds of tests we have for 
swscale right now, and where a test for this would fit in best. (It's 
reproducible by converting from e.g. BT601 to BT709 or vice versa, when 
the output is supposed to be full range.)

// Martin
_______________________________________________
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".

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [FFmpeg-devel] [PATCH v2] swscale: Take the destination range into account for yuv->rgb->yuv conversions
  2022-02-19 15:48 ` Michael Niedermayer
  2022-02-19 21:43   ` Martin Storsjö
@ 2022-02-23 19:45   ` Martin Storsjö
  2022-02-24 22:50     ` Michael Niedermayer
  1 sibling, 1 reply; 6+ messages in thread
From: Martin Storsjö @ 2022-02-23 19:45 UTC (permalink / raw)
  To: ffmpeg-devel

The range parameters need to be set up before calling
sws_init_context (which selects which fastpaths can be used;
this gets called by sws_getContext); solely passing them via
sws_setColorspaceDetails isn't enough.

This fixes producing full range YUV range output when doing
YUV->YUV conversions between different YUV color spaces.

Signed-off-by: Martin Storsjö <martin@martin.st>
---
 libswscale/utils.c                | 11 ++++++++---
 tests/fate/libswscale.mak         | 16 ++++++++++++++++
 tests/ref/fate/sws-yuv-colorspace |  6 ++++++
 tests/ref/fate/sws-yuv-range      |  6 ++++++
 4 files changed, 36 insertions(+), 3 deletions(-)
 create mode 100644 tests/ref/fate/sws-yuv-colorspace
 create mode 100644 tests/ref/fate/sws-yuv-range

diff --git a/libswscale/utils.c b/libswscale/utils.c
index 7c8e1bbdde..34f7f0b869 100644
--- a/libswscale/utils.c
+++ b/libswscale/utils.c
@@ -1037,11 +1037,16 @@ int sws_setColorspaceDetails(struct SwsContext *c, const int inv_table[4],
                                      srcRange, table, dstRange,
                                      brightness, contrast, saturation);
 
-            c->cascaded_context[1] = sws_getContext(tmp_width, tmp_height, tmp_format,
-                                                    dstW, dstH, c->dstFormat,
-                                                    c->flags, NULL, NULL, c->param);
+            c->cascaded_context[1] = sws_alloc_set_opts(tmp_width, tmp_height, tmp_format,
+                                                        dstW, dstH, c->dstFormat,
+                                                        c->flags, c->param);
             if (!c->cascaded_context[1])
                 return -1;
+            c->cascaded_context[1]->srcRange = srcRange;
+            c->cascaded_context[1]->dstRange = dstRange;
+            ret = sws_init_context(c->cascaded_context[1], NULL , NULL);
+            if (ret < 0)
+                return ret;
             sws_setColorspaceDetails(c->cascaded_context[1], inv_table,
                                      srcRange, table, dstRange,
                                      0, 1 << 16, 1 << 16);
diff --git a/tests/fate/libswscale.mak b/tests/fate/libswscale.mak
index cf9319ec44..f8572f9c37 100644
--- a/tests/fate/libswscale.mak
+++ b/tests/fate/libswscale.mak
@@ -17,6 +17,22 @@ $(SWS_SLICE_TEST-yes): tools/scale_slice_test$(EXESUF)
 $(SWS_SLICE_TEST-yes): REF = /dev/null
 FATE_LIBSWSCALE_SAMPLES += $(SWS_SLICE_TEST-yes)
 
+FATE_LIBSWSCALE-$(CONFIG_RAWVIDEO_DEMUXER) += fate-sws-yuv-colorspace
+fate-sws-yuv-colorspace: tests/data/vsynth1.yuv
+fate-sws-yuv-colorspace: ffmpeg$(PROGSSUF)$(EXESUF)
+fate-sws-yuv-colorspace: CMD = framecrc \
+  -f rawvideo -s 352x288 -pix_fmt yuv420p -i $(TARGET_PATH)/tests/data/vsynth1.yuv \
+  -frames 1 \
+  -vf scale=in_color_matrix=bt709:in_range=limited:out_color_matrix=bt601:out_range=full:flags=+accurate_rnd+bitexact
+
+FATE_LIBSWSCALE-$(CONFIG_RAWVIDEO_DEMUXER) += fate-sws-yuv-range
+fate-sws-yuv-range: tests/data/vsynth1.yuv
+fate-sws-yuv-range: ffmpeg$(PROGSSUF)$(EXESUF)
+fate-sws-yuv-range: CMD = framecrc \
+  -f rawvideo -s 352x288 -pix_fmt yuv420p -i $(TARGET_PATH)/tests/data/vsynth1.yuv \
+  -frames 1 \
+  -vf scale=in_color_matrix=bt601:in_range=limited:out_color_matrix=bt601:out_range=full:flags=+accurate_rnd+bitexact
+
 FATE_LIBSWSCALE += $(FATE_LIBSWSCALE-yes)
 FATE_LIBSWSCALE_SAMPLES += $(FATE_LIBSWSCALE_SAMPLES-yes)
 FATE-$(CONFIG_SWSCALE) += $(FATE_LIBSWSCALE)
diff --git a/tests/ref/fate/sws-yuv-colorspace b/tests/ref/fate/sws-yuv-colorspace
new file mode 100644
index 0000000000..bcf3c4b89c
--- /dev/null
+++ b/tests/ref/fate/sws-yuv-colorspace
@@ -0,0 +1,6 @@
+#tb 0: 1/25
+#media_type 0: video
+#codec_id 0: rawvideo
+#dimensions 0: 352x288
+#sar 0: 0/1
+0,          0,          0,        1,   152064, 0xcbcb97b9
diff --git a/tests/ref/fate/sws-yuv-range b/tests/ref/fate/sws-yuv-range
new file mode 100644
index 0000000000..5b6f93b225
--- /dev/null
+++ b/tests/ref/fate/sws-yuv-range
@@ -0,0 +1,6 @@
+#tb 0: 1/25
+#media_type 0: video
+#codec_id 0: rawvideo
+#dimensions 0: 352x288
+#sar 0: 0/1
+0,          0,          0,        1,   152064, 0xe75c71a9
-- 
2.32.0 (Apple Git-132)

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2] swscale: Take the destination range into account for yuv->rgb->yuv conversions
  2022-02-23 19:45   ` [FFmpeg-devel] [PATCH v2] " Martin Storsjö
@ 2022-02-24 22:50     ` Michael Niedermayer
  2022-02-25  9:13       ` Martin Storsjö
  0 siblings, 1 reply; 6+ messages in thread
From: Michael Niedermayer @ 2022-02-24 22:50 UTC (permalink / raw)
  To: FFmpeg development discussions and patches


[-- Attachment #1.1: Type: text/plain, Size: 1307 bytes --]

On Wed, Feb 23, 2022 at 09:45:53PM +0200, Martin Storsjö wrote:
> The range parameters need to be set up before calling
> sws_init_context (which selects which fastpaths can be used;
> this gets called by sws_getContext); solely passing them via
> sws_setColorspaceDetails isn't enough.
> 
> This fixes producing full range YUV range output when doing
> YUV->YUV conversions between different YUV color spaces.
> 
> Signed-off-by: Martin Storsjö <martin@martin.st>
> ---
>  libswscale/utils.c                | 11 ++++++++---
>  tests/fate/libswscale.mak         | 16 ++++++++++++++++
>  tests/ref/fate/sws-yuv-colorspace |  6 ++++++
>  tests/ref/fate/sws-yuv-range      |  6 ++++++
>  4 files changed, 36 insertions(+), 3 deletions(-)
>  create mode 100644 tests/ref/fate/sws-yuv-colorspace
>  create mode 100644 tests/ref/fate/sws-yuv-range

LGTM

tested on mingw32/64 + wine / linux x86 32/64bit, arm/mips qemu

thx

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Awnsering whenever a program halts or runs forever is
On a turing machine, in general impossible (turings halting problem).
On any real computer, always possible as a real computer has a finite number
of states N, and will either halt in less than N cycles or never halt.

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

[-- Attachment #2: Type: text/plain, Size: 251 bytes --]

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2] swscale: Take the destination range into account for yuv->rgb->yuv conversions
  2022-02-24 22:50     ` Michael Niedermayer
@ 2022-02-25  9:13       ` Martin Storsjö
  0 siblings, 0 replies; 6+ messages in thread
From: Martin Storsjö @ 2022-02-25  9:13 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

On Thu, 24 Feb 2022, Michael Niedermayer wrote:

> On Wed, Feb 23, 2022 at 09:45:53PM +0200, Martin Storsjö wrote:
>> The range parameters need to be set up before calling
>> sws_init_context (which selects which fastpaths can be used;
>> this gets called by sws_getContext); solely passing them via
>> sws_setColorspaceDetails isn't enough.
>>
>> This fixes producing full range YUV range output when doing
>> YUV->YUV conversions between different YUV color spaces.
>>
>> Signed-off-by: Martin Storsjö <martin@martin.st>
>> ---
>>  libswscale/utils.c                | 11 ++++++++---
>>  tests/fate/libswscale.mak         | 16 ++++++++++++++++
>>  tests/ref/fate/sws-yuv-colorspace |  6 ++++++
>>  tests/ref/fate/sws-yuv-range      |  6 ++++++
>>  4 files changed, 36 insertions(+), 3 deletions(-)
>>  create mode 100644 tests/ref/fate/sws-yuv-colorspace
>>  create mode 100644 tests/ref/fate/sws-yuv-range
>
> LGTM
>
> tested on mingw32/64 + wine / linux x86 32/64bit, arm/mips qemu

Thanks, pushed!

// Martin
_______________________________________________
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".

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-02-25  9:13 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-18 14:45 [FFmpeg-devel] [PATCH] swscale: Take the destination range into account for yuv->rgb->yuv conversions Martin Storsjö
2022-02-19 15:48 ` Michael Niedermayer
2022-02-19 21:43   ` Martin Storsjö
2022-02-23 19:45   ` [FFmpeg-devel] [PATCH v2] " Martin Storsjö
2022-02-24 22:50     ` Michael Niedermayer
2022-02-25  9:13       ` Martin Storsjö

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