153a5a1b3Sopenharmony_ci#ifndef fooendianmacroshfoo
253a5a1b3Sopenharmony_ci#define fooendianmacroshfoo
353a5a1b3Sopenharmony_ci
453a5a1b3Sopenharmony_ci/***
553a5a1b3Sopenharmony_ci  This file is part of PulseAudio.
653a5a1b3Sopenharmony_ci
753a5a1b3Sopenharmony_ci  Copyright 2004-2006 Lennart Poettering
853a5a1b3Sopenharmony_ci  Copyright 2006 Pierre Ossman <ossman@cendio.se> for Cendio AB
953a5a1b3Sopenharmony_ci
1053a5a1b3Sopenharmony_ci  PulseAudio is free software; you can redistribute it and/or modify
1153a5a1b3Sopenharmony_ci  it under the terms of the GNU Lesser General Public License as published
1253a5a1b3Sopenharmony_ci  by the Free Software Foundation; either version 2.1 of the License,
1353a5a1b3Sopenharmony_ci  or (at your option) any later version.
1453a5a1b3Sopenharmony_ci
1553a5a1b3Sopenharmony_ci  PulseAudio is distributed in the hope that it will be useful, but
1653a5a1b3Sopenharmony_ci  WITHOUT ANY WARRANTY; without even the implied warranty of
1753a5a1b3Sopenharmony_ci  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1853a5a1b3Sopenharmony_ci  General Public License for more details.
1953a5a1b3Sopenharmony_ci
2053a5a1b3Sopenharmony_ci  You should have received a copy of the GNU Lesser General Public License
2153a5a1b3Sopenharmony_ci  along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
2253a5a1b3Sopenharmony_ci***/
2353a5a1b3Sopenharmony_ci
2453a5a1b3Sopenharmony_ci#include <inttypes.h>
2553a5a1b3Sopenharmony_ci
2653a5a1b3Sopenharmony_ci#ifndef PACKAGE
2753a5a1b3Sopenharmony_ci#error "Please include config.h before including this file!"
2853a5a1b3Sopenharmony_ci#endif
2953a5a1b3Sopenharmony_ci
3053a5a1b3Sopenharmony_ci#ifdef HAVE_BYTESWAP_H
3153a5a1b3Sopenharmony_ci#include <byteswap.h>
3253a5a1b3Sopenharmony_ci#endif
3353a5a1b3Sopenharmony_ci
3453a5a1b3Sopenharmony_ci#ifdef HAVE_BYTESWAP_H
3553a5a1b3Sopenharmony_ci#define PA_INT16_SWAP(x) ((int16_t) bswap_16((uint16_t) x))
3653a5a1b3Sopenharmony_ci#define PA_UINT16_SWAP(x) ((uint16_t) bswap_16((uint16_t) x))
3753a5a1b3Sopenharmony_ci#define PA_INT32_SWAP(x) ((int32_t) bswap_32((uint32_t) x))
3853a5a1b3Sopenharmony_ci#define PA_UINT32_SWAP(x) ((uint32_t) bswap_32((uint32_t) x))
3953a5a1b3Sopenharmony_ci#else
4053a5a1b3Sopenharmony_ci#define PA_INT16_SWAP(x) ( (int16_t) ( ((uint16_t) (x) >> 8) | ((uint16_t) (x) << 8) ) )
4153a5a1b3Sopenharmony_ci#define PA_UINT16_SWAP(x) ( (uint16_t) ( ((uint16_t) (x) >> 8) | ((uint16_t) (x) << 8) ) )
4253a5a1b3Sopenharmony_ci#define PA_INT32_SWAP(x) ( (int32_t) ( ((uint32_t) (x) >> 24) | ((uint32_t) (x) << 24) | (((uint32_t) (x) & 0xFF00) << 8) | ((((uint32_t) (x)) >> 8) & 0xFF00) ) )
4353a5a1b3Sopenharmony_ci#define PA_UINT32_SWAP(x) ( (uint32_t) ( ((uint32_t) (x) >> 24) | ((uint32_t) (x) << 24) | (((uint32_t) (x) & 0xFF00) << 8) | ((((uint32_t) (x)) >> 8) & 0xFF00) ) )
4453a5a1b3Sopenharmony_ci#endif
4553a5a1b3Sopenharmony_ci
4653a5a1b3Sopenharmony_cistatic inline uint32_t PA_READ24BE(const uint8_t *p) {
4753a5a1b3Sopenharmony_ci    return
4853a5a1b3Sopenharmony_ci        ((uint32_t) p[0] << 16) |
4953a5a1b3Sopenharmony_ci        ((uint32_t) p[1] << 8) |
5053a5a1b3Sopenharmony_ci        ((uint32_t) p[2]);
5153a5a1b3Sopenharmony_ci}
5253a5a1b3Sopenharmony_ci
5353a5a1b3Sopenharmony_cistatic inline uint32_t PA_READ24LE(const uint8_t *p) {
5453a5a1b3Sopenharmony_ci    return
5553a5a1b3Sopenharmony_ci        ((uint32_t) p[2] << 16) |
5653a5a1b3Sopenharmony_ci        ((uint32_t) p[1] << 8) |
5753a5a1b3Sopenharmony_ci        ((uint32_t) p[0]);
5853a5a1b3Sopenharmony_ci}
5953a5a1b3Sopenharmony_ci
6053a5a1b3Sopenharmony_cistatic inline void PA_WRITE24BE(uint8_t *p, uint32_t u) {
6153a5a1b3Sopenharmony_ci    p[0] = (uint8_t) (u >> 16);
6253a5a1b3Sopenharmony_ci    p[1] = (uint8_t) (u >> 8);
6353a5a1b3Sopenharmony_ci    p[2] = (uint8_t) u;
6453a5a1b3Sopenharmony_ci}
6553a5a1b3Sopenharmony_ci
6653a5a1b3Sopenharmony_cistatic inline void PA_WRITE24LE(uint8_t *p, uint32_t u) {
6753a5a1b3Sopenharmony_ci    p[2] = (uint8_t) (u >> 16);
6853a5a1b3Sopenharmony_ci    p[1] = (uint8_t) (u >> 8);
6953a5a1b3Sopenharmony_ci    p[0] = (uint8_t) u;
7053a5a1b3Sopenharmony_ci}
7153a5a1b3Sopenharmony_ci
7253a5a1b3Sopenharmony_cistatic inline float PA_READ_FLOAT32RE(const void *p) {
7353a5a1b3Sopenharmony_ci    union {
7453a5a1b3Sopenharmony_ci        float f;
7553a5a1b3Sopenharmony_ci        uint32_t u;
7653a5a1b3Sopenharmony_ci    } t;
7753a5a1b3Sopenharmony_ci
7853a5a1b3Sopenharmony_ci    t.u = PA_UINT32_SWAP(*(uint32_t *) p);
7953a5a1b3Sopenharmony_ci    return t.f;
8053a5a1b3Sopenharmony_ci}
8153a5a1b3Sopenharmony_ci
8253a5a1b3Sopenharmony_cistatic inline void PA_WRITE_FLOAT32RE(void *p, float x) {
8353a5a1b3Sopenharmony_ci    union {
8453a5a1b3Sopenharmony_ci        float f;
8553a5a1b3Sopenharmony_ci        uint32_t u;
8653a5a1b3Sopenharmony_ci    } t;
8753a5a1b3Sopenharmony_ci
8853a5a1b3Sopenharmony_ci    t.f = x;
8953a5a1b3Sopenharmony_ci    *(uint32_t *) p = PA_UINT32_SWAP(t.u);
9053a5a1b3Sopenharmony_ci}
9153a5a1b3Sopenharmony_ci
9253a5a1b3Sopenharmony_ci#define PA_MAYBE_INT16_SWAP(c,x) ((c) ? PA_INT16_SWAP(x) : (x))
9353a5a1b3Sopenharmony_ci#define PA_MAYBE_UINT16_SWAP(c,x) ((c) ? PA_UINT16_SWAP(x) : (x))
9453a5a1b3Sopenharmony_ci
9553a5a1b3Sopenharmony_ci#define PA_MAYBE_INT32_SWAP(c,x) ((c) ? PA_INT32_SWAP(x) : (x))
9653a5a1b3Sopenharmony_ci#define PA_MAYBE_UINT32_SWAP(c,x) ((c) ? PA_UINT32_SWAP(x) : (x))
9753a5a1b3Sopenharmony_ci
9853a5a1b3Sopenharmony_ci#ifdef WORDS_BIGENDIAN
9953a5a1b3Sopenharmony_ci #define PA_INT16_FROM_LE(x) PA_INT16_SWAP(x)
10053a5a1b3Sopenharmony_ci #define PA_INT16_FROM_BE(x) ((int16_t)(x))
10153a5a1b3Sopenharmony_ci
10253a5a1b3Sopenharmony_ci #define PA_INT16_TO_LE(x) PA_INT16_SWAP(x)
10353a5a1b3Sopenharmony_ci #define PA_INT16_TO_BE(x) ((int16_t)(x))
10453a5a1b3Sopenharmony_ci
10553a5a1b3Sopenharmony_ci #define PA_UINT16_FROM_LE(x) PA_UINT16_SWAP(x)
10653a5a1b3Sopenharmony_ci #define PA_UINT16_FROM_BE(x) ((uint16_t)(x))
10753a5a1b3Sopenharmony_ci
10853a5a1b3Sopenharmony_ci #define PA_UINT16_TO_LE(x) PA_UINT16_SWAP(x)
10953a5a1b3Sopenharmony_ci #define PA_UINT16_TO_BE(x) ((uint16_t)(x))
11053a5a1b3Sopenharmony_ci
11153a5a1b3Sopenharmony_ci #define PA_INT32_FROM_LE(x) PA_INT32_SWAP(x)
11253a5a1b3Sopenharmony_ci #define PA_INT32_FROM_BE(x) ((int32_t)(x))
11353a5a1b3Sopenharmony_ci
11453a5a1b3Sopenharmony_ci #define PA_INT32_TO_LE(x) PA_INT32_SWAP(x)
11553a5a1b3Sopenharmony_ci #define PA_INT32_TO_BE(x) ((int32_t)(x))
11653a5a1b3Sopenharmony_ci
11753a5a1b3Sopenharmony_ci #define PA_UINT32_FROM_LE(x) PA_UINT32_SWAP(x)
11853a5a1b3Sopenharmony_ci #define PA_UINT32_FROM_BE(x) ((uint32_t)(x))
11953a5a1b3Sopenharmony_ci
12053a5a1b3Sopenharmony_ci #define PA_UINT32_TO_LE(x) PA_UINT32_SWAP(x)
12153a5a1b3Sopenharmony_ci #define PA_UINT32_TO_BE(x) ((uint32_t)(x))
12253a5a1b3Sopenharmony_ci
12353a5a1b3Sopenharmony_ci #define PA_READ24NE(x) PA_READ24BE(x)
12453a5a1b3Sopenharmony_ci #define PA_WRITE24NE(x,y) PA_WRITE24BE((x),(y))
12553a5a1b3Sopenharmony_ci
12653a5a1b3Sopenharmony_ci #define PA_READ24RE(x) PA_READ24LE(x)
12753a5a1b3Sopenharmony_ci #define PA_WRITE24RE(x,y) PA_WRITE24LE((x),(y))
12853a5a1b3Sopenharmony_ci#else
12953a5a1b3Sopenharmony_ci #define PA_INT16_FROM_LE(x) ((int16_t)(x))
13053a5a1b3Sopenharmony_ci #define PA_INT16_FROM_BE(x) PA_INT16_SWAP(x)
13153a5a1b3Sopenharmony_ci
13253a5a1b3Sopenharmony_ci #define PA_INT16_TO_LE(x) ((int16_t)(x))
13353a5a1b3Sopenharmony_ci #define PA_INT16_TO_BE(x) PA_INT16_SWAP(x)
13453a5a1b3Sopenharmony_ci
13553a5a1b3Sopenharmony_ci #define PA_UINT16_FROM_LE(x) ((uint16_t)(x))
13653a5a1b3Sopenharmony_ci #define PA_UINT16_FROM_BE(x) PA_UINT16_SWAP(x)
13753a5a1b3Sopenharmony_ci
13853a5a1b3Sopenharmony_ci #define PA_UINT16_TO_LE(x) ((uint16_t)(x))
13953a5a1b3Sopenharmony_ci #define PA_UINT16_TO_BE(x) PA_UINT16_SWAP(x)
14053a5a1b3Sopenharmony_ci
14153a5a1b3Sopenharmony_ci #define PA_INT32_FROM_LE(x) ((int32_t)(x))
14253a5a1b3Sopenharmony_ci #define PA_INT32_FROM_BE(x) PA_INT32_SWAP(x)
14353a5a1b3Sopenharmony_ci
14453a5a1b3Sopenharmony_ci #define PA_INT32_TO_LE(x) ((int32_t)(x))
14553a5a1b3Sopenharmony_ci #define PA_INT32_TO_BE(x) PA_INT32_SWAP(x)
14653a5a1b3Sopenharmony_ci
14753a5a1b3Sopenharmony_ci #define PA_UINT32_FROM_LE(x) ((uint32_t)(x))
14853a5a1b3Sopenharmony_ci #define PA_UINT32_FROM_BE(x) PA_UINT32_SWAP(x)
14953a5a1b3Sopenharmony_ci
15053a5a1b3Sopenharmony_ci #define PA_UINT32_TO_LE(x) ((uint32_t)(x))
15153a5a1b3Sopenharmony_ci #define PA_UINT32_TO_BE(x) PA_UINT32_SWAP(x)
15253a5a1b3Sopenharmony_ci
15353a5a1b3Sopenharmony_ci #define PA_READ24NE(x) PA_READ24LE(x)
15453a5a1b3Sopenharmony_ci #define PA_WRITE24NE(x,y) PA_WRITE24LE((x),(y))
15553a5a1b3Sopenharmony_ci
15653a5a1b3Sopenharmony_ci #define PA_READ24RE(x) PA_READ24BE(x)
15753a5a1b3Sopenharmony_ci #define PA_WRITE24RE(x,y) PA_WRITE24BE((x),(y))
15853a5a1b3Sopenharmony_ci#endif
15953a5a1b3Sopenharmony_ci
16053a5a1b3Sopenharmony_ci#endif
161