* [FFmpeg-devel] [PATCH v2 1/2] lavc/texturedsp: fix premult2straight inversion
@ 2024-02-02 1:10 Connor Worley
2024-02-02 1:10 ` [FFmpeg-devel] [PATCH v2 2/2] lavc/dxv: treat DXT5-tagged files as DXT4 Connor Worley
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Connor Worley @ 2024-02-02 1:10 UTC (permalink / raw)
To: ffmpeg-devel; +Cc: Connor Worley
This function should convert premultiplied alpha to straight, but does the opposite.
Signed-off-by: Connor Worley <connorbworley@gmail.com>
---
libavcodec/texturedsp.c | 9 ++++++---
tests/ref/fate/dds-dxt2 | 2 +-
tests/ref/fate/dds-dxt4 | 2 +-
3 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/libavcodec/texturedsp.c b/libavcodec/texturedsp.c
index 5fb79937da..721bfc17f5 100644
--- a/libavcodec/texturedsp.c
+++ b/libavcodec/texturedsp.c
@@ -175,9 +175,12 @@ static av_always_inline void premult2straight(uint8_t *src)
int b = src[2];
int a = src[3]; /* unchanged */
- src[0] = (uint8_t) r * a / 255;
- src[1] = (uint8_t) g * a / 255;
- src[2] = (uint8_t) b * a / 255;
+ if (a == 0)
+ return;
+
+ src[0] = (uint8_t) FFMIN(r * 255 / a, 255);
+ src[1] = (uint8_t) FFMIN(g * 255 / a, 255);
+ src[2] = (uint8_t) FFMIN(b * 255 / a, 255);
}
/**
diff --git a/tests/ref/fate/dds-dxt2 b/tests/ref/fate/dds-dxt2
index b5bdfbadc3..1744ef41f6 100644
--- a/tests/ref/fate/dds-dxt2
+++ b/tests/ref/fate/dds-dxt2
@@ -3,4 +3,4 @@
#codec_id 0: rawvideo
#dimensions 0: 64x64
#sar 0: 0/1
-0, 0, 0, 1, 16384, 0x11cebeb0
+0, 0, 0, 1, 16384, 0xd7f7241b
diff --git a/tests/ref/fate/dds-dxt4 b/tests/ref/fate/dds-dxt4
index 136dfd8006..f22878da56 100644
--- a/tests/ref/fate/dds-dxt4
+++ b/tests/ref/fate/dds-dxt4
@@ -3,4 +3,4 @@
#codec_id 0: rawvideo
#dimensions 0: 64x64
#sar 0: 0/1
-0, 0, 0, 1, 16384, 0x31aaacd6
+0, 0, 0, 1, 16384, 0xf18d4216
--
2.40.1
_______________________________________________
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] 5+ messages in thread
* [FFmpeg-devel] [PATCH v2 2/2] lavc/dxv: treat DXT5-tagged files as DXT4
2024-02-02 1:10 [FFmpeg-devel] [PATCH v2 1/2] lavc/texturedsp: fix premult2straight inversion Connor Worley
@ 2024-02-02 1:10 ` Connor Worley
2024-02-02 8:41 ` [FFmpeg-devel] [PATCH v2 1/2] lavc/texturedsp: fix premult2straight inversion Niklas Haas
2024-02-02 20:15 ` Connor Worley
2 siblings, 0 replies; 5+ messages in thread
From: Connor Worley @ 2024-02-02 1:10 UTC (permalink / raw)
To: ffmpeg-devel; +Cc: Connor Worley
DXV files seem to misnomer DXT5 and really encode DXT4 with premultiplied alpha.
At least, this is what Resolume alley does. To check, encode some input with alpha
as "Normal Quality, With Alpha" in Alley, then decode the output with this change
-- results are true to the original input compared to git-master.
Signed-off-by: Connor Worley <connorbworley@gmail.com>
---
libavcodec/dxv.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/libavcodec/dxv.c b/libavcodec/dxv.c
index 5923811b29..1e6791e63f 100644
--- a/libavcodec/dxv.c
+++ b/libavcodec/dxv.c
@@ -1074,7 +1074,8 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
break;
case MKBETAG('D', 'X', 'T', '5'):
decompress_tex = dxv_decompress_dxt5;
- ctx->tex_funct = ctx->texdsp.dxt5_block;
+ /* DXV misnomers DXT5, alpha is premultiplied so use DXT4 instead */
+ ctx->tex_funct = ctx->texdsp.dxt4_block;
ctx->tex_rat = 4;
ctx->tex_step = 16;
msgcomp = "DXTR5";
--
2.40.1
_______________________________________________
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] 5+ messages in thread
* Re: [FFmpeg-devel] [PATCH v2 1/2] lavc/texturedsp: fix premult2straight inversion
2024-02-02 1:10 [FFmpeg-devel] [PATCH v2 1/2] lavc/texturedsp: fix premult2straight inversion Connor Worley
2024-02-02 1:10 ` [FFmpeg-devel] [PATCH v2 2/2] lavc/dxv: treat DXT5-tagged files as DXT4 Connor Worley
@ 2024-02-02 8:41 ` Niklas Haas
2024-02-02 9:16 ` Andreas Rheinhardt
2024-02-02 20:15 ` Connor Worley
2 siblings, 1 reply; 5+ messages in thread
From: Niklas Haas @ 2024-02-02 8:41 UTC (permalink / raw)
To: ffmpeg-devel; +Cc: Connor Worley
On Thu, 01 Feb 2024 17:10:50 -0800 Connor Worley <connorbworley@gmail.com> wrote:
> + src[0] = (uint8_t) FFMIN(r * 255 / a, 255);
> + src[1] = (uint8_t) FFMIN(g * 255 / a, 255);
> + src[2] = (uint8_t) FFMIN(b * 255 / a, 255);
av_clip_uint8?
_______________________________________________
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] 5+ messages in thread
* Re: [FFmpeg-devel] [PATCH v2 1/2] lavc/texturedsp: fix premult2straight inversion
2024-02-02 8:41 ` [FFmpeg-devel] [PATCH v2 1/2] lavc/texturedsp: fix premult2straight inversion Niklas Haas
@ 2024-02-02 9:16 ` Andreas Rheinhardt
0 siblings, 0 replies; 5+ messages in thread
From: Andreas Rheinhardt @ 2024-02-02 9:16 UTC (permalink / raw)
To: ffmpeg-devel
Niklas Haas:
> On Thu, 01 Feb 2024 17:10:50 -0800 Connor Worley <connorbworley@gmail.com> wrote:
>> + src[0] = (uint8_t) FFMIN(r * 255 / a, 255);
>> + src[1] = (uint8_t) FFMIN(g * 255 / a, 255);
>> + src[2] = (uint8_t) FFMIN(b * 255 / a, 255);
>
> av_clip_uint8?
That is for int values and therefore has to take care of negative values
as well. At least the C version is more complicated (i.e. the compiler
will have to work harder to optimize it to something like the above).
- Andreas
_______________________________________________
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] 5+ messages in thread
* Re: [FFmpeg-devel] [PATCH v2 1/2] lavc/texturedsp: fix premult2straight inversion
2024-02-02 1:10 [FFmpeg-devel] [PATCH v2 1/2] lavc/texturedsp: fix premult2straight inversion Connor Worley
2024-02-02 1:10 ` [FFmpeg-devel] [PATCH v2 2/2] lavc/dxv: treat DXT5-tagged files as DXT4 Connor Worley
2024-02-02 8:41 ` [FFmpeg-devel] [PATCH v2 1/2] lavc/texturedsp: fix premult2straight inversion Niklas Haas
@ 2024-02-02 20:15 ` Connor Worley
2 siblings, 0 replies; 5+ messages in thread
From: Connor Worley @ 2024-02-02 20:15 UTC (permalink / raw)
To: ffmpeg-devel
Linked are some demo files.
I converted a sample to DDS with texconv.exe -f DXT4 -pmalpha sample.png
I converted it back to PNG against master with ffmpeg -i sample.dds
master.png
I converted it back to PNG against this patch with ffmpeg -i sample.dds
patch.png
The color in master.png is dark due to being premultiplied twice.
The color in patch.png is true to sample.png.
https://connorworley.com/sample.png
https://connorworley.com/sample.dds
https://connorworley.com/master.png
https://connorworley.com/patch.png
--
Connor Worley
_______________________________________________
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] 5+ messages in thread
end of thread, other threads:[~2024-02-02 20:16 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-02-02 1:10 [FFmpeg-devel] [PATCH v2 1/2] lavc/texturedsp: fix premult2straight inversion Connor Worley
2024-02-02 1:10 ` [FFmpeg-devel] [PATCH v2 2/2] lavc/dxv: treat DXT5-tagged files as DXT4 Connor Worley
2024-02-02 8:41 ` [FFmpeg-devel] [PATCH v2 1/2] lavc/texturedsp: fix premult2straight inversion Niklas Haas
2024-02-02 9:16 ` Andreas Rheinhardt
2024-02-02 20:15 ` Connor Worley
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