Commit dbecf03f authored by Carl Eugen Hoyos's avatar Carl Eugen Hoyos

lavc/qtrle: Do not use aligned writes for 24bit frames.

pixel_ptr is 3 and leads to aligned access on odd memory addresses.
Fixes crashes on systems that do not allow unaligned access like sparc32.
parent 85649b65
...@@ -325,7 +325,7 @@ static void qtrle_decode_24bpp(QtrleContext *s, int row_ptr, int lines_to_change ...@@ -325,7 +325,7 @@ static void qtrle_decode_24bpp(QtrleContext *s, int row_ptr, int lines_to_change
CHECK_PIXEL_PTR(rle_code * 3); CHECK_PIXEL_PTR(rle_code * 3);
while (rle_code--) { while (rle_code--) {
AV_WN16A(rgb + pixel_ptr, rg); AV_WN16(rgb + pixel_ptr, rg);
rgb[pixel_ptr + 2] = b; rgb[pixel_ptr + 2] = b;
pixel_ptr += 3; pixel_ptr += 3;
} }
...@@ -335,13 +335,13 @@ static void qtrle_decode_24bpp(QtrleContext *s, int row_ptr, int lines_to_change ...@@ -335,13 +335,13 @@ static void qtrle_decode_24bpp(QtrleContext *s, int row_ptr, int lines_to_change
rle_code_half = rle_code / 2; rle_code_half = rle_code / 2;
while (rle_code_half--) { /* copy 2 raw rgb value at the same time */ while (rle_code_half--) { /* copy 2 raw rgb value at the same time */
AV_WN32A(rgb + pixel_ptr, bytestream2_get_ne32(&s->g)); /* rgbr */ AV_WN32(rgb + pixel_ptr, bytestream2_get_ne32(&s->g)); /* rgbr */
AV_WN16A(rgb + pixel_ptr + 4, bytestream2_get_ne16(&s->g)); /* rgbr */ AV_WN16(rgb + pixel_ptr + 4, bytestream2_get_ne16(&s->g)); /* rgbr */
pixel_ptr += 6; pixel_ptr += 6;
} }
if (rle_code % 2 != 0){ /* not even raw value */ if (rle_code % 2 != 0){ /* not even raw value */
AV_WN16A(rgb + pixel_ptr, bytestream2_get_ne16(&s->g)); AV_WN16(rgb + pixel_ptr, bytestream2_get_ne16(&s->g));
rgb[pixel_ptr + 2] = bytestream2_get_byte(&s->g); rgb[pixel_ptr + 2] = bytestream2_get_byte(&s->g);
pixel_ptr += 3; pixel_ptr += 3;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment