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 v2 1/3] lavc/dxv: move tag definitions to common header
@ 2024-02-10 22:58 Connor Worley
  2024-02-10 22:58 ` [FFmpeg-devel] [PATCH v2 2/3] lavc/dvx: use texdsp funcs for texture block decompression Connor Worley
  2024-02-10 22:58 ` [FFmpeg-devel] [PATCH v2 3/3] lavc/dxv: remove ctx fields that can be derived from texdsp ctxs Connor Worley
  0 siblings, 2 replies; 10+ messages in thread
From: Connor Worley @ 2024-02-10 22:58 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Connor Worley

Signed-off-by: Connor Worley <connorbworley@gmail.com>
---
 libavcodec/dxv.c    |  9 +++++----
 libavcodec/dxv.h    | 34 ++++++++++++++++++++++++++++++++++
 libavcodec/dxvenc.c |  7 ++-----
 3 files changed, 41 insertions(+), 9 deletions(-)
 create mode 100644 libavcodec/dxv.h

diff --git a/libavcodec/dxv.c b/libavcodec/dxv.c
index 9261a5cac1..16c34fff3b 100644
--- a/libavcodec/dxv.c
+++ b/libavcodec/dxv.c
@@ -28,6 +28,7 @@
 #include "avcodec.h"
 #include "bytestream.h"
 #include "codec_internal.h"
+#include "dxv.h"
 #include "lzf.h"
 #include "texturedsp.h"
 #include "thread.h"
