diff --git a/libavcodec/ffv1dec_template.c b/libavcodec/ffv1dec_template.c index 5894f93477..21af155bba 100644 --- a/libavcodec/ffv1dec_template.c +++ b/libavcodec/ffv1dec_template.c @@ -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; diff --git a/libavcodec/ffv1enc_template.c b/libavcodec/ffv1enc_template.c index f6c44a36a0..01aee4935b 100644 --- a/libavcodec/ffv1enc_template.c +++ b/libavcodec/ffv1enc_template.c @@ -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));