|
|
|
@ -47,7 +47,7 @@ typedef union { |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Arch-specific headers can provide any combination of |
|
|
|
|
* AV_[RW][BLN](16|24|32|64) and AV_(COPY|SWAP|ZERO)(64|128) macros. |
|
|
|
|
* AV_[RW][BLN](16|24|32|48|64) and AV_(COPY|SWAP|ZERO)(64|128) macros. |
|
|
|
|
* Preprocessor symbols must be defined, even if these are implemented |
|
|
|
|
* as inline functions. |
|
|
|
|
*/ |
|
|
|
@ -114,6 +114,18 @@ typedef union { |
|
|
|
|
# define AV_WN32(p, v) AV_WB32(p, v) |
|
|
|
|
# endif |
|
|
|
|
|
|
|
|
|
# if defined(AV_RN48) && !defined(AV_RB48) |
|
|
|
|
# define AV_RB48(p) AV_RN48(p) |
|
|
|
|
# elif !defined(AV_RN48) && defined(AV_RB48) |
|
|
|
|
# define AV_RN48(p) AV_RB48(p) |
|
|
|
|
# endif |
|
|
|
|
|
|
|
|
|
# if defined(AV_WN48) && !defined(AV_WB48) |
|
|
|
|
# define AV_WB48(p, v) AV_WN48(p, v) |
|
|
|
|
# elif !defined(AV_WN48) && defined(AV_WB48) |
|
|
|
|
# define AV_WN48(p, v) AV_WB48(p, v) |
|
|
|
|
# endif |
|
|
|
|
|
|
|
|
|
# if defined(AV_RN64) && !defined(AV_RB64) |
|
|
|
|
# define AV_RB64(p) AV_RN64(p) |
|
|
|
|
# elif !defined(AV_RN64) && defined(AV_RB64) |
|
|
|
@ -164,6 +176,18 @@ typedef union { |
|
|
|
|
# define AV_WN32(p, v) AV_WL32(p, v) |
|
|
|
|
# endif |
|
|
|
|
|
|
|
|
|
# if defined(AV_RN48) && !defined(AV_RL48) |
|
|
|
|
# define AV_RL48(p) AV_RN48(p) |
|
|
|
|
# elif !defined(AV_RN48) && defined(AV_RL48) |
|
|
|
|
# define AV_RN48(p) AV_RL48(p) |
|
|
|
|
# endif |
|
|
|
|
|
|
|
|
|
# if defined(AV_WN48) && !defined(AV_WL48) |
|
|
|
|
# define AV_WL48(p, v) AV_WN48(p, v) |
|
|
|
|
# elif !defined(AV_WN48) && defined(AV_WL48) |
|
|
|
|
# define AV_WN48(p, v) AV_WL48(p, v) |
|
|
|
|
# endif |
|
|
|
|
|
|
|
|
|
# if defined(AV_RN64) && !defined(AV_RL64) |
|
|
|
|
# define AV_RL64(p) AV_RN64(p) |
|
|
|
|
# elif !defined(AV_RN64) && defined(AV_RL64) |
|
|
|
@ -436,6 +460,48 @@ union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias; |
|
|
|
|
} while(0) |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
#ifndef AV_RB48 |
|
|
|
|
# define AV_RB48(x) \ |
|
|
|
|
(((uint64_t)((const uint8_t*)(x))[0] << 40) | \
|
|
|
|
|
((uint64_t)((const uint8_t*)(x))[1] << 32) | \
|
|
|
|
|
((uint64_t)((const uint8_t*)(x))[2] << 24) | \
|
|
|
|
|
((uint64_t)((const uint8_t*)(x))[3] << 16) | \
|
|
|
|
|
((uint64_t)((const uint8_t*)(x))[4] << 8) | \
|
|
|
|
|
(uint64_t)((const uint8_t*)(x))[5]) |
|
|
|
|
#endif |
|
|
|
|
#ifndef AV_WB48 |
|
|
|
|
# define AV_WB48(p, darg) do { \ |
|
|
|
|
uint64_t d = (darg); \
|
|
|
|
|
((uint8_t*)(p))[5] = (d); \
|
|
|
|
|
((uint8_t*)(p))[4] = (d)>>8; \
|
|
|
|
|
((uint8_t*)(p))[3] = (d)>>16; \
|
|
|
|
|
((uint8_t*)(p))[2] = (d)>>24; \
|
|
|
|
|
((uint8_t*)(p))[1] = (d)>>32; \
|
|
|
|
|
((uint8_t*)(p))[0] = (d)>>40; \
|
|
|
|
|
} while(0) |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
#ifndef AV_RL48 |
|
|
|
|
# define AV_RL48(x) \ |
|
|
|
|
(((uint64_t)((const uint8_t*)(x))[5] << 40) | \
|
|
|
|
|
((uint64_t)((const uint8_t*)(x))[4] << 32) | \
|
|
|
|
|
((uint64_t)((const uint8_t*)(x))[3] << 24) | \
|
|
|
|
|
((uint64_t)((const uint8_t*)(x))[2] << 16) | \
|
|
|
|
|
((uint64_t)((const uint8_t*)(x))[1] << 8) | \
|
|
|
|
|
(uint64_t)((const uint8_t*)(x))[0]) |
|
|
|
|
#endif |
|
|
|
|
#ifndef AV_WL48 |
|
|
|
|
# define AV_WL48(p, darg) do { \ |
|
|
|
|
uint64_t d = (darg); \
|
|
|
|
|
((uint8_t*)(p))[0] = (d); \
|
|
|
|
|
((uint8_t*)(p))[1] = (d)>>8; \
|
|
|
|
|
((uint8_t*)(p))[2] = (d)>>16; \
|
|
|
|
|
((uint8_t*)(p))[3] = (d)>>24; \
|
|
|
|
|
((uint8_t*)(p))[4] = (d)>>32; \
|
|
|
|
|
((uint8_t*)(p))[5] = (d)>>40; \
|
|
|
|
|
} while(0) |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* The AV_[RW]NA macros access naturally aligned data |
|
|
|
|
* in a type-safe way. |
|
|
|
|