[FFmpeg-cvslog] avcodec/ffv1: Fix rgb plane ordering in experimental planar RGB

Michael Niedermayer git at videolan.org
Wed Aug 17 00:56:30 EEST 2016


ffmpeg | branch: master | Michael Niedermayer <michael at niedermayer.cc> | Tue Aug 16 23:04:00 2016 +0200| [b1d12509384b9285b85f5c183772d75a81e74009] | committer: Michael Niedermayer

avcodec/ffv1: Fix rgb plane ordering in experimental planar RGB

Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b1d12509384b9285b85f5c183772d75a81e74009
---

 libavcodec/ffv1dec_template.c | 6 +++++-
 libavcodec/ffv1enc_template.c | 4 ++++
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/libavcodec/ffv1dec_template.c b/libavcodec/ffv1dec_template.c
index 5894f93..21af155 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 f6c44a3..01aee49 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));



More information about the ffmpeg-cvslog mailing list