aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2024-10-10 22:14:41 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2024-10-14 22:32:48 +0200
commitc1edec3a24306f8fa31bebe67644183741cbf0e0 (patch)
treee5b8ee5e5b26bd3bfebb86eeb90ec86747a3f5d8
parent10e5af15bf220d9da128ca12d2d474ff6ab0076e (diff)
downloadffmpeg-c1edec3a24306f8fa31bebe67644183741cbf0e0.tar.gz
avcodec/ffv1enc: Fix RCT with RGB64
Sponsored-by: Sovereign Tech Fund Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r--libavcodec/ffv1enc.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/libavcodec/ffv1enc.c b/libavcodec/ffv1enc.c
index 8295ddedf4..f1228c5252 100644
--- a/libavcodec/ffv1enc.c
+++ b/libavcodec/ffv1enc.c
@@ -988,6 +988,9 @@ static void choose_rct_params(const FFV1Context *f, FFV1SliceContext *sc,
int x, y, i, p, best;
int16_t *sample[3];
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++) {
int lastr=0, lastg=0, lastb=0;
@@ -1002,6 +1005,11 @@ static void choose_rct_params(const FFV1Context *f, FFV1SliceContext *sc,
b = v & 0xFF;
g = (v >> 8) & 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 {
b = *((const uint16_t*)(src[0] + x*2 + stride[0]*y));
g = *((const uint16_t*)(src[1] + x*2 + stride[1]*y));