X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fqtrle.c;h=c051d056a48f77a676b86aedef8693e128e7b84b;hb=7ff1a4b10f2d7f9a4ae1c72e1259b4ed7d13e316;hp=5acd2eb3ae36f67d75a7b9b66251d017a4c8eda3;hpb=b4581e9394c9f97d08af814d09337ed16f21cfe0;p=ffmpeg diff --git a/libavcodec/qtrle.c b/libavcodec/qtrle.c index 5acd2eb3ae3..c051d056a48 100644 --- a/libavcodec/qtrle.c +++ b/libavcodec/qtrle.c @@ -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]; @@ -69,9 +69,11 @@ static void qtrle_decode_1bpp(QtrleContext *s, int row_ptr, int lines_to_change) * would not be counted, so we count one more. * 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++; + * current row. */ + 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 */