X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fbytestream.h;h=b56f6ce7436db7ff31f42897bbd4d8d647834fa9;hb=49b19191bc0e23fea139b79b2c42969bc0c501d9;hp=ae5438b49c7fe9021d16c8e664a1cb0cc685d374;hpb=fead30d4440bc7b75006ae60f2742c63a05168b3;p=ffmpeg diff --git a/libavcodec/bytestream.h b/libavcodec/bytestream.h index ae5438b49c7..b56f6ce7436 100644 --- a/libavcodec/bytestream.h +++ b/libavcodec/bytestream.h @@ -19,71 +19,53 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#ifndef FFMPEG_BYTESTREAM_H -#define FFMPEG_BYTESTREAM_H +#ifndef AVCODEC_BYTESTREAM_H +#define AVCODEC_BYTESTREAM_H -static av_always_inline unsigned int bytestream_get_le32(uint8_t **b) -{ - (*b) += 4; - return AV_RL32(*b - 4); -} +#include +#include "libavutil/common.h" +#include "libavutil/intreadwrite.h" -static av_always_inline unsigned int bytestream_get_le16(uint8_t **b) -{ - (*b) += 2; - return AV_RL16(*b - 2); +#define DEF_T(type, name, bytes, read, write) \ +static av_always_inline type bytestream_get_ ## name(const uint8_t **b){\ + (*b) += bytes;\ + return read(*b - bytes);\ +}\ +static av_always_inline void bytestream_put_ ##name(uint8_t **b, const type value){\ + write(*b, value);\ + (*b) += bytes;\ } -static av_always_inline unsigned int bytestream_get_byte(uint8_t **b) -{ - (*b)++; - return (*b)[-1]; -} +#define DEF(name, bytes, read, write) \ + DEF_T(unsigned int, name, bytes, read, write) +#define DEF64(name, bytes, read, write) \ + DEF_T(uint64_t, name, bytes, read, write) + +DEF64(le64, 8, AV_RL64, AV_WL64) +DEF (le32, 4, AV_RL32, AV_WL32) +DEF (le24, 3, AV_RL24, AV_WL24) +DEF (le16, 2, AV_RL16, AV_WL16) +DEF64(be64, 8, AV_RB64, AV_WB64) +DEF (be32, 4, AV_RB32, AV_WB32) +DEF (be24, 3, AV_RB24, AV_WB24) +DEF (be16, 2, AV_RB16, AV_WB16) +DEF (byte, 1, AV_RB8 , AV_WB8 ) -static av_always_inline unsigned int bytestream_get_buffer(uint8_t **b, uint8_t *dst, unsigned int size) +#undef DEF +#undef DEF64 +#undef DEF_T + +static av_always_inline unsigned int bytestream_get_buffer(const uint8_t **b, uint8_t *dst, unsigned int size) { memcpy(dst, *b, size); (*b) += size; return size; } -static av_always_inline void bytestream_put_be32(uint8_t **b, const unsigned int value) -{ - *(*b)++ = value >> 24; - *(*b)++ = value >> 16; - *(*b)++ = value >> 8; - *(*b)++ = value; -}; - -static av_always_inline void bytestream_put_be16(uint8_t **b, const unsigned int value) -{ - *(*b)++ = value >> 8; - *(*b)++ = value; -} - -static av_always_inline void bytestream_put_le32(uint8_t **b, const unsigned int value) -{ - *(*b)++ = value; - *(*b)++ = value >> 8; - *(*b)++ = value >> 16; - *(*b)++ = value >> 24; -} - -static av_always_inline void bytestream_put_le16(uint8_t **b, const unsigned int value) -{ - *(*b)++ = value; - *(*b)++ = value >> 8; -} - -static av_always_inline void bytestream_put_byte(uint8_t **b, const unsigned int value) -{ - *(*b)++ = value; -} - static av_always_inline void bytestream_put_buffer(uint8_t **b, const uint8_t *src, unsigned int size) { memcpy(*b, src, size); (*b) += size; } -#endif /* FFMPEG_BYTESTREAM_H */ +#endif /* AVCODEC_BYTESTREAM_H */