Hi! Attached patch fixes the qtrle crash on sparc for me.
Please comment, Carl Eugen
From a94d32d63cff248d2eb633b162e9e4d4f7234ee5 Mon Sep 17 00:00:00 2001 From: Carl Eugen Hoyos <ceffm...@gmail.com> Date: Fri, 15 Mar 2019 00:02:48 +0100 Subject: [PATCH] lavc/qtrle: Do not used aligned writes for odd addresses. pixel_ptr can be 3. Fixes crashes on systems that do not allow unaligned access. --- libavcodec/qtrle.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/libavcodec/qtrle.c b/libavcodec/qtrle.c index a744d7b..1351532 100644 --- a/libavcodec/qtrle.c +++ b/libavcodec/qtrle.c @@ -325,7 +325,7 @@ static void qtrle_decode_24bpp(QtrleContext *s, int row_ptr, int lines_to_change CHECK_PIXEL_PTR(rle_code * 3); while (rle_code--) { - AV_WN16A(rgb + pixel_ptr, rg); + AV_WN16(rgb + pixel_ptr, rg); rgb[pixel_ptr + 2] = b; pixel_ptr += 3; } @@ -335,13 +335,13 @@ static void qtrle_decode_24bpp(QtrleContext *s, int row_ptr, int lines_to_change rle_code_half = rle_code / 2; 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_WN16A(rgb + pixel_ptr + 4, bytestream2_get_ne16(&s->g)); /* rgbr */ + AV_WN32(rgb + pixel_ptr, bytestream2_get_ne32(&s->g)); /* rgbr */ + AV_WN16(rgb + pixel_ptr + 4, bytestream2_get_ne16(&s->g)); /* rgbr */ pixel_ptr += 6; } 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); pixel_ptr += 3; } @@ -379,7 +379,7 @@ static void qtrle_decode_32bpp(QtrleContext *s, int row_ptr, int lines_to_change CHECK_PIXEL_PTR(rle_code * 4); while (rle_code--) { - AV_WN32A(rgb + pixel_ptr, argb); + AV_WN32(rgb + pixel_ptr, argb); pixel_ptr += 4; } } else { @@ -388,12 +388,12 @@ static void qtrle_decode_32bpp(QtrleContext *s, int row_ptr, int lines_to_change /* copy pixels directly to output */ rle_code_half = rle_code / 2; while (rle_code_half--) { /* copy 2 argb raw value at the same time */ - AV_WN64A(rgb + pixel_ptr, bytestream2_get_ne64(&s->g)); + AV_WN64(rgb + pixel_ptr, bytestream2_get_ne64(&s->g)); pixel_ptr += 8; } if (rle_code % 2 != 0){ /* not even raw value */ - AV_WN32A(rgb + pixel_ptr, bytestream2_get_ne32(&s->g)); + AV_WN32(rgb + pixel_ptr, bytestream2_get_ne32(&s->g)); pixel_ptr += 4; } } -- 1.7.10.4
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel