mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-13 21:28:01 +02:00
swscale: fix crash with dithering due incorrect offset calculation.
ptrdiff_t can be 4 bytes, which leads to the next element being 4-byte aligned and thus at a different offset than intended. Forcing 8-byte alignment forces equal offset of dither16/32 on x86-32 and x86-64. Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
This commit is contained in:
parent
fdb94444be
commit
142e76f105
@ -345,10 +345,13 @@ typedef struct SwsContext {
|
|||||||
DECLARE_ALIGNED(8, uint64_t, v_temp);
|
DECLARE_ALIGNED(8, uint64_t, v_temp);
|
||||||
DECLARE_ALIGNED(8, uint64_t, y_temp);
|
DECLARE_ALIGNED(8, uint64_t, y_temp);
|
||||||
int32_t alpMmxFilter[4*MAX_FILTER_SIZE];
|
int32_t alpMmxFilter[4*MAX_FILTER_SIZE];
|
||||||
|
// alignment of these values is not necessary, but merely here
|
||||||
|
// to maintain the same offset across x8632 and x86-64. Once we
|
||||||
|
// use proper offset macros in the asm, they can be removed.
|
||||||
DECLARE_ALIGNED(8, ptrdiff_t, uv_off_px); ///< offset (in pixels) between u and v planes
|
DECLARE_ALIGNED(8, ptrdiff_t, uv_off_px); ///< offset (in pixels) between u and v planes
|
||||||
DECLARE_ALIGNED(8, ptrdiff_t, uv_off_byte); ///< offset (in bytes) between u and v planes
|
DECLARE_ALIGNED(8, ptrdiff_t, uv_off_byte); ///< offset (in bytes) between u and v planes
|
||||||
uint16_t dither16[8];
|
DECLARE_ALIGNED(8, uint16_t, dither16)[8];
|
||||||
uint32_t dither32[8];
|
DECLARE_ALIGNED(8, uint32_t, dither32)[8];
|
||||||
|
|
||||||
const uint8_t *chrDither8, *lumDither8;
|
const uint8_t *chrDither8, *lumDither8;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user