diff mbox series

[FFmpeg-devel,v3,2/2] lavc/dxv: treat DXT5-tagged files as DXT4

Message ID 20240208190709.38110-2-connorbworley@gmail.com
State New
Headers show
Series [FFmpeg-devel,v3,1/2] lavc/texturedsp: fix premult2straight inversion | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Connor Worley Feb. 8, 2024, 7:07 p.m. UTC
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(-)

Comments

Lynne Feb. 8, 2024, 7:42 p.m. UTC | #1
Feb 8, 2024, 20:07 by connorbworley@gmail.com:

> 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";
>

Pushed along with the rest of the DXT patches.
Thanks.
diff mbox series

Patch

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";