On 18.06.2015 22:26, Michael Niedermayer wrote: > On Thu, Jun 18, 2015 at 08:29:06PM +0200, Andreas Cadhalpun wrote: >> QP_store is only 8-bit-aligned, so accessing it as uint32_t causes >> SIGILL crashes on sparc. >> >> Signed-off-by: Andreas Cadhalpun <andreas.cadhal...@googlemail.com> >> --- >> libpostproc/postprocess.c | 5 +---- >> 1 file changed, 1 insertion(+), 4 deletions(-) >> >> diff --git a/libpostproc/postprocess.c b/libpostproc/postprocess.c >> index 92cc436..e4ea515 100644 >> --- a/libpostproc/postprocess.c >> +++ b/libpostproc/postprocess.c >> @@ -996,10 +996,7 @@ void pp_postprocess(const uint8_t * src[3], const int >> srcStride[3], >> if (QPStride >= 0){ >> int i; >> const int count= FFMAX(mbHeight * QPStride, mbWidth); >> - for(i=0; i<(count>>2); i++){ >> - ((uint32_t*)c->nonBQPTable)[i] = ((const >> uint32_t*)QP_store)[i] & 0x3F3F3F3F; >> - } >> - for(i<<=2; i<count; i++){ > > maybe this can be left under #if HAVE_FAST_UNALIGNED with > AV_RN32 AV_WN32
Yes, updated patch attached. Best regards, Andreas
>From 92662bfcebb5a49b3f6728d18582f1ae7205bcb3 Mon Sep 17 00:00:00 2001 From: Andreas Cadhalpun <andreas.cadhal...@googlemail.com> Date: Thu, 18 Jun 2015 20:15:12 +0200 Subject: [PATCH] postproc: fix unaligned access QP_store is only 8-bit-aligned, so accessing it as uint32_t causes SIGBUS crashes on sparc. The AV_RN32/AV_WN32 macros only do unaligned access in the HAVE_FAST_UNALIGNED case. Signed-off-by: Andreas Cadhalpun <andreas.cadhal...@googlemail.com> --- libpostproc/postprocess.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libpostproc/postprocess.c b/libpostproc/postprocess.c index 92cc436..3b86f93 100644 --- a/libpostproc/postprocess.c +++ b/libpostproc/postprocess.c @@ -76,6 +76,7 @@ try to unroll inner for(x=0 ... loop to avoid these damn if(x ... checks #include "config.h" #include "libavutil/avutil.h" #include "libavutil/avassert.h" +#include "libavutil/intreadwrite.h" #include <inttypes.h> #include <stdio.h> #include <stdlib.h> @@ -997,7 +998,7 @@ void pp_postprocess(const uint8_t * src[3], const int srcStride[3], int i; const int count= FFMAX(mbHeight * QPStride, mbWidth); for(i=0; i<(count>>2); i++){ - ((uint32_t*)c->nonBQPTable)[i] = ((const uint32_t*)QP_store)[i] & 0x3F3F3F3F; + AV_WN32(c->nonBQPTable + (i<<2), AV_RN32(QP_store + (i<<2)) & 0x3F3F3F3F); } for(i<<=2; i<count; i++){ c->nonBQPTable[i] = QP_store[i] & 0x3F; -- 2.1.4
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel