1
0
Fork 0

avcodec/dxvenc: Use proper alignment, write endian-independent output

Fixes the dxv3enc-dxt1 FATE test with UBSan and on big-endian
hardware.

Reviewed-by: James Almer <jamrial@gmail.com>
Tested-by: Sean McGovern <gseanmcg@gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
Andreas Rheinhardt 2024-02-27 00:40:32 +01:00
parent 7945d30e91
commit 0c204ce9f6
1 changed files with 3 additions and 3 deletions

View File

@ -134,7 +134,7 @@ typedef struct DXVEncContext {
if (bytestream2_get_bytes_left_p(pbc) < 4) { \ if (bytestream2_get_bytes_left_p(pbc) < 4) { \
return AVERROR_INVALIDDATA; \ return AVERROR_INVALIDDATA; \
} \ } \
value = (uint32_t*)pbc->buffer; \ value = pbc->buffer; \
bytestream2_put_le32(pbc, 0); \ bytestream2_put_le32(pbc, 0); \
state = 0; \ state = 0; \
} \ } \
@ -149,7 +149,7 @@ typedef struct DXVEncContext {
} else { \ } else { \
op = 0; \ op = 0; \
} \ } \
*value |= (op << (state * 2)); \ AV_WL32(value, AV_RL32(value) | (op << (state * 2))); \
state++; \ state++; \
} while (0) } while (0)
@ -157,7 +157,7 @@ static int dxv_compress_dxt1(AVCodecContext *avctx)
{ {
DXVEncContext *ctx = avctx->priv_data; DXVEncContext *ctx = avctx->priv_data;
PutByteContext *pbc = &ctx->pbc; PutByteContext *pbc = &ctx->pbc;
uint32_t *value; void *value;
uint32_t color, lut, idx, color_idx, lut_idx, prev_pos, state = 16, pos = 2, op = 0; uint32_t color, lut, idx, color_idx, lut_idx, prev_pos, state = 16, pos = 2, op = 0;
ht_init(ctx->color_lookback_ht); ht_init(ctx->color_lookback_ht);