@@ -1064,7 +1065,7 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
 
     tag = bytestream2_get_le32(gbc);
     switch (tag) {
-    case MKBETAG('D', 'X', 'T', '1'):
+    case DXV_FMT_DXT1:
         decompress_tex = dxv_decompress_dxt1;
         ctx->tex_funct = ctx->texdsp.dxt1_block;
         ctx->tex_rat   = 8;
@@ -1072,7 +1073,7 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
         msgcomp = "DXTR1";
         msgtext = "DXT1";
         break;
-    case MKBETAG('D', 'X', 'T', '5'):
+    case DXV_FMT_DXT5:
         decompress_tex = dxv_decompress_dxt5;
         /* DXV misnomers DXT5, alpha is premultiplied so use DXT4 instead */
         ctx->tex_funct = ctx->texdsp.dxt4_block;
@@ -1081,7 +1082,7 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
         msgcomp = "DXTR5";
         msgtext = "DXT5";
         break;
-    case MKBETAG('Y', 'C', 'G', '6'):
+    case DXV_FMT_YCG6:
         decompress_tex = dxv_decompress_ycg6;
         ctx->tex_funct_planar[0] = yo_block;
         ctx->tex_funct_planar[1] = cocg_block;
@@ -1098,7 +1099,7 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
         avctx->pix_fmt = AV_PIX_FMT_YUV420P;
         avctx->colorspace = AVCOL_SPC_YCOCG;
         break;
-    case MKBETAG('Y', 'G', '1', '0'):
+    case DXV_FMT_YG10:
         decompress_tex = dxv_decompress_yg10;
         ctx->tex_funct_planar[0] = yao_block;
         ctx->tex_funct_planar[1] = cocg_block;
diff --git a/libavcodec/dxv.h b/libavcodec/dxv.h
new file mode 100644
index 0000000000..71cfddec85
--- /dev/null
+++ b/libavcodec/dxv.h
@@ -0,0 +1,34 @@
+/*
+ * Resolume DXV common
+ * Copyright (C) 2024 Connor Worley <connorbworley@gmail.com>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef AVCODEC_DXV_H
+#define AVCODEC_DXV_H
+
+#include "libavutil/macros.h"
+
+typedef enum DXVTextureFormat {
+    DXV_FMT_DXT1 = MKBETAG('D', 'X', 'T', '1'),
+    DXV_FMT_DXT5 = MKBETAG('D', 'X', 'T', '5'),
+    DXV_FMT_YCG6 = MKBETAG('Y', 'C', 'G', '6'),
+    DXV_FMT_YG10 = MKBETAG('Y', 'G', '1', '0'),
+} DXVTextureFormat;
+
+#endif /* AVCODEC_DXV_H */
diff --git a/libavcodec/dxvenc.c b/libavcodec/dxvenc.c
index 33a18d53d8..bb2c2f8526 100644
--- a/libavcodec/dxvenc.c
+++ b/libavcodec/dxvenc.c
@@ -27,6 +27,7 @@
 
 #include "bytestream.h"
 #include "codec_internal.h"
+#include "dxv.h"
 #include "encode.h"
 #include "texturedsp.h"
 
@@ -40,10 +41,6 @@
 #define LOOKBACK_HT_ELEMS 0x40000
 #define LOOKBACK_WORDS    0x20202
 
-enum DXVTextureFormat {
-    DXV_FMT_DXT1 = MKBETAG('D', 'X', 'T', '1'),
-};
-
 typedef struct HTEntry {
     uint32_t key;
     uint32_t pos;
@@ -120,7 +117,7 @@ typedef struct DXVEncContext {
 
     TextureDSPThreadContext enc;
 
-    enum DXVTextureFormat tex_fmt;
+    DXVTextureFormat tex_fmt;
     int (*compress_tex)(AVCodecContext *avctx);
 
     const AVCRC *crc_ctx;
-- 
2.43.0

_______________________________________________
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] 10+ messages in thread

* [FFmpeg-devel] [PATCH v2 2/3] lavc/dvx: use texdsp funcs for texture block decompression
  2024-02-10 22:58 [FFmpeg-devel] [PATCH v2 1/3] lavc/dxv: move tag definitions to common header Connor Worley
@ 2024-02-10 22:58 ` Connor Worley
  2024-02-10 22:58 ` [FFmpeg-devel] [PATCH v2 3/3] lavc/dxv: remove ctx fields that can be derived from texdsp ctxs Connor Worley
  1 sibling, 0 replies; 10+ messages in thread
From: Connor Worley @ 2024-02-10 22:58 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Connor Worley

Signed-off-by: Connor Worley <connorbworley@gmail.com>
---
 libavcodec/dxv.c | 289 ++++++++++++-----------------------------------
 1 file changed, 75 insertions(+), 214 deletions(-)

diff --git a/libavcodec/dxv.c b/libavcodec/dxv.c
index 16c34fff3b..cd78de3e0d 100644
--- a/libavcodec/dxv.c
+++ b/libavcodec/dxv.c
@@ -38,15 +38,12 @@ typedef struct DXVContext {
     GetByteContext gbc;
 
     uint8_t *tex_data;   // Compressed texture
-    uint8_t *ctex_data;  // Compressed texture
+    uint8_t *ctex_data;  // Compressed chroma texture
     int tex_rat;         // Compression ratio
     int tex_step;        // Distance between blocks
     int ctex_step;       // Distance between blocks
     int64_t tex_size;    // Texture size
-    int64_t ctex_size;   // Texture size
-
-    /* Optimal number of slices for parallel decoding */
-    int slice_count;
+    int64_t ctex_size;   // Chroma texture size
 
     uint8_t *op_data[4]; // Opcodes
     int64_t op_size[4];  // Opcodes size
@@ -56,198 +53,8 @@ typedef struct DXVContext {
 
     int ctexture_block_w;
     int ctexture_block_h;
-
-    /* Pointer to the selected decompression function */
-    int (*tex_funct)(uint8_t *dst, ptrdiff_t stride, const uint8_t *block);
-    int (*tex_funct_planar[2])(uint8_t *plane0, ptrdiff_t stride0,
-                               uint8_t *plane1, ptrdiff_t stride1,
-                               const uint8_t *block);
 } DXVContext;
 
-static void decompress_indices(uint8_t *dst, const uint8_t *src)
-{
-    int block, i;
-
-    for (block = 0; block < 2; block++) {
-        int tmp = AV_RL24(src);
-
-        /* Unpack 8x3 bit from last 3 byte block */
-        for (i = 0; i < 8; i++)
-            dst[i] = (tmp >> (i * 3)) & 0x7;
-
-        src += 3;
-        dst += 8;
-    }
-}
-
-static int extract_component(int yo0, int yo1, int code)
-{
-    int yo;
-
-    if (yo0 == yo1) {
-        yo = yo0;
-    } else if (code == 0) {
-        yo = yo0;
-    } else if (code == 1) {
-        yo = yo1;
-    } else {
-        if (yo0 > yo1) {
-            yo = (uint8_t) (((8 - code) * yo0 +
-                             (code - 1) * yo1) / 7);
-        } else {
-            if (code == 6) {
-                yo = 0;
-            } else if (code == 7) {
-                yo = 255;
-            } else {
-                yo = (uint8_t) (((6 - code) * yo0 +
-                                 (code - 1) * yo1) / 5);
-            }
-        }
-    }
-
-    return yo;
-}
-
-static int cocg_block(uint8_t *plane0, ptrdiff_t stride0,
-                      uint8_t *plane1, ptrdiff_t stride1,
-                      const uint8_t *block)
-{
-    uint8_t co_indices[16];
-    uint8_t cg_indices[16];
-    uint8_t co0 = *(block);
-    uint8_t co1 = *(block + 1);
-    uint8_t cg0 = *(block + 8);
-    uint8_t cg1 = *(block + 9);
-    int x, y;
-
-    decompress_indices(co_indices, block + 2);
-    decompress_indices(cg_indices, block + 10);
-
-    for (y = 0; y < 4; y++) {
-        for (x = 0; x < 4; x++) {
-            int co_code = co_indices[x + y * 4];
-            int cg_code = cg_indices[x + y * 4];
-
-            plane0[x] = extract_component(cg0, cg1, cg_code);
-            plane1[x] = extract_component(co0, co1, co_code);
-        }
-        plane0 += stride0;
-        plane1 += stride1;
-    }
-
-    return 16;
-}
-
-static void yao_subblock(uint8_t *dst, uint8_t *yo_indices,
-                        ptrdiff_t stride, const uint8_t *block)
-{
-    uint8_t yo0 = *(block);
-    uint8_t yo1 = *(block + 1);
-    int x, y;
-
-    decompress_indices(yo_indices, block + 2);
-
-    for (y = 0; y < 4; y++) {
-        for (x = 0; x < 4; x++) {
-            int yo_code = yo_indices[x + y * 4];
-
-            dst[x] = extract_component(yo0, yo1, yo_code);
-        }
-        dst += stride;
-    }
-}
-
-static int yo_block(uint8_t *dst, ptrdiff_t stride,
-                    uint8_t *unused0, ptrdiff_t unused1,
-                    const uint8_t *block)
-{
-    uint8_t yo_indices[16];
-
-    yao_subblock(dst,      yo_indices, stride, block);
-    yao_subblock(dst + 4,  yo_indices, stride, block + 8);
-    yao_subblock(dst + 8,  yo_indices, stride, block + 16);
-    yao_subblock(dst + 12, yo_indices, stride, block + 24);
-
-    return 32;
-}
-
-static int yao_block(uint8_t *plane0, ptrdiff_t stride0,
-                     uint8_t *plane3, ptrdiff_t stride1,
-                     const uint8_t *block)
-{
-    uint8_t yo_indices[16];
-    uint8_t a_indices[16];
-
-    yao_subblock(plane0,      yo_indices, stride0, block);
-    yao_subblock(plane3,      a_indices,  stride1, block + 8);
-    yao_subblock(plane0 + 4,  yo_indices, stride0, block + 16);
-    yao_subblock(plane3 + 4,  a_indices,  stride1, block + 24);
-    yao_subblock(plane0 + 8,  yo_indices, stride0, block + 32);
-    yao_subblock(plane3 + 8,  a_indices,  stride1, block + 40);
-    yao_subblock(plane0 + 12, yo_indices, stride0, block + 48);
-    yao_subblock(plane3 + 12, a_indices,  stride1, block + 56);
-
-    return 64;
-}
-
-static int decompress_texture_thread(AVCodecContext *avctx, void *arg,
-                                     int slice, int thread_nb)
-{
-    const DXVContext *ctx = avctx->priv_data;
-    AVFrame *frame = arg;
-    const uint8_t *d = ctx->tex_data;
-    int w_block = avctx->coded_width / ctx->texture_block_w;
-    int h_block = avctx->coded_height / ctx->texture_block_h;
-    int x, y;
-    int start_slice, end_slice;
-
-    start_slice = h_block * slice / ctx->slice_count;
-    end_slice = h_block * (slice + 1) / ctx->slice_count;
-
-    if (ctx->tex_funct) {
-        for (y = start_slice; y < end_slice; y++) {
-            uint8_t *p = frame->data[0] + y * frame->linesize[0] * ctx->texture_block_h;
-            int off = y * w_block;
-            for (x = 0; x < w_block; x++) {
-                ctx->tex_funct(p + x * 4 * ctx->texture_block_w, frame->linesize[0],
-                               d + (off + x) * ctx->tex_step);
-            }
-        }
-    } else {
-        const uint8_t *c = ctx->ctex_data;
-
-        for (y = start_slice; y < end_slice; y++) {
-            uint8_t *p0 = frame->data[0] + y * frame->linesize[0] * ctx->texture_block_h;
-            uint8_t *p3 = ctx->tex_step != 64 ? NULL : frame->data[3] + y * frame->linesize[3] * ctx->texture_block_h;
-            int off = y * w_block;
-            for (x = 0; x < w_block; x++) {
-                ctx->tex_funct_planar[0](p0 + x * ctx->texture_block_w, frame->linesize[0],
-                                         p3 != NULL ? p3 + x * ctx->texture_block_w : NULL, frame->linesize[3],
-                                         d + (off + x) * ctx->tex_step);
-            }
-        }
-
-        w_block = (avctx->coded_width / 2) / ctx->ctexture_block_w;
-        h_block = (avctx->coded_height / 2) / ctx->ctexture_block_h;
-        start_slice = h_block * slice / ctx->slice_count;
-        end_slice = h_block * (slice + 1) / ctx->slice_count;
-
-        for (y = start_slice; y < end_slice; y++) {
-            uint8_t *p0 = frame->data[1] + y * frame->linesize[1] * ctx->ctexture_block_h;
-            uint8_t *p1 = frame->data[2] + y * frame->linesize[2] * ctx->ctexture_block_h;
-            int off = y * w_block;
-            for (x = 0; x < w_block; x++) {
-                ctx->tex_funct_planar[1](p0 + x * ctx->ctexture_block_w, frame->linesize[1],
-                                         p1 + x * ctx->ctexture_block_w, frame->linesize[2],
-                                         c + (off + x) * ctx->ctex_step);
-            }
-        }
-    }
-
-    return 0;
-}
-
 /* This scheme addresses already decoded elements depending on 2-bit status:
  *   0 -> copy new element
  *   1 -> copy one element from position -x
@@ -1044,6 +851,8 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
 {
     DXVContext *ctx = avctx->priv_data;
     GetByteContext *gbc = &ctx->gbc;
+    AVCodecContext cavctx = *avctx;
+    TextureDSPThreadContext texdsp_ctx, ctexdsp_ctx;
     int (*decompress_tex)(AVCodecContext *avctx);
     const char *msgcomp, *msgtext;
     uint32_t tag;
@@ -1053,21 +862,22 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
 
     bytestream2_init(gbc, avpkt->data, avpkt->size);
 
+    cavctx.coded_height = avctx->coded_height / 2;
+    cavctx.coded_width  = avctx->coded_width  / 2;
+
     ctx->texture_block_h = 4;
     ctx->texture_block_w = 4;
 
     avctx->pix_fmt = AV_PIX_FMT_RGBA;
     avctx->colorspace = AVCOL_SPC_RGB;
 
-    ctx->tex_funct = NULL;
-    ctx->tex_funct_planar[0] = NULL;
-    ctx->tex_funct_planar[1] = NULL;
-
     tag = bytestream2_get_le32(gbc);
     switch (tag) {
     case DXV_FMT_DXT1:
         decompress_tex = dxv_decompress_dxt1;
-        ctx->tex_funct = ctx->texdsp.dxt1_block;
+        texdsp_ctx.tex_funct = ctx->texdsp.dxt1_block;
+        texdsp_ctx.tex_ratio = 8;
+        texdsp_ctx.raw_ratio = 16;
         ctx->tex_rat   = 8;
         ctx->tex_step  = 8;
         msgcomp = "DXTR1";
@@ -1076,7 +886,9 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
     case DXV_FMT_DXT5:
         decompress_tex = dxv_decompress_dxt5;
         /* DXV misnomers DXT5, alpha is premultiplied so use DXT4 instead */
-        ctx->tex_funct = ctx->texdsp.dxt4_block;
+        texdsp_ctx.tex_funct = ctx->texdsp.dxt4_block;
+        texdsp_ctx.tex_ratio = 16;
+        texdsp_ctx.raw_ratio = 16;
         ctx->tex_rat   = 4;
         ctx->tex_step  = 16;
         msgcomp = "DXTR5";
@@ -1084,8 +896,12 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
         break;
     case DXV_FMT_YCG6:
         decompress_tex = dxv_decompress_ycg6;
-        ctx->tex_funct_planar[0] = yo_block;
-        ctx->tex_funct_planar[1] = cocg_block;
+        texdsp_ctx.tex_funct  = ctx->texdsp.rgtc1u_gray_block;
+        texdsp_ctx.tex_ratio  = 8;
+        texdsp_ctx.raw_ratio  = 4;
+        ctexdsp_ctx.tex_funct = ctx->texdsp.rgtc1u_gray_block;
+        ctexdsp_ctx.tex_ratio = 16;
+        ctexdsp_ctx.raw_ratio = 4;
         ctx->tex_rat   = 8;
         ctx->tex_step  = 32;
         ctx->ctex_step = 16;
@@ -1101,8 +917,12 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
         break;
     case DXV_FMT_YG10:
         decompress_tex = dxv_decompress_yg10;
-        ctx->tex_funct_planar[0] = yao_block;
-        ctx->tex_funct_planar[1] = cocg_block;
+        texdsp_ctx.tex_funct  = ctx->texdsp.rgtc1u_gray_block;
+        texdsp_ctx.tex_ratio  = 16;
+        texdsp_ctx.raw_ratio  = 4;
+        ctexdsp_ctx.tex_funct = ctx->texdsp.rgtc1u_gray_block;
+        ctexdsp_ctx.tex_ratio = 16;
+        ctexdsp_ctx.raw_ratio = 4;
         ctx->tex_rat   = 4;
         ctx->tex_step  = 64;
         ctx->ctex_step = 16;
@@ -1131,14 +951,20 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
         }
 
         if (old_type & 0x40) {
+            tag = DXV_FMT_DXT5;
             msgtext = "DXT5";
 
-            ctx->tex_funct = ctx->texdsp.dxt5_block;
+            texdsp_ctx.tex_funct = ctx->texdsp.dxt5_block;
+            texdsp_ctx.tex_ratio = 16;
+            texdsp_ctx.raw_ratio = 16;
             ctx->tex_step  = 16;
         } else if (old_type & 0x20 || version_major == 1) {
+            tag = DXV_FMT_DXT1;
             msgtext = "DXT1";
 
-            ctx->tex_funct = ctx->texdsp.dxt1_block;
+            texdsp_ctx.tex_funct = ctx->texdsp.dxt1_block;
+            texdsp_ctx.tex_ratio = 8;
+            texdsp_ctx.raw_ratio = 16;
             ctx->tex_step  = 8;
         } else {
             av_log(avctx, AV_LOG_ERROR, "Unsupported header (0x%08"PRIX32")\n.", tag);
@@ -1148,10 +974,10 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
         break;
     }
 
-    ctx->slice_count = av_clip(avctx->thread_count, 1,
-                               avctx->coded_height / FFMAX(ctx->texture_block_h,
-                                                           ctx->ctexture_block_h));
-
+    texdsp_ctx.slice_count  = av_clip(avctx->thread_count, 1,
+                                      avctx->coded_height / TEXTURE_BLOCK_H);
+    ctexdsp_ctx.slice_count = av_clip(avctx->thread_count, 1,
+                                      cavctx.coded_height / TEXTURE_BLOCK_H);
     /* New header is 12 bytes long. */
     if (!old_type) {
         version_major = bytestream2_get_byte(gbc) - 1;
@@ -1216,9 +1042,44 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
     if (ret < 0)
         return ret;
 
-    /* Now decompress the texture with the standard functions. */
-    avctx->execute2(avctx, decompress_texture_thread,
-                    frame, NULL, ctx->slice_count);
+    switch (tag) {
+    case DXV_FMT_YG10:
+        /* BC5 texture with alpha in the second half of each block */
+        texdsp_ctx.tex_data.in    = ctx->tex_data + texdsp_ctx.tex_ratio / 2;
+        texdsp_ctx.frame_data.out = frame->data[3];
+        texdsp_ctx.stride         = frame->linesize[3];
+        ret = ff_texturedsp_exec_decompress_threads(avctx, &texdsp_ctx);
+        if (ret < 0)
+            return ret;
+        /* fallthrough */
+    case DXV_FMT_YCG6:
+        /* BC5 texture with Co in the first half of each block and Cg in the second */
+        ctexdsp_ctx.tex_data.in    = ctx->ctex_data;
+        ctexdsp_ctx.frame_data.out = frame->data[2];
+        ctexdsp_ctx.stride         = frame->linesize[2];
+        ret = ff_texturedsp_exec_decompress_threads(&cavctx, &ctexdsp_ctx);
+        if (ret < 0)
+            return ret;
+        ctexdsp_ctx.tex_data.in    = ctx->ctex_data + ctexdsp_ctx.tex_ratio / 2;
+        ctexdsp_ctx.frame_data.out = frame->data[1];
+        ctexdsp_ctx.stride         = frame->linesize[1];
+        ret = ff_texturedsp_exec_decompress_threads(&cavctx, &ctexdsp_ctx);
+        if (ret < 0)
+            return ret;
+        /* fallthrough */
+    case DXV_FMT_DXT1:
+    case DXV_FMT_DXT5:
+        /* For DXT1 and DXT5, self explanatory
+         * For YCG6, BC4 texture for Y
+         * For YG10, BC5 texture with Y in the first half of each block */
+        texdsp_ctx.tex_data.in    = ctx->tex_data;
+        texdsp_ctx.frame_data.out = frame->data[0];
+        texdsp_ctx.stride         = frame->linesize[0];
+        ret = ff_texturedsp_exec_decompress_threads(avctx, &texdsp_ctx);
+        if (ret < 0)
+            return ret;
+        break;
+    }
 
     /* Frame is ready to be output. */
     frame->pict_type = AV_PICTURE_TYPE_I;
-- 
2.43.0

_______________________________________________
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] 10+ messages in thread

* [FFmpeg-devel] [PATCH v2 3/3] lavc/dxv: remove ctx fields that can be derived from texdsp ctxs
  2024-02-10 22:58 [FFmpeg-devel] [PATCH v2 1/3] lavc/dxv: move tag definitions to common header Connor Worley
  2024-02-10 22:58 ` [FFmpeg-devel] [PATCH v2 2/3] lavc/dvx: use texdsp funcs for texture block decompression Connor Worley
@ 2024-02-10 22:58 ` Connor Worley
  2024-02-10 23:42   ` Lynne
  2024-02-11  9:04   ` Andreas Rheinhardt
  1 sibling, 2 replies; 10+ messages in thread
From: Connor Worley @ 2024-02-10 22:58 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Connor Worley

Signed-off-by: Connor Worley <connorbworley@gmail.com>
---
 libavcodec/dxv.c | 53 ++++++++----------------------------------------
 1 file changed, 9 insertions(+), 44 deletions(-)

diff --git a/libavcodec/dxv.c b/libavcodec/dxv.c
index cd78de3e0d..82c493f1de 100644
--- a/libavcodec/dxv.c
+++ b/libavcodec/dxv.c
@@ -39,20 +39,12 @@ typedef struct DXVContext {
 
     uint8_t *tex_data;   // Compressed texture
     uint8_t *ctex_data;  // Compressed chroma texture
-    int tex_rat;         // Compression ratio
-    int tex_step;        // Distance between blocks
-    int ctex_step;       // Distance between blocks
+
     int64_t tex_size;    // Texture size
     int64_t ctex_size;   // Chroma texture size
 
     uint8_t *op_data[4]; // Opcodes
     int64_t op_size[4];  // Opcodes size
-
-    int texture_block_w;
-    int texture_block_h;
-
-    int ctexture_block_w;
-    int ctexture_block_h;
 } DXVContext;
 
 /* This scheme addresses already decoded elements depending on 2-bit status:
@@ -865,9 +857,6 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
     cavctx.coded_height = avctx->coded_height / 2;
     cavctx.coded_width  = avctx->coded_width  / 2;
 
-    ctx->texture_block_h = 4;
-    ctx->texture_block_w = 4;
-
     avctx->pix_fmt = AV_PIX_FMT_RGBA;
     avctx->colorspace = AVCOL_SPC_RGB;
 
@@ -878,8 +867,6 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
         texdsp_ctx.tex_funct = ctx->texdsp.dxt1_block;
         texdsp_ctx.tex_ratio = 8;
         texdsp_ctx.raw_ratio = 16;
-        ctx->tex_rat   = 8;
-        ctx->tex_step  = 8;
         msgcomp = "DXTR1";
         msgtext = "DXT1";
         break;
@@ -889,8 +876,6 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
         texdsp_ctx.tex_funct = ctx->texdsp.dxt4_block;
         texdsp_ctx.tex_ratio = 16;
         texdsp_ctx.raw_ratio = 16;
-        ctx->tex_rat   = 4;
-        ctx->tex_step  = 16;
         msgcomp = "DXTR5";
         msgtext = "DXT5";
         break;
@@ -902,16 +887,8 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
         ctexdsp_ctx.tex_funct = ctx->texdsp.rgtc1u_gray_block;
         ctexdsp_ctx.tex_ratio = 16;
         ctexdsp_ctx.raw_ratio = 4;
-        ctx->tex_rat   = 8;
-        ctx->tex_step  = 32;
-        ctx->ctex_step = 16;
         msgcomp = "YOCOCG6";
         msgtext = "YCG6";
-        ctx->ctex_size = avctx->coded_width * avctx->coded_height / 4;
-        ctx->texture_block_h = 4;
-        ctx->texture_block_w = 16;
-        ctx->ctexture_block_h = 4;
-        ctx->ctexture_block_w = 4;
         avctx->pix_fmt = AV_PIX_FMT_YUV420P;
         avctx->colorspace = AVCOL_SPC_YCOCG;
         break;
@@ -923,16 +900,8 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
         ctexdsp_ctx.tex_funct = ctx->texdsp.rgtc1u_gray_block;
         ctexdsp_ctx.tex_ratio = 16;
         ctexdsp_ctx.raw_ratio = 4;
-        ctx->tex_rat   = 4;
-        ctx->tex_step  = 64;
-        ctx->ctex_step = 16;
         msgcomp = "YAOCOCG10";
         msgtext = "YG10";
-        ctx->ctex_size = avctx->coded_width * avctx->coded_height / 4;
-        ctx->texture_block_h = 4;
-        ctx->texture_block_w = 16;
-        ctx->ctexture_block_h = 4;
-        ctx->ctexture_block_w = 4;
         avctx->pix_fmt = AV_PIX_FMT_YUVA420P;
         avctx->colorspace = AVCOL_SPC_YCOCG;
         break;
@@ -957,7 +926,6 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
             texdsp_ctx.tex_funct = ctx->texdsp.dxt5_block;
             texdsp_ctx.tex_ratio = 16;
             texdsp_ctx.raw_ratio = 16;
-            ctx->tex_step  = 16;
         } else if (old_type & 0x20 || version_major == 1) {
             tag = DXV_FMT_DXT1;
             msgtext = "DXT1";
@@ -965,12 +933,10 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
             texdsp_ctx.tex_funct = ctx->texdsp.dxt1_block;
             texdsp_ctx.tex_ratio = 8;
             texdsp_ctx.raw_ratio = 16;
-            ctx->tex_step  = 8;
         } else {
             av_log(avctx, AV_LOG_ERROR, "Unsupported header (0x%08"PRIX32")\n.", tag);
             return AVERROR_INVALIDDATA;
         }
-        ctx->tex_rat = 1;
         break;
     }
 
@@ -986,7 +952,6 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
         /* Encoder copies texture data when compression is not advantageous. */
         if (bytestream2_get_byte(gbc)) {
             msgcomp = "RAW";
-            ctx->tex_rat = 1;
             decompress_tex = dxv_decompress_raw;
         }
 
@@ -1004,14 +969,20 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
         return AVERROR_INVALIDDATA;
     }
 
-    ctx->tex_size = avctx->coded_width * avctx->coded_height * 4 / ctx->tex_rat;
+    ctx->tex_size = avctx->coded_width  / (texdsp_ctx.raw_ratio / (avctx->pix_fmt == AV_PIX_FMT_RGBA ? 4 : 1)) *
+                    avctx->coded_height / TEXTURE_BLOCK_H *
+                    texdsp_ctx.tex_ratio;
     ret = av_reallocp(&ctx->tex_data, ctx->tex_size + AV_INPUT_BUFFER_PADDING_SIZE);
     if (ret < 0)
         return ret;
 
-    if (ctx->ctex_size) {
+    if (avctx->pix_fmt != AV_PIX_FMT_RGBA) {
         int i;
 
+        ctx->ctex_size = cavctx.coded_width  / ctexdsp_ctx.raw_ratio *
+                         cavctx.coded_height / TEXTURE_BLOCK_H *
+                         ctexdsp_ctx.tex_ratio;
+
         ctx->op_size[0] = avctx->coded_width * avctx->coded_height / 16;
         ctx->op_size[1] = avctx->coded_width * avctx->coded_height / 32;
         ctx->op_size[2] = avctx->coded_width * avctx->coded_height / 32;
@@ -1031,12 +1002,6 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
     ret = decompress_tex(avctx);
     if (ret < 0)
         return ret;
-    {
-        int w_block = avctx->coded_width / ctx->texture_block_w;
-        int h_block = avctx->coded_height / ctx->texture_block_h;
-        if (w_block * h_block * ctx->tex_step > ctx->tex_size * 8LL)
-            return AVERROR_INVALIDDATA;
-    }
 
     ret = ff_thread_get_buffer(avctx, frame, 0);
     if (ret < 0)
-- 
2.43.0

_______________________________________________
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] 10+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 3/3] lavc/dxv: remove ctx fields that can be derived from texdsp ctxs
  2024-02-10 22:58 ` [FFmpeg-devel] [PATCH v2 3/3] lavc/dxv: remove ctx fields that can be derived from texdsp ctxs Connor Worley
@ 2024-02-10 23:42   ` Lynne
  2024-02-11  9:04   ` Andreas Rheinhardt
  1 sibling, 0 replies; 10+ messages in thread
From: Lynne @ 2024-02-10 23:42 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Feb 10, 2024, 23:59 by connorbworley@gmail.com:

> Signed-off-by: Connor Worley <connorbworley@gmail.com>
> ---
>  libavcodec/dxv.c | 53 ++++++++----------------------------------------
>  1 file changed, 9 insertions(+), 44 deletions(-)
>
> diff --git a/libavcodec/dxv.c b/libavcodec/dxv.c
> index cd78de3e0d..82c493f1de 100644
> --- a/libavcodec/dxv.c
> +++ b/libavcodec/dxv.c
> @@ -39,20 +39,12 @@ typedef struct DXVContext { 
>

lgtm, patchset pushed
Thanks
_______________________________________________
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] 10+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 3/3] lavc/dxv: remove ctx fields that can be derived from texdsp ctxs
  2024-02-10 22:58 ` [FFmpeg-devel] [PATCH v2 3/3] lavc/dxv: remove ctx fields that can be derived from texdsp ctxs Connor Worley
  2024-02-10 23:42   ` Lynne
@ 2024-02-11  9:04   ` Andreas Rheinhardt
  2024-02-11 12:36     ` Connor Worley
  1 sibling, 1 reply; 10+ messages in thread
From: Andreas Rheinhardt @ 2024-02-11  9:04 UTC (permalink / raw)
  To: ffmpeg-devel

Connor Worley:
> Signed-off-by: Connor Worley <connorbworley@gmail.com>
> ---
>  libavcodec/dxv.c | 53 ++++++++----------------------------------------
>  1 file changed, 9 insertions(+), 44 deletions(-)
> 
> diff --git a/libavcodec/dxv.c b/libavcodec/dxv.c
> index cd78de3e0d..82c493f1de 100644
> --- a/libavcodec/dxv.c
> +++ b/libavcodec/dxv.c
> @@ -39,20 +39,12 @@ typedef struct DXVContext {
>  
>      uint8_t *tex_data;   // Compressed texture
>      uint8_t *ctex_data;  // Compressed chroma texture
> -    int tex_rat;         // Compression ratio
> -    int tex_step;        // Distance between blocks
> -    int ctex_step;       // Distance between blocks
> +
>      int64_t tex_size;    // Texture size
>      int64_t ctex_size;   // Chroma texture size
>  
>      uint8_t *op_data[4]; // Opcodes
>      int64_t op_size[4];  // Opcodes size
> -
> -    int texture_block_w;
> -    int texture_block_h;
> -
> -    int ctexture_block_w;
> -    int ctexture_block_h;
>  } DXVContext;
>  
>  /* This scheme addresses already decoded elements depending on 2-bit status:
> @@ -865,9 +857,6 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
>      cavctx.coded_height = avctx->coded_height / 2;
>      cavctx.coded_width  = avctx->coded_width  / 2;
>  
> -    ctx->texture_block_h = 4;
> -    ctx->texture_block_w = 4;
> -
>      avctx->pix_fmt = AV_PIX_FMT_RGBA;
>      avctx->colorspace = AVCOL_SPC_RGB;
>  
> @@ -878,8 +867,6 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
>          texdsp_ctx.tex_funct = ctx->texdsp.dxt1_block;
>          texdsp_ctx.tex_ratio = 8;
>          texdsp_ctx.raw_ratio = 16;
> -        ctx->tex_rat   = 8;
> -        ctx->tex_step  = 8;
>          msgcomp = "DXTR1";
>          msgtext = "DXT1";
>          break;
> @@ -889,8 +876,6 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
>          texdsp_ctx.tex_funct = ctx->texdsp.dxt4_block;
>          texdsp_ctx.tex_ratio = 16;
>          texdsp_ctx.raw_ratio = 16;
> -        ctx->tex_rat   = 4;
> -        ctx->tex_step  = 16;
>          msgcomp = "DXTR5";
>          msgtext = "DXT5";
>          break;
> @@ -902,16 +887,8 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
>          ctexdsp_ctx.tex_funct = ctx->texdsp.rgtc1u_gray_block;
>          ctexdsp_ctx.tex_ratio = 16;
>          ctexdsp_ctx.raw_ratio = 4;
> -        ctx->tex_rat   = 8;
> -        ctx->tex_step  = 32;
> -        ctx->ctex_step = 16;
>          msgcomp = "YOCOCG6";
>          msgtext = "YCG6";
> -        ctx->ctex_size = avctx->coded_width * avctx->coded_height / 4;
> -        ctx->texture_block_h = 4;
> -        ctx->texture_block_w = 16;
> -        ctx->ctexture_block_h = 4;
> -        ctx->ctexture_block_w = 4;
>          avctx->pix_fmt = AV_PIX_FMT_YUV420P;
>          avctx->colorspace = AVCOL_SPC_YCOCG;
>          break;
> @@ -923,16 +900,8 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
>          ctexdsp_ctx.tex_funct = ctx->texdsp.rgtc1u_gray_block;
>          ctexdsp_ctx.tex_ratio = 16;
>          ctexdsp_ctx.raw_ratio = 4;
> -        ctx->tex_rat   = 4;
> -        ctx->tex_step  = 64;
> -        ctx->ctex_step = 16;
>          msgcomp = "YAOCOCG10";
>          msgtext = "YG10";
> -        ctx->ctex_size = avctx->coded_width * avctx->coded_height / 4;
> -        ctx->texture_block_h = 4;
> -        ctx->texture_block_w = 16;
> -        ctx->ctexture_block_h = 4;
> -        ctx->ctexture_block_w = 4;
>          avctx->pix_fmt = AV_PIX_FMT_YUVA420P;
>          avctx->colorspace = AVCOL_SPC_YCOCG;
>          break;
> @@ -957,7 +926,6 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
>              texdsp_ctx.tex_funct = ctx->texdsp.dxt5_block;
>              texdsp_ctx.tex_ratio = 16;
>              texdsp_ctx.raw_ratio = 16;
> -            ctx->tex_step  = 16;
>          } else if (old_type & 0x20 || version_major == 1) {
>              tag = DXV_FMT_DXT1;
>              msgtext = "DXT1";
> @@ -965,12 +933,10 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
>              texdsp_ctx.tex_funct = ctx->texdsp.dxt1_block;
>              texdsp_ctx.tex_ratio = 8;
>              texdsp_ctx.raw_ratio = 16;
> -            ctx->tex_step  = 8;
>          } else {
>              av_log(avctx, AV_LOG_ERROR, "Unsupported header (0x%08"PRIX32")\n.", tag);
>              return AVERROR_INVALIDDATA;
>          }
> -        ctx->tex_rat = 1;
>          break;
>      }
>  
> @@ -986,7 +952,6 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
>          /* Encoder copies texture data when compression is not advantageous. */
>          if (bytestream2_get_byte(gbc)) {
>              msgcomp = "RAW";
> -            ctx->tex_rat = 1;
>              decompress_tex = dxv_decompress_raw;
>          }
>  
> @@ -1004,14 +969,20 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
>          return AVERROR_INVALIDDATA;
>      }
>  
> -    ctx->tex_size = avctx->coded_width * avctx->coded_height * 4 / ctx->tex_rat;
> +    ctx->tex_size = avctx->coded_width  / (texdsp_ctx.raw_ratio / (avctx->pix_fmt == AV_PIX_FMT_RGBA ? 4 : 1)) *
> +                    avctx->coded_height / TEXTURE_BLOCK_H *
> +                    texdsp_ctx.tex_ratio;
>      ret = av_reallocp(&ctx->tex_data, ctx->tex_size + AV_INPUT_BUFFER_PADDING_SIZE);
>      if (ret < 0)
>          return ret;
>  
> -    if (ctx->ctex_size) {
> +    if (avctx->pix_fmt != AV_PIX_FMT_RGBA) {
>          int i;
>  
> +        ctx->ctex_size = cavctx.coded_width  / ctexdsp_ctx.raw_ratio *
> +                         cavctx.coded_height / TEXTURE_BLOCK_H *
> +                         ctexdsp_ctx.tex_ratio;
> +
>          ctx->op_size[0] = avctx->coded_width * avctx->coded_height / 16;
>          ctx->op_size[1] = avctx->coded_width * avctx->coded_height / 32;
>          ctx->op_size[2] = avctx->coded_width * avctx->coded_height / 32;
> @@ -1031,12 +1002,6 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
>      ret = decompress_tex(avctx);
>      if (ret < 0)
>          return ret;
> -    {
> -        int w_block = avctx->coded_width / ctx->texture_block_w;
> -        int h_block = avctx->coded_height / ctx->texture_block_h;
> -        if (w_block * h_block * ctx->tex_step > ctx->tex_size * 8LL)
> -            return AVERROR_INVALIDDATA;
> -    }

You removed this check without replacement. It presumably fixed a bug.
Did you test whether you reopened said bug?
(I think I already asked this in an earlier iteration of this patchset.)

- 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] 10+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 3/3] lavc/dxv: remove ctx fields that can be derived from texdsp ctxs
  2024-02-11  9:04   ` Andreas Rheinhardt
@ 2024-02-11 12:36     ` Connor Worley
  2024-02-11 12:41       ` Connor Worley
  0 siblings, 1 reply; 10+ messages in thread
From: Connor Worley @ 2024-02-11 12:36 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

On Sun, Feb 11, 2024 at 1:03 AM Andreas Rheinhardt <
andreas.rheinhardt@outlook.com> wrote:

> Connor Worley:
> > -    {
> > -        int w_block = avctx->coded_width / ctx->texture_block_w;
> > -        int h_block = avctx->coded_height / ctx->texture_block_h;
> > -        if (w_block * h_block * ctx->tex_step > ctx->tex_size * 8LL)
> > -            return AVERROR_INVALIDDATA;
> > -    }
>
> You removed this check without replacement. It presumably fixed a bug.
> Did you test whether you reopened said bug?
> (I think I already asked this in an earlier iteration of this patchset.)
>
> - Andreas
>

My change redefines tex_size to be equal to or less than the left-hand-side
of that if statement, making it redundant AFAICT.
I do see the check was added to fix
10979/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_DXV_fuzzer-6178582203203584,
but I'm not familiar with the fuzzing system. If there's a way to replay
the bad input, I'd be curious to try.

-- 
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] 10+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 3/3] lavc/dxv: remove ctx fields that can be derived from texdsp ctxs
  2024-02-11 12:36     ` Connor Worley
@ 2024-02-11 12:41       ` Connor Worley
  2024-02-11 17:40         ` James Almer
  0 siblings, 1 reply; 10+ messages in thread
From: Connor Worley @ 2024-02-11 12:41 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

"or less than" is wrong -- rather tex_step seems to have been larger than
necessary in some cases. With the minimal tex_step in those cases, the new
tex_size should be equal to the LHS.
_______________________________________________
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] 10+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 3/3] lavc/dxv: remove ctx fields that can be derived from texdsp ctxs
  2024-02-11 12:41       ` Connor Worley
