Hi, 2011/7/10 Måns Rullgård <[email protected]>: > "Ronald S. Bultje" <[email protected]> writes: >> 2011/7/10 Måns Rullgård <[email protected]>: >>> "Ronald S. Bultje" <[email protected]> writes: >>>> 2011/7/10 Måns Rullgård <[email protected]>: >>>>> "Ronald S. Bultje" <[email protected]> writes: >>>>> >>>>>> From: Anton Mitrofanov <[email protected]> >>>>>> >>>>>> ptrdiff_t can be 4 bytes, which leads to the next element being 4-byte >>>>>> aligned and thus at a different offset than intended. Using a fixed >>>>>> 8-byte >>>>>> element for uv_off_px/byte fixes that. >>>>>> >>>>>> Signed-off-by: Ronald S. Bultje <[email protected]> >>>>>> --- >>>>>> libswscale/swscale_internal.h | 4 ++-- >>>>>> 1 files changed, 2 insertions(+), 2 deletions(-) >>>>>> >>>>>> diff --git a/libswscale/swscale_internal.h >>>>>> b/libswscale/swscale_internal.h >>>>>> index b602541..7166667 100644 >>>>>> --- a/libswscale/swscale_internal.h >>>>>> +++ b/libswscale/swscale_internal.h >>>>>> @@ -345,8 +345,8 @@ typedef struct SwsContext { >>>>>> DECLARE_ALIGNED(8, uint64_t, v_temp); >>>>>> DECLARE_ALIGNED(8, uint64_t, y_temp); >>>>>> int32_t alpMmxFilter[4*MAX_FILTER_SIZE]; >>>>>> - 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, int64_t, uv_off_px); ///< offset (in pixels) >>>>>> between u and v planes >>>>>> + DECLARE_ALIGNED(8, int64_t, uv_off_byte); ///< offset (in bytes) >>>>>> between u and v planes >>>>>> uint16_t dither16[8]; >>>>>> uint32_t dither32[8]; >>>>>> >>>>>> -- >>>>> >>>>> What is this supposed to fix, and why are those things declared with >>>>> extra alignment at all? It makes no sense. >>>> >>>> It fixes ptrdiff_t being 4 bytes on x86-32, and then dither16 being at >>>> a different address. We hardcode the offset from dither16 somewhere >>>> for use in assembly. >>> >>> Don't do that then. If you must hardcode offsets, put those early in >>> the struct, before any variably sized elements. >> >> That wouldn't fix anything, we use uv_off_px/byte in asm also. > > So fix the asm.
On my lit of things to do. Not as easy as it sounds. Ronald _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
