avcodec/ffv1: Fix rgb plane ordering in experimental planar RGB
authorMichael Niedermayer <michael@niedermayer.cc>
Tue, 16 Aug 2016 21:04:00 +0000 (23:04 +0200)
committerMichael Niedermayer <michael@niedermayer.cc>
Tue, 16 Aug 2016 21:04:00 +0000 (23:04 +0200)
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
libavcodec/ffv1dec_template.c
libavcodec/ffv1enc_template.c

index 5894f93..21af155 100644 (file)
@@ -150,7 +150,11 @@ static void RENAME(decode_rgb_frame)(FFV1Context *s, uint8_t *src[3], int w, int
 
             if (lbd)
                 *((uint32_t*)(src[0] + x*4 + stride[0]*y)) = b + (g<<8) + (r<<16) + (a<<24);
-            else {
+            else if (sizeof(TYPE) == 4) {
+                *((uint16_t*)(src[0] + x*2 + stride[0]*y)) = g;
+                *((uint16_t*)(src[1] + x*2 + stride[1]*y)) = b;
+                *((uint16_t*)(src[2] + x*2 + stride[2]*y)) = r;
+            } else {
                 *((uint16_t*)(src[0] + x*2 + stride[0]*y)) = b;
                 *((uint16_t*)(src[1] + x*2 + stride[1]*y)) = g;
                 *((uint16_t*)(src[2] + x*2 + stride[2]*y)) = r;
index f6c44a3..01aee49 100644 (file)
@@ -150,6 +150,10 @@ static int RENAME(encode_rgb_frame)(FFV1Context *s, const uint8_t *src[3],
                 g = (v >>  8) & 0xFF;
                 r = (v >> 16) & 0xFF;
                 a =  v >> 24;
+            } else if (sizeof(TYPE) == 4) {
+                g = *((const uint16_t *)(src[0] + x*2 + stride[0]*y));
+                b = *((const uint16_t *)(src[1] + x*2 + stride[1]*y));
+                r = *((const uint16_t *)(src[2] + x*2 + stride[2]*y));
             } else {
                 b = *((const uint16_t *)(src[0] + x*2 + stride[0]*y));
                 g = *((const uint16_t *)(src[1] + x*2 + stride[1]*y));