annotate libavutil/intreadwrite.h @ 9:ea1ba68cf0ed

update to match api changes + add sscc produced source
author Nina Engelhardt <nengel@mailbox.tu-berlin.de>
date Wed, 05 Jun 2013 14:43:26 +0200
parents
children
rev   line source
nengel@2 1 /*
nengel@2 2 * This file is part of FFmpeg.
nengel@2 3 *
nengel@2 4 * FFmpeg is free software; you can redistribute it and/or
nengel@2 5 * modify it under the terms of the GNU Lesser General Public
nengel@2 6 * License as published by the Free Software Foundation; either
nengel@2 7 * version 2.1 of the License, or (at your option) any later version.
nengel@2 8 *
nengel@2 9 * FFmpeg is distributed in the hope that it will be useful,
nengel@2 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
nengel@2 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
nengel@2 12 * Lesser General Public License for more details.
nengel@2 13 *
nengel@2 14 * You should have received a copy of the GNU Lesser General Public
nengel@2 15 * License along with FFmpeg; if not, write to the Free Software
nengel@2 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
nengel@2 17 */
nengel@2 18
nengel@2 19 #ifndef AVUTIL_INTREADWRITE_H
nengel@2 20 #define AVUTIL_INTREADWRITE_H
nengel@2 21
nengel@2 22 #include <stdint.h>
nengel@2 23 #include "config.h"
nengel@2 24 #include "bswap.h"
nengel@2 25 #include "common.h"
nengel@2 26
nengel@2 27 typedef union {
nengel@2 28 uint64_t u64;
nengel@2 29 uint32_t u32[2];
nengel@2 30 uint16_t u16[4];
nengel@2 31 uint8_t u8 [8];
nengel@2 32 double f64;
nengel@2 33 float f32[2];
nengel@2 34 } __attribute__((__may_alias__)) av_alias64;
nengel@2 35
nengel@2 36 typedef union {
nengel@2 37 uint32_t u32;
nengel@2 38 uint16_t u16[2];
nengel@2 39 uint8_t u8 [4];
nengel@2 40 float f32;
nengel@2 41 } __attribute__((__may_alias__)) av_alias32;
nengel@2 42
nengel@2 43 typedef union {
nengel@2 44 uint16_t u16;
nengel@2 45 uint8_t u8 [2];
nengel@2 46 } __attribute__((__may_alias__)) av_alias16 ;
nengel@2 47
nengel@2 48 /*
nengel@2 49 * Arch-specific headers can provide any combination of
nengel@2 50 * AV_[RW][BLN](16|24|32|64) and AV_(COPY|SWAP|ZERO)(64|128) macros.
nengel@2 51 * Preprocessor symbols must be defined, even if these are implemented
nengel@2 52 * as inline functions.
nengel@2 53 */
nengel@2 54
nengel@2 55 #if ARCH_ARM
nengel@2 56 # include "arm/intreadwrite.h"
nengel@2 57 #elif ARCH_PPC
nengel@2 58 # include "ppc/intreadwrite.h"
nengel@2 59 #elif ARCH_X86
nengel@2 60 # include "x86/intreadwrite.h"
nengel@2 61 #endif
nengel@2 62
nengel@2 63 /*
nengel@2 64 * Map AV_RNXX <-> AV_R[BL]XX for all variants provided by per-arch headers.
nengel@2 65 */
nengel@2 66
nengel@2 67 #if HAVE_BIGENDIAN
nengel@2 68
nengel@2 69 # if defined(AV_RN16) && !defined(AV_RB16)
nengel@2 70 # define AV_RB16(p) AV_RN16(p)
nengel@2 71 # elif !defined(AV_RN16) && defined(AV_RB16)
nengel@2 72 # define AV_RN16(p) AV_RB16(p)
nengel@2 73 # endif
nengel@2 74
nengel@2 75 # if defined(AV_WN16) && !defined(AV_WB16)
nengel@2 76 # define AV_WB16(p, v) AV_WN16(p, v)
nengel@2 77 # elif !defined(AV_WN16) && defined(AV_WB16)
nengel@2 78 # define AV_WN16(p, v) AV_WB16(p, v)
nengel@2 79 # endif
nengel@2 80
nengel@2 81 # if defined(AV_RN24) && !defined(AV_RB24)
nengel@2 82 # define AV_RB24(p) AV_RN24(p)
nengel@2 83 # elif !defined(AV_RN24) && defined(AV_RB24)
nengel@2 84 # define AV_RN24(p) AV_RB24(p)
nengel@2 85 # endif
nengel@2 86
nengel@2 87 # if defined(AV_WN24) && !defined(AV_WB24)
nengel@2 88 # define AV_WB24(p, v) AV_WN24(p, v)
nengel@2 89 # elif !defined(AV_WN24) && defined(AV_WB24)
nengel@2 90 # define AV_WN24(p, v) AV_WB24(p, v)
nengel@2 91 # endif
nengel@2 92
nengel@2 93 # if defined(AV_RN32) && !defined(AV_RB32)
nengel@2 94 # define AV_RB32(p) AV_RN32(p)
nengel@2 95 # elif !defined(AV_RN32) && defined(AV_RB32)
nengel@2 96 # define AV_RN32(p) AV_RB32(p)
nengel@2 97 # endif
nengel@2 98
nengel@2 99 # if defined(AV_WN32) && !defined(AV_WB32)
nengel@2 100 # define AV_WB32(p, v) AV_WN32(p, v)
nengel@2 101 # elif !defined(AV_WN32) && defined(AV_WB32)
nengel@2 102 # define AV_WN32(p, v) AV_WB32(p, v)
nengel@2 103 # endif
nengel@2 104
nengel@2 105 # if defined(AV_RN64) && !defined(AV_RB64)
nengel@2 106 # define AV_RB64(p) AV_RN64(p)
nengel@2 107 # elif !defined(AV_RN64) && defined(AV_RB64)
nengel@2 108 # define AV_RN64(p) AV_RB64(p)
nengel@2 109 # endif
nengel@2 110
nengel@2 111 # if defined(AV_WN64) && !defined(AV_WB64)
nengel@2 112 # define AV_WB64(p, v) AV_WN64(p, v)
nengel@2 113 # elif !defined(AV_WN64) && defined(AV_WB64)
nengel@2 114 # define AV_WN64(p, v) AV_WB64(p, v)
nengel@2 115 # endif
nengel@2 116
nengel@2 117 #else /* HAVE_BIGENDIAN */
nengel@2 118
nengel@2 119 # if defined(AV_RN16) && !defined(AV_RL16)
nengel@2 120 # define AV_RL16(p) AV_RN16(p)
nengel@2 121 # elif !defined(AV_RN16) && defined(AV_RL16)
nengel@2 122 # define AV_RN16(p) AV_RL16(p)
nengel@2 123 # endif
nengel@2 124
nengel@2 125 # if defined(AV_WN16) && !defined(AV_WL16)
nengel@2 126 # define AV_WL16(p, v) AV_WN16(p, v)
nengel@2 127 # elif !defined(AV_WN16) && defined(AV_WL16)
nengel@2 128 # define AV_WN16(p, v) AV_WL16(p, v)
nengel@2 129 # endif
nengel@2 130
nengel@2 131 # if defined(AV_RN24) && !defined(AV_RL24)
nengel@2 132 # define AV_RL24(p) AV_RN24(p)
nengel@2 133 # elif !defined(AV_RN24) && defined(AV_RL24)
nengel@2 134 # define AV_RN24(p) AV_RL24(p)
nengel@2 135 # endif
nengel@2 136
nengel@2 137 # if defined(AV_WN24) && !defined(AV_WL24)
nengel@2 138 # define AV_WL24(p, v) AV_WN24(p, v)
nengel@2 139 # elif !defined(AV_WN24) && defined(AV_WL24)
nengel@2 140 # define AV_WN24(p, v) AV_WL24(p, v)
nengel@2 141 # endif
nengel@2 142
nengel@2 143 # if defined(AV_RN32) && !defined(AV_RL32)
nengel@2 144 # define AV_RL32(p) AV_RN32(p)
nengel@2 145 # elif !defined(AV_RN32) && defined(AV_RL32)
nengel@2 146 # define AV_RN32(p) AV_RL32(p)
nengel@2 147 # endif
nengel@2 148
nengel@2 149 # if defined(AV_WN32) && !defined(AV_WL32)
nengel@2 150 # define AV_WL32(p, v) AV_WN32(p, v)
nengel@2 151 # elif !defined(AV_WN32) && defined(AV_WL32)
nengel@2 152 # define AV_WN32(p, v) AV_WL32(p, v)
nengel@2 153 # endif
nengel@2 154
nengel@2 155 # if defined(AV_RN64) && !defined(AV_RL64)
nengel@2 156 # define AV_RL64(p) AV_RN64(p)
nengel@2 157 # elif !defined(AV_RN64) && defined(AV_RL64)
nengel@2 158 # define AV_RN64(p) AV_RL64(p)
nengel@2 159 # endif
nengel@2 160
nengel@2 161 # if defined(AV_WN64) && !defined(AV_WL64)
nengel@2 162 # define AV_WL64(p, v) AV_WN64(p, v)
nengel@2 163 # elif !defined(AV_WN64) && defined(AV_WL64)
nengel@2 164 # define AV_WN64(p, v) AV_WL64(p, v)
nengel@2 165 # endif
nengel@2 166
nengel@2 167 #endif /* !HAVE_BIGENDIAN */
nengel@2 168
nengel@2 169 /*
nengel@2 170 * Define AV_[RW]N helper macros to simplify definitions not provided
nengel@2 171 * by per-arch headers.
nengel@2 172 */
nengel@2 173
nengel@2 174
nengel@2 175
nengel@2 176 #if defined(__DECC)
nengel@2 177
nengel@2 178 # define AV_RN(s, p) (*((const __unaligned uint##s##_t*)(p)))
nengel@2 179 # define AV_WN(s, p, v) (*((__unaligned uint##s##_t*)(p)) = (v))
nengel@2 180
nengel@2 181 #else
nengel@2 182
nengel@2 183 #ifndef AV_RB16
nengel@2 184 # define AV_RB16(x) \
nengel@2 185 ((((const uint8_t*)(x))[0] << 8) | \
nengel@2 186 ((const uint8_t*)(x))[1])
nengel@2 187 #endif
nengel@2 188 #ifndef AV_WB16
nengel@2 189 # define AV_WB16(p, d) do { \
nengel@2 190 ((uint8_t*)(p))[1] = (d); \
nengel@2 191 ((uint8_t*)(p))[0] = (d)>>8; \
nengel@2 192 } while(0)
nengel@2 193 #endif
nengel@2 194
nengel@2 195 #ifndef AV_RL16
nengel@2 196 # define AV_RL16(x) \
nengel@2 197 ((((const uint8_t*)(x))[1] << 8) | \
nengel@2 198 ((const uint8_t*)(x))[0])
nengel@2 199 #endif
nengel@2 200 #ifndef AV_WL16
nengel@2 201 # define AV_WL16(p, d) do { \
nengel@2 202 ((uint8_t*)(p))[0] = (d); \
nengel@2 203 ((uint8_t*)(p))[1] = (d)>>8; \
nengel@2 204 } while(0)
nengel@2 205 #endif
nengel@2 206
nengel@2 207 #ifndef AV_RB32
nengel@2 208 # define AV_RB32(x) \
nengel@2 209 ((((const uint8_t*)(x))[0] << 24) | \
nengel@2 210 (((const uint8_t*)(x))[1] << 16) | \
nengel@2 211 (((const uint8_t*)(x))[2] << 8) | \
nengel@2 212 ((const uint8_t*)(x))[3])
nengel@2 213 #endif
nengel@2 214 #ifndef AV_WB32
nengel@2 215 # define AV_WB32(p, d) do { \
nengel@2 216 ((uint8_t*)(p))[3] = (d); \
nengel@2 217 ((uint8_t*)(p))[2] = (d)>>8; \
nengel@2 218 ((uint8_t*)(p))[1] = (d)>>16; \
nengel@2 219 ((uint8_t*)(p))[0] = (d)>>24; \
nengel@2 220 } while(0)
nengel@2 221 #endif
nengel@2 222
nengel@2 223 #ifndef AV_RL32
nengel@2 224 # define AV_RL32(x) \
nengel@2 225 ((((const uint8_t*)(x))[3] << 24) | \
nengel@2 226 (((const uint8_t*)(x))[2] << 16) | \
nengel@2 227 (((const uint8_t*)(x))[1] << 8) | \
nengel@2 228 ((const uint8_t*)(x))[0])
nengel@2 229 #endif
nengel@2 230 #ifndef AV_WL32
nengel@2 231 # define AV_WL32(p, d) do { \
nengel@2 232 ((uint8_t*)(p))[0] = (d); \
nengel@2 233 ((uint8_t*)(p))[1] = (d)>>8; \
nengel@2 234 ((uint8_t*)(p))[2] = (d)>>16; \
nengel@2 235 ((uint8_t*)(p))[3] = (d)>>24; \
nengel@2 236 } while(0)
nengel@2 237 #endif
nengel@2 238
nengel@2 239 #ifndef AV_RB64
nengel@2 240 # define AV_RB64(x) \
nengel@2 241 (((uint64_t)((const uint8_t*)(x))[0] << 56) | \
nengel@2 242 ((uint64_t)((const uint8_t*)(x))[1] << 48) | \
nengel@2 243 ((uint64_t)((const uint8_t*)(x))[2] << 40) | \
nengel@2 244 ((uint64_t)((const uint8_t*)(x))[3] << 32) | \
nengel@2 245 ((uint64_t)((const uint8_t*)(x))[4] << 24) | \
nengel@2 246 ((uint64_t)((const uint8_t*)(x))[5] << 16) | \
nengel@2 247 ((uint64_t)((const uint8_t*)(x))[6] << 8) | \
nengel@2 248 (uint64_t)((const uint8_t*)(x))[7])
nengel@2 249 #endif
nengel@2 250 #ifndef AV_WB64
nengel@2 251 # define AV_WB64(p, d) do { \
nengel@2 252 ((uint8_t*)(p))[7] = (d); \
nengel@2 253 ((uint8_t*)(p))[6] = (d)>>8; \
nengel@2 254 ((uint8_t*)(p))[5] = (d)>>16; \
nengel@2 255 ((uint8_t*)(p))[4] = (d)>>24; \
nengel@2 256 ((uint8_t*)(p))[3] = (d)>>32; \
nengel@2 257 ((uint8_t*)(p))[2] = (d)>>40; \
nengel@2 258 ((uint8_t*)(p))[1] = (d)>>48; \
nengel@2 259 ((uint8_t*)(p))[0] = (d)>>56; \
nengel@2 260 } while(0)
nengel@2 261 #endif
nengel@2 262
nengel@2 263 #ifndef AV_RL64
nengel@2 264 # define AV_RL64(x) \
nengel@2 265 (((uint64_t)((const uint8_t*)(x))[7] << 56) | \
nengel@2 266 ((uint64_t)((const uint8_t*)(x))[6] << 48) | \
nengel@2 267 ((uint64_t)((const uint8_t*)(x))[5] << 40) | \
nengel@2 268 ((uint64_t)((const uint8_t*)(x))[4] << 32) | \
nengel@2 269 ((uint64_t)((const uint8_t*)(x))[3] << 24) | \
nengel@2 270 ((uint64_t)((const uint8_t*)(x))[2] << 16) | \
nengel@2 271 ((uint64_t)((const uint8_t*)(x))[1] << 8) | \
nengel@2 272 (uint64_t)((const uint8_t*)(x))[0])
nengel@2 273 #endif
nengel@2 274 #ifndef AV_WL64
nengel@2 275 # define AV_WL64(p, d) do { \
nengel@2 276 ((uint8_t*)(p))[0] = (d); \
nengel@2 277 ((uint8_t*)(p))[1] = (d)>>8; \
nengel@2 278 ((uint8_t*)(p))[2] = (d)>>16; \
nengel@2 279 ((uint8_t*)(p))[3] = (d)>>24; \
nengel@2 280 ((uint8_t*)(p))[4] = (d)>>32; \
nengel@2 281 ((uint8_t*)(p))[5] = (d)>>40; \
nengel@2 282 ((uint8_t*)(p))[6] = (d)>>48; \
nengel@2 283 ((uint8_t*)(p))[7] = (d)>>56; \
nengel@2 284 } while(0)
nengel@2 285 #endif
nengel@2 286
nengel@2 287 #if HAVE_BIGENDIAN
nengel@2 288 # define AV_RN(s, p) AV_RB##s(p)
nengel@2 289 # define AV_WN(s, p, v) AV_WB##s(p, v)
nengel@2 290 #else
nengel@2 291 # define AV_RN(s, p) AV_RL##s(p)
nengel@2 292 # define AV_WN(s, p, v) AV_WL##s(p, v)
nengel@2 293 #endif
nengel@2 294
nengel@2 295 #endif /* HAVE_FAST_UNALIGNED */
nengel@2 296
nengel@2 297 #ifndef AV_RN16
nengel@2 298 # define AV_RN16(p) AV_RN(16, p)
nengel@2 299 #endif
nengel@2 300
nengel@2 301 #ifndef AV_RN32
nengel@2 302 # define AV_RN32(p) AV_RN(32, p)
nengel@2 303 #endif
nengel@2 304
nengel@2 305 #ifndef AV_RN64
nengel@2 306 # define AV_RN64(p) AV_RN(64, p)
nengel@2 307 #endif
nengel@2 308
nengel@2 309 #ifndef AV_WN16
nengel@2 310 # define AV_WN16(p, v) AV_WN(16, p, v)
nengel@2 311 #endif
nengel@2 312
nengel@2 313 #ifndef AV_WN32
nengel@2 314 # define AV_WN32(p, v) AV_WN(32, p, v)
nengel@2 315 #endif
nengel@2 316
nengel@2 317 #ifndef AV_WN64
nengel@2 318 # define AV_WN64(p, v) AV_WN(64, p, v)
nengel@2 319 #endif
nengel@2 320
nengel@2 321 #if HAVE_BIGENDIAN
nengel@2 322 # define AV_RB(s, p) AV_RN##s(p)
nengel@2 323 # define AV_WB(s, p, v) AV_WN##s(p, v)
nengel@2 324 # define AV_RL(s, p) bswap_##s(AV_RN##s(p))
nengel@2 325 # define AV_WL(s, p, v) AV_WN##s(p, bswap_##s(v))
nengel@2 326 #else
nengel@2 327 # define AV_RB(s, p) bswap_##s(AV_RN##s(p))
nengel@2 328 # define AV_WB(s, p, v) AV_WN##s(p, bswap_##s(v))
nengel@2 329 # define AV_RL(s, p) AV_RN##s(p)
nengel@2 330 # define AV_WL(s, p, v) AV_WN##s(p, v)
nengel@2 331 #endif
nengel@2 332
nengel@2 333 #define AV_RB8(x) (((const uint8_t*)(x))[0])
nengel@2 334 #define AV_WB8(p, d) do { ((uint8_t*)(p))[0] = (d); } while(0)
nengel@2 335
nengel@2 336 #define AV_RL8(x) AV_RB8(x)
nengel@2 337 #define AV_WL8(p, d) AV_WB8(p, d)
nengel@2 338
nengel@2 339 #ifndef AV_RB16
nengel@2 340 # define AV_RB16(p) AV_RB(16, p)
nengel@2 341 #endif
nengel@2 342 #ifndef AV_WB16
nengel@2 343 # define AV_WB16(p, v) AV_WB(16, p, v)
nengel@2 344 #endif
nengel@2 345
nengel@2 346 #ifndef AV_RL16
nengel@2 347 # define AV_RL16(p) AV_RL(16, p)
nengel@2 348 #endif
nengel@2 349 #ifndef AV_WL16
nengel@2 350 # define AV_WL16(p, v) AV_WL(16, p, v)
nengel@2 351 #endif
nengel@2 352
nengel@2 353 #ifndef AV_RB32
nengel@2 354 # define AV_RB32(p) AV_RB(32, p)
nengel@2 355 #endif
nengel@2 356 #ifndef AV_WB32
nengel@2 357 # define AV_WB32(p, v) AV_WB(32, p, v)
nengel@2 358 #endif
nengel@2 359
nengel@2 360 #ifndef AV_RL32
nengel@2 361 # define AV_RL32(p) AV_RL(32, p)
nengel@2 362 #endif
nengel@2 363 #ifndef AV_WL32
nengel@2 364 # define AV_WL32(p, v) AV_WL(32, p, v)
nengel@2 365 #endif
nengel@2 366
nengel@2 367 #ifndef AV_RB64
nengel@2 368 # define AV_RB64(p) AV_RB(64, p)
nengel@2 369 #endif
nengel@2 370 #ifndef AV_WB64
nengel@2 371 # define AV_WB64(p, v) AV_WB(64, p, v)
nengel@2 372 #endif
nengel@2 373
nengel@2 374 #ifndef AV_RL64
nengel@2 375 # define AV_RL64(p) AV_RL(64, p)
nengel@2 376 #endif
nengel@2 377 #ifndef AV_WL64
nengel@2 378 # define AV_WL64(p, v) AV_WL(64, p, v)
nengel@2 379 #endif
nengel@2 380
nengel@2 381 #ifndef AV_RB24
nengel@2 382 # define AV_RB24(x) \
nengel@2 383 ((((const uint8_t*)(x))[0] << 16) | \
nengel@2 384 (((const uint8_t*)(x))[1] << 8) | \
nengel@2 385 ((const uint8_t*)(x))[2])
nengel@2 386 #endif
nengel@2 387 #ifndef AV_WB24
nengel@2 388 # define AV_WB24(p, d) do { \
nengel@2 389 ((uint8_t*)(p))[2] = (d); \
nengel@2 390 ((uint8_t*)(p))[1] = (d)>>8; \
nengel@2 391 ((uint8_t*)(p))[0] = (d)>>16; \
nengel@2 392 } while(0)
nengel@2 393 #endif
nengel@2 394
nengel@2 395 #ifndef AV_RL24
nengel@2 396 # define AV_RL24(x) \
nengel@2 397 ((((const uint8_t*)(x))[2] << 16) | \
nengel@2 398 (((const uint8_t*)(x))[1] << 8) | \
nengel@2 399 ((const uint8_t*)(x))[0])
nengel@2 400 #endif
nengel@2 401 #ifndef AV_WL24
nengel@2 402 # define AV_WL24(p, d) do { \
nengel@2 403 ((uint8_t*)(p))[0] = (d); \
nengel@2 404 ((uint8_t*)(p))[1] = (d)>>8; \
nengel@2 405 ((uint8_t*)(p))[2] = (d)>>16; \
nengel@2 406 } while(0)
nengel@2 407 #endif
nengel@2 408
nengel@2 409 /*
nengel@2 410 * The AV_[RW]NA macros access naturally aligned data
nengel@2 411 * in a type-safe way.
nengel@2 412 */
nengel@2 413
nengel@2 414 #define AV_RNA(s, p) (((const av_alias##s*)(p))->u##s)
nengel@2 415 #define AV_WNA(s, p, v) (((av_alias##s*)(p))->u##s = (v))
nengel@2 416
nengel@2 417 #ifndef AV_RN16A
nengel@2 418 # define AV_RN16A(p) AV_RNA(16, p)
nengel@2 419 #endif
nengel@2 420
nengel@2 421 #ifndef AV_RN32A
nengel@2 422 # define AV_RN32A(p) AV_RNA(32, p)
nengel@2 423 #endif
nengel@2 424
nengel@2 425 #ifndef AV_RN64A
nengel@2 426 # define AV_RN64A(p) AV_RNA(64, p)
nengel@2 427 #endif
nengel@2 428
nengel@2 429 #ifndef AV_WN16A
nengel@2 430 # define AV_WN16A(p, v) AV_WNA(16, p, v)
nengel@2 431 #endif
nengel@2 432
nengel@2 433 #ifndef AV_WN32A
nengel@2 434 # define AV_WN32A(p, v) AV_WNA(32, p, v)
nengel@2 435 #endif
nengel@2 436
nengel@2 437 #ifndef AV_WN64A
nengel@2 438 # define AV_WN64A(p, v) AV_WNA(64, p, v)
nengel@2 439 #endif
nengel@2 440
nengel@2 441 /* Parameters for AV_COPY*, AV_SWAP*, AV_ZERO* must be
nengel@2 442 * naturally aligned. They may be implemented using MMX,
nengel@2 443 * so emms_c() must be called before using any float code
nengel@2 444 * afterwards.
nengel@2 445 */
nengel@2 446
nengel@2 447 #define AV_COPY(n, d, s) \
nengel@2 448 (((av_alias##n*)(d))->u##n = ((const av_alias##n*)(s))->u##n)
nengel@2 449
nengel@2 450 #ifndef AV_COPY16
nengel@2 451 # define AV_COPY16(d, s) AV_COPY(16, d, s)
nengel@2 452 #endif
nengel@2 453
nengel@2 454 #ifndef AV_COPY32
nengel@2 455 # define AV_COPY32(d, s) AV_COPY(32, d, s)
nengel@2 456 #endif
nengel@2 457
nengel@2 458 #ifndef AV_COPY64
nengel@2 459 # define AV_COPY64(d, s) AV_COPY(64, d, s)
nengel@2 460 #endif
nengel@2 461
nengel@2 462 #ifndef AV_COPY128
nengel@2 463 # define AV_COPY128(d, s) \
nengel@2 464 do { \
nengel@2 465 AV_COPY64(d, s); \
nengel@2 466 AV_COPY64((char*)(d)+8, (char*)(s)+8); \
nengel@2 467 } while(0)
nengel@2 468 #endif
nengel@2 469
nengel@2 470 #define AV_SWAP(n, a, b) FFSWAP(av_alias##n, *(av_alias##n*)(a), *(av_alias##n*)(b))
nengel@2 471
nengel@2 472 #ifndef AV_SWAP64
nengel@2 473 # define AV_SWAP64(a, b) AV_SWAP(64, a, b)
nengel@2 474 #endif
nengel@2 475
nengel@2 476 #define AV_ZERO(n, d) (((av_alias##n*)(d))->u##n = 0)
nengel@2 477
nengel@2 478 #ifndef AV_ZERO16
nengel@2 479 # define AV_ZERO16(d) AV_ZERO(16, d)
nengel@2 480 #endif
nengel@2 481
nengel@2 482 #ifndef AV_ZERO32
nengel@2 483 # define AV_ZERO32(d) AV_ZERO(32, d)
nengel@2 484 #endif
nengel@2 485
nengel@2 486 #ifndef AV_ZERO64
nengel@2 487 # define AV_ZERO64(d) AV_ZERO(64, d)
nengel@2 488 #endif
nengel@2 489
nengel@2 490 #ifndef AV_ZERO128
nengel@2 491 # define AV_ZERO128(d) \
nengel@2 492 do { \
nengel@2 493 AV_ZERO64(d); \
nengel@2 494 AV_ZERO64((char*)(d)+8); \
nengel@2 495 } while(0)
nengel@2 496 #endif
nengel@2 497
nengel@2 498 #endif /* AVUTIL_INTREADWRITE_H */