04d7f601 |
/*
* copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
* |
b78e7197 |
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or |
04d7f601 |
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either |
b78e7197 |
* version 2.1 of the License, or (at your option) any later version. |
04d7f601 |
* |
b78e7197 |
* FFmpeg is distributed in the hope that it will be useful, |
04d7f601 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public |
b78e7197 |
* License along with FFmpeg; if not, write to the Free Software |
04d7f601 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
|
983e3246 |
/** |
ba87f080 |
* @file |
7ce68923 |
* byte swapping routines |
983e3246 |
*/
|
98790382 |
#ifndef AVUTIL_BSWAP_H
#define AVUTIL_BSWAP_H |
a9b3f630 |
|
99545457 |
#include <stdint.h> |
1fc81e73 |
#include "libavutil/avconfig.h" |
2ed6f399 |
#include "attributes.h" |
99545457 |
|
1fc81e73 |
#ifdef HAVE_AV_CONFIG_H
#include "config.h"
|
d0cd2a8c |
#if ARCH_AARCH64
# include "aarch64/bswap.h"
#elif ARCH_ARM |
3a90480a |
# include "arm/bswap.h" |
e482c2e2 |
#elif ARCH_AVR32
# include "avr32/bswap.h" |
b250f9c6 |
#elif ARCH_SH4 |
3a90480a |
# include "sh4/bswap.h" |
b250f9c6 |
#elif ARCH_X86 |
3a90480a |
# include "x86/bswap.h"
#endif
|
1fc81e73 |
#endif /* HAVE_AV_CONFIG_H */
|
547b7bcb |
#define AV_BSWAP16C(x) (((x) << 8 & 0xff00) | ((x) >> 8 & 0x00ff)) |
cc6849ae |
#define AV_BSWAP32C(x) (AV_BSWAP16C(x) << 16 | AV_BSWAP16C((x) >> 16))
#define AV_BSWAP64C(x) (AV_BSWAP32C(x) << 32 | AV_BSWAP32C((x) >> 32)) |
547b7bcb |
#define AV_BSWAPC(s, x) AV_BSWAP##s##C(x)
|
8fc0162a |
#ifndef av_bswap16
static av_always_inline av_const uint16_t av_bswap16(uint16_t x) |
a9b3f630 |
{ |
bf5d7db5 |
x= (x>>8) | (x<<8); |
a9b3f630 |
return x;
} |
3a90480a |
#endif |
a9b3f630 |
|
8fc0162a |
#ifndef av_bswap32
static av_always_inline av_const uint32_t av_bswap32(uint32_t x) |
a9b3f630 |
{ |
f64c2e71 |
return AV_BSWAP32C(x); |
24dea064 |
} |
3a90480a |
#endif |
a9b3f630 |
|
8fc0162a |
#ifndef av_bswap64
static inline uint64_t av_const av_bswap64(uint64_t x) |
74fc9989 |
{ |
f64c2e71 |
return (uint64_t)av_bswap32(x) << 32 | av_bswap32(x >> 32); |
74fc9989 |
} |
3a90480a |
#endif |
a9b3f630 |
|
e6b22522 |
// be2ne ... big-endian to native-endian
// le2ne ... little-endian to native-endian |
a9b3f630 |
|
1fc81e73 |
#if AV_HAVE_BIGENDIAN |
8fc0162a |
#define av_be2ne16(x) (x)
#define av_be2ne32(x) (x)
#define av_be2ne64(x) (x)
#define av_le2ne16(x) av_bswap16(x)
#define av_le2ne32(x) av_bswap32(x)
#define av_le2ne64(x) av_bswap64(x) |
e6b22522 |
#define AV_BE2NEC(s, x) (x)
#define AV_LE2NEC(s, x) AV_BSWAPC(s, x) |
a9b3f630 |
#else |
8fc0162a |
#define av_be2ne16(x) av_bswap16(x)
#define av_be2ne32(x) av_bswap32(x)
#define av_be2ne64(x) av_bswap64(x)
#define av_le2ne16(x) (x)
#define av_le2ne32(x) (x)
#define av_le2ne64(x) (x) |
e6b22522 |
#define AV_BE2NEC(s, x) AV_BSWAPC(s, x)
#define AV_LE2NEC(s, x) (x) |
a9b3f630 |
#endif
|
e6b22522 |
#define AV_BE2NE16C(x) AV_BE2NEC(16, x)
#define AV_BE2NE32C(x) AV_BE2NEC(32, x)
#define AV_BE2NE64C(x) AV_BE2NEC(64, x)
#define AV_LE2NE16C(x) AV_LE2NEC(16, x)
#define AV_LE2NE32C(x) AV_LE2NEC(32, x)
#define AV_LE2NE64C(x) AV_LE2NEC(64, x) |
547b7bcb |
|
98790382 |
#endif /* AVUTIL_BSWAP_H */ |