From: Uoti Urpala <[email protected]> The output type of the AV_RL32/AV_RB32 macros was signed int. The resulting overflow broke at least some ASF streams with large timestamps. Fix by adding a cast to uint32_t.
Signed-off-by: Ronald S. Bultje <[email protected]> --- libavutil/intreadwrite.h | 16 ++++++++-------- 1 files changed, 8 insertions(+), 8 deletions(-) diff --git a/libavutil/intreadwrite.h b/libavutil/intreadwrite.h index c8489f1..0bacdb8 100644 --- a/libavutil/intreadwrite.h +++ b/libavutil/intreadwrite.h @@ -230,10 +230,10 @@ union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias; #ifndef AV_RB32 # define AV_RB32(x) \ - ((((const uint8_t*)(x))[0] << 24) | \ - (((const uint8_t*)(x))[1] << 16) | \ - (((const uint8_t*)(x))[2] << 8) | \ - ((const uint8_t*)(x))[3]) + ((uint32_t)(((const uint8_t*)(x))[0] << 24) |\ + (((const uint8_t*)(x))[1] << 16) |\ + (((const uint8_t*)(x))[2] << 8) |\ + ((const uint8_t*)(x))[3]) #endif #ifndef AV_WB32 # define AV_WB32(p, d) do { \ @@ -246,10 +246,10 @@ union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias; #ifndef AV_RL32 # define AV_RL32(x) \ - ((((const uint8_t*)(x))[3] << 24) | \ - (((const uint8_t*)(x))[2] << 16) | \ - (((const uint8_t*)(x))[1] << 8) | \ - ((const uint8_t*)(x))[0]) + ((uint32_t)(((const uint8_t*)(x))[3] << 24) |\ + (((const uint8_t*)(x))[2] << 16) |\ + (((const uint8_t*)(x))[1] << 8) |\ + ((const uint8_t*)(x))[0]) #endif #ifndef AV_WL32 # define AV_WL32(p, d) do { \ -- 1.7.4.4 _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