@ 2024-02-11 17:40         ` James Almer
  2024-02-11 23:02           ` Connor Worley
  2024-02-12  0:29           ` Connor Worley
  0 siblings, 2 replies; 10+ messages in thread
From: James Almer @ 2024-02-11 17:40 UTC (permalink / raw)
  To: ffmpeg-devel

On 2/11/2024 9:41 AM, Connor Worley wrote:
> "or less than" is wrong -- rather tex_step seems to have been larger than
> necessary in some cases. With the minimal tex_step in those cases, the new
> tex_size should be equal to the LHS.

This set broke fate when using slice threading: 
https://fate.ffmpeg.org/report.cgi?slot=x86_64-archlinux-gcc-threads-misc&time=20240211015448
_______________________________________________
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] 10+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 3/3] lavc/dxv: remove ctx fields that can be derived from texdsp ctxs
  2024-02-11 17:40         ` James Almer
@ 2024-02-11 23:02           ` Connor Worley
  2024-02-12  0:29           ` Connor Worley
  1 sibling, 0 replies; 10+ messages in thread
From: Connor Worley @ 2024-02-11 23:02 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

On Sun, Feb 11, 2024 at 9:41 AM James Almer <jamrial@gmail.com> wrote:

> On 2/11/2024 9:41 AM, Connor Worley wrote:
> > "or less than" is wrong -- rather tex_step seems to have been larger than
> > necessary in some cases. With the minimal tex_step in those cases, the
> new
> > tex_size should be equal to the LHS.
>
> This set broke fate when using slice threading:
>
> https://fate.ffmpeg.org/report.cgi?slot=x86_64-archlinux-gcc-threads-misc&time=20240211015448


