diff options
author | Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com> | 2015-06-18 20:15:12 +0200 |
---|---|---|
committer | Michael Niedermayer <michael@niedermayer.cc> | 2015-08-20 14:38:25 +0200 |
commit | 7de7d81ee55adbe77650f61831fa8b0c3e4159fa (patch) | |
tree | 6688e4293c520fc517fac1007725db7fefe0a2fd | |
parent | 9d0aa058c997db60de84d2e05b08dabead9cb6e0 (diff) | |
download | ffmpeg-7de7d81ee55adbe77650f61831fa8b0c3e4159fa.tar.gz |
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.
Reviewed-by: Michael Niedermayer <michaelni@gmx.at>
Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
(cherry picked from commit 590743101dc934043f34013f1c9bb9fb261355b0)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libpostproc/postprocess.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/libpostproc/postprocess.c b/libpostproc/postprocess.c index a42b0794a5..c1deb71ec9 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> @@ -1009,7 +1010,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; |