From: Kostya Shishkov <[email protected]>

Duplicate the last one or two chroma lines.

Signed-off-by: Anton Khirnov <[email protected]>
---
 libavcodec/xxan.c       |   15 +++++++++++++++
 tests/ref/fate/xxan-wc4 |   42 +++++++++++++++++++++---------------------
 2 files changed, 36 insertions(+), 21 deletions(-)

diff --git a/libavcodec/xxan.c b/libavcodec/xxan.c
index c28ba2f..1fb5a05 100644
--- a/libavcodec/xxan.c
+++ b/libavcodec/xxan.c
@@ -45,6 +45,11 @@ static av_cold int xan_decode_init(AVCodecContext *avctx)
 
     avctx->pix_fmt = AV_PIX_FMT_YUV420P;
 
+    if (avctx->height < 3) {
+        av_log(avctx, AV_LOG_ERROR, "Invalid frame height: %d.\n", 
avctx->height);
+        return AVERROR(EINVAL);
+    }
+
     s->buffer_size = avctx->width * avctx->height;
     s->y_buffer = av_malloc(s->buffer_size);
     if (!s->y_buffer)
@@ -210,6 +215,10 @@ static int xan_decode_chroma(AVCodecContext *avctx, 
unsigned chroma_off)
             U += s->pic.linesize[1];
             V += s->pic.linesize[2];
         }
+        if (avctx->height & 1) {
+            memcpy(U, U - s->pic.linesize[1], avctx->width >> 1);
+            memcpy(V, V - s->pic.linesize[2], avctx->width >> 1);
+        }
     } else {
         uint8_t *U2 = U + s->pic.linesize[1];
         uint8_t *V2 = V + s->pic.linesize[2];
@@ -230,6 +239,12 @@ static int xan_decode_chroma(AVCodecContext *avctx, 
unsigned chroma_off)
             U2 += s->pic.linesize[1] * 2;
             V2 += s->pic.linesize[2] * 2;
         }
+        if (avctx->height & 3) {
+            int lines = ((avctx->height + 1) >> 1) - (avctx->height >> 2) * 2;
+
+            memcpy(U, U - lines * s->pic.linesize[1], lines * 
s->pic.linesize[1]);
+            memcpy(V, V - lines * s->pic.linesize[2], lines * 
s->pic.linesize[2]);
+        }
     }
 
     return 0;
diff --git a/tests/ref/fate/xxan-wc4 b/tests/ref/fate/xxan-wc4
index 34857bf..88dcc98 100644
--- a/tests/ref/fate/xxan-wc4
+++ b/tests/ref/fate/xxan-wc4
@@ -1,22 +1,22 @@
 #tb 0: 1/15
-0,          0,          0,        1,    79360, 0x3b0a7d1b
-0,          1,          1,        1,    79360, 0x740842c3
-0,          2,          2,        1,    79360, 0x85160167
-0,          3,          3,        1,    79360, 0xaf510e92
-0,          4,          4,        1,    79360, 0x8e290bec
-0,          5,          5,        1,    79360, 0x51e981b0
-0,          6,          6,        1,    79360, 0x16e52c60
-0,          7,          7,        1,    79360, 0x66e1e60a
-0,          8,          8,        1,    79360, 0x40fa58f6
-0,          9,          9,        1,    79360, 0x00388edd
-0,         10,         10,        1,    79360, 0xc74f95bf
-0,         11,         11,        1,    79360, 0xf446a3fd
-0,         12,         12,        1,    79360, 0x27b5eb60
-0,         13,         13,        1,    79360, 0xea9266a2
-0,         14,         14,        1,    79360, 0x7b6a7907
-0,         15,         15,        1,    79360, 0x2be7d946
-0,         16,         16,        1,    79360, 0x61881ee4
-0,         17,         17,        1,    79360, 0x9214bd4f
-0,         18,         18,        1,    79360, 0xeb294afe
-0,         19,         19,        1,    79360, 0xc861ad55
-0,         20,         20,        1,    79360, 0x3d3b6220
+0,          0,          0,        1,    79360, 0x8537821b
+0,          1,          1,        1,    79360, 0x110c4343
+0,          2,          2,        1,    79360, 0xa85105bb
+0,          3,          3,        1,    79360, 0x87431836
+0,          4,          4,        1,    79360, 0x5c701720
+0,          5,          5,        1,    79360, 0x20308ce4
+0,          6,          6,        1,    79360, 0xe51d3794
+0,          7,          7,        1,    79360, 0x80e6f1e0
+0,          8,          8,        1,    79360, 0x5aff64cc
+0,          9,          9,        1,    79360, 0x1a3d9ab3
+0,         10,         10,        1,    79360, 0xe154a195
+0,         11,         11,        1,    79360, 0x608dafdc
+0,         12,         12,        1,    79360, 0x93edf73f
+0,         13,         13,        1,    79360, 0x56d97281
+0,         14,         14,        1,    79360, 0xe7a284e6
+0,         15,         15,        1,    79360, 0xd4e5e513
+0,         16,         16,        1,    79360, 0x0a952ab1
+0,         17,         17,        1,    79360, 0x3b21c91c
+0,         18,         18,        1,    79360, 0x943656cb
+0,         19,         19,        1,    79360, 0xffbdb94b
+0,         20,         20,        1,    79360, 0x74976e16
-- 
1.7.10.4

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to