Thanks, I will investigate.

-- 
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] 10+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2 3/3] lavc/dxv: remove ctx fields that can be derived from texdsp ctxs
  2024-02-11 17:40         ` James Almer
  2024-02-11 23:02           ` Connor Worley
@ 2024-02-12  0:29           ` Connor Worley
  1 sibling, 0 replies; 10+ messages in thread
From: Connor Worley @ 2024-02-12  0:29 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

On Sun, Feb 11, 2024 at 9:41 AM James Almer <jamrial@gmail.com> wrote:

> This set broke fate when using slice threading:
>
> https://fate.ffmpeg.org/report.cgi?slot=x86_64-archlinux-gcc-threads-misc&time=20240211015448
>

https://ffmpeg.org//pipermail/ffmpeg-devel/2024-February/321317.html
contains a fix.

-- 
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] 10+ messages in thread

end of thread, other threads:[~2024-02-12  0:30 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-02-10 22:58 [FFmpeg-devel] [PATCH v2 1/3] lavc/dxv: move tag definitions to common header Connor Worley
2024-02-10 22:58 ` [FFmpeg-devel] [PATCH v2 2/3] lavc/dvx: use texdsp funcs for texture block decompression Connor Worley
2024-02-10 22:58 ` [FFmpeg-devel] [PATCH v2 3/3] lavc/dxv: remove ctx fields that can be derived from texdsp ctxs Connor Worley
2024-02-10 23:42   ` Lynne
2024-02-11  9:04   ` Andreas Rheinhardt
2024-02-11 12:36     ` Connor Worley
2024-02-11 12:41       ` Connor Worley
2024-02-11 17:40         ` James Almer
2024-02-11 23:02           ` Connor Worley
2024-02-12  0:29           ` 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