mirror of https://git.ffmpeg.org/ffmpeg.git
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 590743101d
)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
9d0aa058c9
commit
7de7d81ee5
|
@ -76,6 +76,7 @@ try to unroll inner for(x=0 ... loop to avoid these damn if(x ... checks
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "libavutil/avutil.h"
|
#include "libavutil/avutil.h"
|
||||||
#include "libavutil/avassert.h"
|
#include "libavutil/avassert.h"
|
||||||
|
#include "libavutil/intreadwrite.h"
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@ -1009,7 +1010,7 @@ void pp_postprocess(const uint8_t * src[3], const int srcStride[3],
|
||||||
int i;
|
int i;
|
||||||
const int count= FFMAX(mbHeight * QPStride, mbWidth);
|
const int count= FFMAX(mbHeight * QPStride, mbWidth);
|
||||||
for(i=0; i<(count>>2); i++){
|
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++){
|
for(i<<=2; i<count; i++){
|
||||||
c->nonBQPTable[i] = QP_store[i] & 0x3F;
|
c->nonBQPTable[i] = QP_store[i] & 0x3F;
|
||||||
|
|
Loading…
Reference in New Issue