avcodec/msrledec: implement vertical offset in 4-bit RLE
authorDaniel Verkamp <daniel@drv.nu>
Tue, 29 Nov 2016 09:54:56 +0000 (10:54 +0100)
committerPaul B Mahol <onemda@gmail.com>
Tue, 29 Nov 2016 09:57:49 +0000 (10:57 +0100)
The delta escape (2) is supposed to work the same in 4-bit RLE as in
8-bit RLE.  This is documented in the MSDN Bitmap Compression page:
https://msdn.microsoft.com/en-us/library/windows/desktop/dd183383(v=vs.85).aspx

The unchecked modification of line is safe, since the loop condition
(line >= 0) will check it before any pixel data is written.

Fixes ticket #5153 (output now matches ImageMagick for the provided sample).

Signed-off-by: Daniel Verkamp <daniel@drv.nu>
libavcodec/msrledec.c

index 805802a..f0cbde6 100644 (file)
@@ -63,7 +63,7 @@ static int msrle_decode_pal4(AVCodecContext *avctx, AVFrame *pic,
                 stream_byte = bytestream2_get_byte(gb);
                 pixel_ptr += stream_byte;
                 stream_byte = bytestream2_get_byte(gb);
-                avpriv_request_sample(avctx, "Unused stream byte %X", stream_byte);
+                line -= stream_byte;
             } else {
                 // copy pixels from encoded stream
                 odd_pixel =  stream_byte & 1;