1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-08-04 22:03:09 +02:00

avcodec/sanm: codec37: reimplement comp4

Compression 4 code 0 means copy from delta buffer without mv,
AND start of a skip run.  This gets rid of the extra case and column
index manipulation and implements this as it is implemented in the
original game exe, i.e. as a special case for after mv copy.

Signed-off-by: Manuel Lauss <manuel.lauss@gmail.com>
This commit is contained in:
Manuel Lauss
2025-03-11 12:26:24 +01:00
parent fb951b26fd
commit 8a04526080

View File

@ -1106,16 +1106,17 @@ static int old_codec37(SANMVideoContext *ctx, int width, int height)
t = bytestream2_get_byteu(&ctx->gb); t = bytestream2_get_byteu(&ctx->gb);
for (k = 0; k < 4; k++) for (k = 0; k < 4; k++)
memset(dst + i + k * stride, t, 4); memset(dst + i + k * stride, t, 4);
} else if ((compr == 4) && (code == 0)) {
if (bytestream2_get_bytes_left(&ctx->gb) < 1)
return AVERROR_INVALIDDATA;
skip_run = bytestream2_get_byteu(&ctx->gb) + 1;
i -= 4;
} else { } else {
mx = c37_mv[(mvoff * 255 + code) * 2]; mx = c37_mv[(mvoff * 255 + code) * 2];
my = c37_mv[(mvoff * 255 + code) * 2 + 1]; my = c37_mv[(mvoff * 255 + code) * 2 + 1];
codec37_mv(dst + i, prev + i + mx + my * stride, codec37_mv(dst + i, prev + i + mx + my * stride,
ctx->height, stride, i + mx, j + my); ctx->height, stride, i + mx, j + my);
if ((compr == 4) && (code == 0)) {
if (bytestream2_get_bytes_left(&ctx->gb) < 1)
return AVERROR_INVALIDDATA;
skip_run = bytestream2_get_byteu(&ctx->gb);
}
} }
} }
dst += stride * 4; dst += stride * 4;