avcodec/ffv1enc: Fix RCT with RGB64

Sponsored-by: Sovereign Tech Fund
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
Michael Niedermayer 2024-10-10 22:14:41 +02:00
parent 10e5af15bf
commit c1edec3a24
No known key found for this signature in database
GPG Key ID: B18E8928B3948D64
1 changed files with 8 additions and 0 deletions

View File

@ -988,6 +988,9 @@ static void choose_rct_params(const FFV1Context *f, FFV1SliceContext *sc,
int x, y, i, p, best; int x, y, i, p, best;
int16_t *sample[3]; int16_t *sample[3];
int lbd = f->bits_per_raw_sample <= 8; int lbd = f->bits_per_raw_sample <= 8;
int packed = !src[1];
int transparency = f->transparency;
int packed_size = (3 + transparency)*2;
for (y = 0; y < h; y++) { for (y = 0; y < h; y++) {
int lastr=0, lastg=0, lastb=0; int lastr=0, lastg=0, lastb=0;
@ -1002,6 +1005,11 @@ static void choose_rct_params(const FFV1Context *f, FFV1SliceContext *sc,
b = v & 0xFF; b = v & 0xFF;
g = (v >> 8) & 0xFF; g = (v >> 8) & 0xFF;
r = (v >> 16) & 0xFF; r = (v >> 16) & 0xFF;
} else if (packed) {
const uint16_t *p = ((const uint16_t*)(src[0] + x*packed_size + stride[0]*y));
r = p[0];
g = p[1];
b = p[2];
} else { } else {
b = *((const uint16_t*)(src[0] + x*2 + stride[0]*y)); b = *((const uint16_t*)(src[0] + x*2 + stride[0]*y));
g = *((const uint16_t*)(src[1] + x*2 + stride[1]*y)); g = *((const uint16_t*)(src[1] + x*2 + stride[1]*y));