|
|
|
@@ -56,7 +56,7 @@ typedef struct QtrleContext { |
|
|
|
static void qtrle_decode_1bpp(QtrleContext *s, int row_ptr, int lines_to_change) |
|
|
|
{ |
|
|
|
int rle_code; |
|
|
|
int pixel_ptr = 0; |
|
|
|
int pixel_ptr; |
|
|
|
int row_inc = s->frame.linesize[0]; |
|
|
|
unsigned char pi0, pi1; /* 2 8-pixel values */ |
|
|
|
unsigned char *rgb = s->frame.data[0]; |
|
|
|
@@ -70,8 +70,10 @@ static void qtrle_decode_1bpp(QtrleContext *s, int row_ptr, int lines_to_change) |
|
|
|
* See: https://ffmpeg.org/trac/ffmpeg/ticket/226 |
|
|
|
* In the following decoding loop, row_ptr will be the position of the |
|
|
|
* _next_ row. */ |
|
|
|
lines_to_change++; |
|
|
|
|
|
|
|
row_ptr -= row_inc; |
|
|
|
pixel_ptr = row_ptr; |
|
|
|
lines_to_change++; |
|
|
|
while (lines_to_change) { |
|
|
|
skip = bytestream2_get_byte(&s->g); |
|
|
|
rle_code = (signed char)bytestream2_get_byte(&s->g); |
|
|
|
@@ -79,8 +81,8 @@ static void qtrle_decode_1bpp(QtrleContext *s, int row_ptr, int lines_to_change) |
|
|
|
break; |
|
|
|
if(skip & 0x80) { |
|
|
|
lines_to_change--; |
|
|
|
pixel_ptr = row_ptr + 2 * (skip & 0x7f); |
|
|
|
row_ptr += row_inc; |
|
|
|
pixel_ptr = row_ptr + 2 * (skip & 0x7f); |
|
|
|
} else |
|
|
|
pixel_ptr += 2 * skip; |
|
|
|
CHECK_PIXEL_PTR(0); /* make sure pixel_ptr is positive */ |
|
|
|
|