annotate intreadwrite.h @ 727:98b64f65be0d libavutil

Reorganise intreadwrite.h This changes intreadwrite.h to support per-arch implementations of the various macros allowing us to take advantage of special instructions or other properties the compiler does not know about.
author mru
date Sat, 18 Apr 2009 00:00:22 +0000
parents 880c6441f56a
children 1fa3820b1a84
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
263
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
1 /*
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
2 * This file is part of FFmpeg.
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
3 *
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
4 * FFmpeg is free software; you can redistribute it and/or
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
5 * modify it under the terms of the GNU Lesser General Public
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
6 * License as published by the Free Software Foundation; either
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
7 * version 2.1 of the License, or (at your option) any later version.
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
8 *
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
9 * FFmpeg is distributed in the hope that it will be useful,
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
12 * Lesser General Public License for more details.
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
13 *
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
14 * You should have received a copy of the GNU Lesser General Public
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
15 * License along with FFmpeg; if not, write to the Free Software
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
17 */
4a904af6d8f4 Add missing license headers.
diego
parents: 235
diff changeset
18
567
bd4052d9050c Globally rename the header inclusion guard names.
stefano
parents: 525
diff changeset
19 #ifndef AVUTIL_INTREADWRITE_H
bd4052d9050c Globally rename the header inclusion guard names.
stefano
parents: 525
diff changeset
20 #define AVUTIL_INTREADWRITE_H
152
5b211d03227b Move BE_*/LE_*/ST*/LD* macros to a common place. Some further
reimar
parents:
diff changeset
21
343
f21d1907d47c include all prerequisites in header files
mru
parents: 336
diff changeset
22 #include <stdint.h>
469
bdc8433d739e Add #include "config.h" to headers that need it.
diego
parents: 444
diff changeset
23 #include "config.h"
350
c2034e89e9a2 intreadwrite.h needs bswap.h if HAVE_FAST_UNALIGNED is set, so include it.
reimar
parents: 343
diff changeset
24 #include "bswap.h"
343
f21d1907d47c include all prerequisites in header files
mru
parents: 336
diff changeset
25
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
26 /*
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
27 * Arch-specific headers can provide any combination of
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
28 * AV_[RW][BLN](16|32|64) macros. Preprocessor symbols must be
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
29 * defined, even if these are implemented as inline functions.
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
30 */
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
31
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
32
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
33 /*
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
34 * Define AV_[RW]N helper macros to simplify definitions not provided
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
35 * by per-arch headers.
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
36 */
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
37
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
38 #if defined(__GNUC__)
152
5b211d03227b Move BE_*/LE_*/ST*/LD* macros to a common place. Some further
reimar
parents:
diff changeset
39
5b211d03227b Move BE_*/LE_*/ST*/LD* macros to a common place. Some further
reimar
parents:
diff changeset
40 struct unaligned_64 { uint64_t l; } __attribute__((packed));
5b211d03227b Move BE_*/LE_*/ST*/LD* macros to a common place. Some further
reimar
parents:
diff changeset
41 struct unaligned_32 { uint32_t l; } __attribute__((packed));
5b211d03227b Move BE_*/LE_*/ST*/LD* macros to a common place. Some further
reimar
parents:
diff changeset
42 struct unaligned_16 { uint16_t l; } __attribute__((packed));
5b211d03227b Move BE_*/LE_*/ST*/LD* macros to a common place. Some further
reimar
parents:
diff changeset
43
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
44 # define AV_RN(s, p) (((const struct unaligned_##s *) (p))->l)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
45 # define AV_WN(s, p, v) (((struct unaligned_##s *) (p))->l) = (v)
152
5b211d03227b Move BE_*/LE_*/ST*/LD* macros to a common place. Some further
reimar
parents:
diff changeset
46
525
0d4beab5e3c9 intreadwrite: support DEC compiler __unaligned type qualifier
mru
parents: 524
diff changeset
47 #elif defined(__DECC)
0d4beab5e3c9 intreadwrite: support DEC compiler __unaligned type qualifier
mru
parents: 524
diff changeset
48
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
49 # define AV_RN(s, p) (*((const __unaligned uint##s##_t*)(p)))
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
50 # define AV_WN(s, p, v) *((__unaligned uint##s##_t*)(p)) = (v)
525
0d4beab5e3c9 intreadwrite: support DEC compiler __unaligned type qualifier
mru
parents: 524
diff changeset
51
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
52 #elif HAVE_FAST_UNALIGNED
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
53
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
54 # define AV_RN(s, p) (*((const uint##s##_t*)(p)))
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
55 # define AV_WN(s, p, v) *((uint##s##_t*)(p)) = (v)
525
0d4beab5e3c9 intreadwrite: support DEC compiler __unaligned type qualifier
mru
parents: 524
diff changeset
56
0d4beab5e3c9 intreadwrite: support DEC compiler __unaligned type qualifier
mru
parents: 524
diff changeset
57 #else
152
5b211d03227b Move BE_*/LE_*/ST*/LD* macros to a common place. Some further
reimar
parents:
diff changeset
58
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
59 #ifndef AV_RB16
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
60 #define AV_RB16(x) ((((const uint8_t*)(x))[0] << 8) | \
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
61 ((const uint8_t*)(x))[1])
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
62 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
63 #ifndef AV_WB16
336
f340106d09ac Proper fix for r8963
ramiro
parents: 335
diff changeset
64 #define AV_WB16(p, d) do { \
235
ee010796c631 simplify and remove useless index in AV_W*
michael
parents: 232
diff changeset
65 ((uint8_t*)(p))[1] = (d); \
336
f340106d09ac Proper fix for r8963
ramiro
parents: 335
diff changeset
66 ((uint8_t*)(p))[0] = (d)>>8; } while(0)
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
67 #endif
232
9845a508ffbd add AV_WB/WL for lswriting, similar to AV_RB/RL (also increment version)
alex
parents: 231
diff changeset
68
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
69 #ifndef AV_RL16
444
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
70 #define AV_RL16(x) ((((const uint8_t*)(x))[1] << 8) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
71 ((const uint8_t*)(x))[0])
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
72 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
73 #ifndef AV_WL16
336
f340106d09ac Proper fix for r8963
ramiro
parents: 335
diff changeset
74 #define AV_WL16(p, d) do { \
326
46b4da5bf9ed cosmetics: Reorder endianness macros by bit depth, alignment prettyprinting.
diego
parents: 282
diff changeset
75 ((uint8_t*)(p))[0] = (d); \
336
f340106d09ac Proper fix for r8963
ramiro
parents: 335
diff changeset
76 ((uint8_t*)(p))[1] = (d)>>8; } while(0)
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
77 #endif
326
46b4da5bf9ed cosmetics: Reorder endianness macros by bit depth, alignment prettyprinting.
diego
parents: 282
diff changeset
78
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
79 #ifndef AV_RB32
444
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
80 #define AV_RB32(x) ((((const uint8_t*)(x))[0] << 24) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
81 (((const uint8_t*)(x))[1] << 16) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
82 (((const uint8_t*)(x))[2] << 8) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
83 ((const uint8_t*)(x))[3])
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
84 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
85 #ifndef AV_WB32
336
f340106d09ac Proper fix for r8963
ramiro
parents: 335
diff changeset
86 #define AV_WB32(p, d) do { \
235
ee010796c631 simplify and remove useless index in AV_W*
michael
parents: 232
diff changeset
87 ((uint8_t*)(p))[3] = (d); \
ee010796c631 simplify and remove useless index in AV_W*
michael
parents: 232
diff changeset
88 ((uint8_t*)(p))[2] = (d)>>8; \
ee010796c631 simplify and remove useless index in AV_W*
michael
parents: 232
diff changeset
89 ((uint8_t*)(p))[1] = (d)>>16; \
336
f340106d09ac Proper fix for r8963
ramiro
parents: 335
diff changeset
90 ((uint8_t*)(p))[0] = (d)>>24; } while(0)
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
91 #endif
232
9845a508ffbd add AV_WB/WL for lswriting, similar to AV_RB/RL (also increment version)
alex
parents: 231
diff changeset
92
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
93 #ifndef AV_RL32
444
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
94 #define AV_RL32(x) ((((const uint8_t*)(x))[3] << 24) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
95 (((const uint8_t*)(x))[2] << 16) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
96 (((const uint8_t*)(x))[1] << 8) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
97 ((const uint8_t*)(x))[0])
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
98 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
99 #ifndef AV_WL32
336
f340106d09ac Proper fix for r8963
ramiro
parents: 335
diff changeset
100 #define AV_WL32(p, d) do { \
235
ee010796c631 simplify and remove useless index in AV_W*
michael
parents: 232
diff changeset
101 ((uint8_t*)(p))[0] = (d); \
ee010796c631 simplify and remove useless index in AV_W*
michael
parents: 232
diff changeset
102 ((uint8_t*)(p))[1] = (d)>>8; \
ee010796c631 simplify and remove useless index in AV_W*
michael
parents: 232
diff changeset
103 ((uint8_t*)(p))[2] = (d)>>16; \
336
f340106d09ac Proper fix for r8963
ramiro
parents: 335
diff changeset
104 ((uint8_t*)(p))[3] = (d)>>24; } while(0)
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
105 #endif
152
5b211d03227b Move BE_*/LE_*/ST*/LD* macros to a common place. Some further
reimar
parents:
diff changeset
106
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
107 #ifndef AV_RB64
444
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
108 #define AV_RB64(x) (((uint64_t)((const uint8_t*)(x))[0] << 56) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
109 ((uint64_t)((const uint8_t*)(x))[1] << 48) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
110 ((uint64_t)((const uint8_t*)(x))[2] << 40) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
111 ((uint64_t)((const uint8_t*)(x))[3] << 32) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
112 ((uint64_t)((const uint8_t*)(x))[4] << 24) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
113 ((uint64_t)((const uint8_t*)(x))[5] << 16) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
114 ((uint64_t)((const uint8_t*)(x))[6] << 8) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
115 (uint64_t)((const uint8_t*)(x))[7])
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
116 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
117 #ifndef AV_WB64
336
f340106d09ac Proper fix for r8963
ramiro
parents: 335
diff changeset
118 #define AV_WB64(p, d) do { \
335
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
119 ((uint8_t*)(p))[7] = (d); \
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
120 ((uint8_t*)(p))[6] = (d)>>8; \
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
121 ((uint8_t*)(p))[5] = (d)>>16; \
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
122 ((uint8_t*)(p))[4] = (d)>>24; \
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
123 ((uint8_t*)(p))[3] = (d)>>32; \
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
124 ((uint8_t*)(p))[2] = (d)>>40; \
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
125 ((uint8_t*)(p))[1] = (d)>>48; \
336
f340106d09ac Proper fix for r8963
ramiro
parents: 335
diff changeset
126 ((uint8_t*)(p))[0] = (d)>>56; } while(0)
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
127 #endif
335
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
128
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
129 #ifndef AV_RL64
444
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
130 #define AV_RL64(x) (((uint64_t)((const uint8_t*)(x))[7] << 56) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
131 ((uint64_t)((const uint8_t*)(x))[6] << 48) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
132 ((uint64_t)((const uint8_t*)(x))[5] << 40) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
133 ((uint64_t)((const uint8_t*)(x))[4] << 32) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
134 ((uint64_t)((const uint8_t*)(x))[3] << 24) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
135 ((uint64_t)((const uint8_t*)(x))[2] << 16) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
136 ((uint64_t)((const uint8_t*)(x))[1] << 8) | \
f771a4fd3534 Do not cast const away.
michael
parents: 392
diff changeset
137 (uint64_t)((const uint8_t*)(x))[0])
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
138 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
139 #ifndef AV_WL64
336
f340106d09ac Proper fix for r8963
ramiro
parents: 335
diff changeset
140 #define AV_WL64(p, d) do { \
335
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
141 ((uint8_t*)(p))[0] = (d); \
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
142 ((uint8_t*)(p))[1] = (d)>>8; \
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
143 ((uint8_t*)(p))[2] = (d)>>16; \
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
144 ((uint8_t*)(p))[3] = (d)>>24; \
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
145 ((uint8_t*)(p))[4] = (d)>>32; \
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
146 ((uint8_t*)(p))[5] = (d)>>40; \
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
147 ((uint8_t*)(p))[6] = (d)>>48; \
336
f340106d09ac Proper fix for r8963
ramiro
parents: 335
diff changeset
148 ((uint8_t*)(p))[7] = (d)>>56; } while(0)
727
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
149 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
150
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
151 #ifdef WORDS_BIGENDIAN
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
152 # define AV_RN(s, p) AV_RB##s(p)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
153 # define AV_WN(s, p, v) AV_WB##s(p, v)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
154 #else
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
155 # define AV_RN(s, p) AV_RL##s(p)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
156 # define AV_WN(s, p, v) AV_WL##s(p, v)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
157 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
158
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
159 #endif /* HAVE_FAST_UNALIGNED */
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
160
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
161 #ifndef AV_RN16
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
162 # define AV_RN16(p) AV_RN(16, p)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
163 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
164
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
165 #ifndef AV_RN32
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
166 # define AV_RN32(p) AV_RN(32, p)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
167 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
168
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
169 #ifndef AV_RN64
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
170 # define AV_RN64(p) AV_RN(64, p)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
171 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
172
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
173 #ifndef AV_WN16
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
174 # define AV_WN16(p, v) AV_WN(16, p, v)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
175 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
176
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
177 #ifndef AV_WN32
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
178 # define AV_WN32(p, v) AV_WN(32, p, v)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
179 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
180
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
181 #ifndef AV_WN64
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
182 # define AV_WN64(p, v) AV_WN(64, p, v)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
183 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
184
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
185 #ifdef WORDS_BIGENDIAN
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
186 # define AV_RB(s, p) AV_RN(s, p)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
187 # define AV_WB(s, p, v) AV_WN(s, p, v)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
188 # define AV_RL(s, p) bswap_##s(AV_RN(s, p))
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
189 # define AV_WL(s, p, v) AV_WN(s, p, bswap_##s(v))
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
190 #else
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
191 # define AV_RB(s, p) bswap_##s(AV_RN(s, p))
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
192 # define AV_WB(s, p, v) AV_WN(s, p, bswap_##s(v))
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
193 # define AV_RL(s, p) AV_RN(s, p)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
194 # define AV_WL(s, p, v) AV_WN(s, p, v)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
195 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
196
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
197 #define AV_RB8(x) (((const uint8_t*)(x))[0])
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
198 #define AV_WB8(p, d) do { ((uint8_t*)(p))[0] = (d); } while(0)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
199
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
200 #define AV_RL8(x) AV_RB8(x)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
201 #define AV_WL8(p, d) AV_WB8(p, d)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
202
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
203 #ifndef AV_RB16
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
204 # define AV_RB16(p) AV_RB(16, p)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
205 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
206 #ifndef AV_WB16
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
207 # define AV_WB16(p, v) AV_WB(16, p, v)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
208 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
209
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
210 #ifndef AV_RL16
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
211 # define AV_RL16(p) AV_RL(16, p)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
212 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
213 #ifndef AV_WL16
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
214 # define AV_WL16(p, v) AV_WL(16, p, v)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
215 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
216
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
217 #ifndef AV_RB32
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
218 # define AV_RB32(p) AV_RB(32, p)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
219 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
220 #ifndef AV_WB32
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
221 # define AV_WB32(p, v) AV_WB(32, p, v)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
222 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
223
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
224 #ifndef AV_RL32
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
225 # define AV_RL32(p) AV_RL(32, p)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
226 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
227 #ifndef AV_WL32
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
228 # define AV_WL32(p, v) AV_WL(32, p, v)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
229 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
230
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
231 #ifndef AV_RB64
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
232 # define AV_RB64(p) AV_RB(64, p)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
233 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
234 #ifndef AV_WB64
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
235 # define AV_WB64(p, v) AV_WB(64, p, v)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
236 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
237
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
238 #ifndef AV_RL64
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
239 # define AV_RL64(p) AV_RL(64, p)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
240 #endif
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
241 #ifndef AV_WL64
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
242 # define AV_WL64(p, v) AV_WL(64, p, v)
98b64f65be0d Reorganise intreadwrite.h
mru
parents: 603
diff changeset
243 #endif
524
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
244
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
245 #define AV_RB24(x) ((((const uint8_t*)(x))[0] << 16) | \
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
246 (((const uint8_t*)(x))[1] << 8) | \
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
247 ((const uint8_t*)(x))[2])
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
248 #define AV_WB24(p, d) do { \
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
249 ((uint8_t*)(p))[2] = (d); \
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
250 ((uint8_t*)(p))[1] = (d)>>8; \
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
251 ((uint8_t*)(p))[0] = (d)>>16; } while(0)
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
252
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
253 #define AV_RL24(x) ((((const uint8_t*)(x))[2] << 16) | \
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
254 (((const uint8_t*)(x))[1] << 8) | \
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
255 ((const uint8_t*)(x))[0])
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
256 #define AV_WL24(p, d) do { \
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
257 ((uint8_t*)(p))[0] = (d); \
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
258 ((uint8_t*)(p))[1] = (d)>>8; \
3cb148a1c8cd Rearrange AV_[RW][BL]*() macros
mru
parents: 469
diff changeset
259 ((uint8_t*)(p))[2] = (d)>>16; } while(0)
335
62dad9741857 add AV_[RW][BL]64 support
ivo
parents: 328
diff changeset
260
567
bd4052d9050c Globally rename the header inclusion guard names.
stefano
parents: 525
diff changeset
261 #endif /* AVUTIL_INTREADWRITE_H */