aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2016-08-16 23:04:00 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2016-08-16 23:04:00 +0200
commitb1d12509384b9285b85f5c183772d75a81e74009 (patch)
tree924ac856a8048aae63d2ecb135444cacd2358337 /libavcodec
parent87da1188981fbfa802d1ccfe22bf32cc76f52ada (diff)
downloadffmpeg-b1d12509384b9285b85f5c183772d75a81e74009.tar.gz
avcodec/ffv1: Fix rgb plane ordering in experimental planar RGB
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/ffv1dec_template.c6
-rw-r--r--libavcodec/ffv1enc_template.c4
2 files changed, 9 insertions, 1 deletions
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));