ffmpeg | branch: master | Michael Niedermayer <[email protected]> | 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 <[email protected]>

> 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));

_______________________________________________
ffmpeg-cvslog mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog

Reply via email to