19 #ifndef AVUTIL_INTREADWRITE_H 20 #define AVUTIL_INTREADWRITE_H 55 #ifdef HAVE_AV_CONFIG_H 81 # if defined(AV_RN16) && !defined(AV_RB16) 82 # define AV_RB16(p) AV_RN16(p) 83 # elif !defined(AV_RN16) && defined(AV_RB16) 84 # define AV_RN16(p) AV_RB16(p) 87 # if defined(AV_WN16) && !defined(AV_WB16) 88 # define AV_WB16(p, v) AV_WN16(p, v) 89 # elif !defined(AV_WN16) && defined(AV_WB16) 90 # define AV_WN16(p, v) AV_WB16(p, v) 93 # if defined(AV_RN24) && !defined(AV_RB24) 94 # define AV_RB24(p) AV_RN24(p) 95 # elif !defined(AV_RN24) && defined(AV_RB24) 96 # define AV_RN24(p) AV_RB24(p) 99 # if defined(AV_WN24) && !defined(AV_WB24) 100 # define AV_WB24(p, v) AV_WN24(p, v) 101 # elif !defined(AV_WN24) && defined(AV_WB24) 102 # define AV_WN24(p, v) AV_WB24(p, v) 105 # if defined(AV_RN32) && !defined(AV_RB32) 106 # define AV_RB32(p) AV_RN32(p) 107 # elif !defined(AV_RN32) && defined(AV_RB32) 108 # define AV_RN32(p) AV_RB32(p) 111 # if defined(AV_WN32) && !defined(AV_WB32) 112 # define AV_WB32(p, v) AV_WN32(p, v) 113 # elif !defined(AV_WN32) && defined(AV_WB32) 114 # define AV_WN32(p, v) AV_WB32(p, v) 117 # if defined(AV_RN64) && !defined(AV_RB64) 118 # define AV_RB64(p) AV_RN64(p) 119 # elif !defined(AV_RN64) && defined(AV_RB64) 120 # define AV_RN64(p) AV_RB64(p) 123 # if defined(AV_WN64) && !defined(AV_WB64) 124 # define AV_WB64(p, v) AV_WN64(p, v) 125 # elif !defined(AV_WN64) && defined(AV_WB64) 126 # define AV_WN64(p, v) AV_WB64(p, v) 131 # if defined(AV_RN16) && !defined(AV_RL16) 132 # define AV_RL16(p) AV_RN16(p) 133 # elif !defined(AV_RN16) && defined(AV_RL16) 134 # define AV_RN16(p) AV_RL16(p) 137 # if defined(AV_WN16) && !defined(AV_WL16) 138 # define AV_WL16(p, v) AV_WN16(p, v) 139 # elif !defined(AV_WN16) && defined(AV_WL16) 140 # define AV_WN16(p, v) AV_WL16(p, v) 143 # if defined(AV_RN24) && !defined(AV_RL24) 144 # define AV_RL24(p) AV_RN24(p) 145 # elif !defined(AV_RN24) && defined(AV_RL24) 146 # define AV_RN24(p) AV_RL24(p) 149 # if defined(AV_WN24) && !defined(AV_WL24) 150 # define AV_WL24(p, v) AV_WN24(p, v) 151 # elif !defined(AV_WN24) && defined(AV_WL24) 152 # define AV_WN24(p, v) AV_WL24(p, v) 155 # if defined(AV_RN32) && !defined(AV_RL32) 156 # define AV_RL32(p) AV_RN32(p) 157 # elif !defined(AV_RN32) && defined(AV_RL32) 158 # define AV_RN32(p) AV_RL32(p) 161 # if defined(AV_WN32) && !defined(AV_WL32) 162 # define AV_WL32(p, v) AV_WN32(p, v) 163 # elif !defined(AV_WN32) && defined(AV_WL32) 164 # define AV_WN32(p, v) AV_WL32(p, v) 167 # if defined(AV_RN64) && !defined(AV_RL64) 168 # define AV_RL64(p) AV_RN64(p) 169 # elif !defined(AV_RN64) && defined(AV_RL64) 170 # define AV_RN64(p) AV_RL64(p) 173 # if defined(AV_WN64) && !defined(AV_WL64) 174 # define AV_WL64(p, v) AV_WN64(p, v) 175 # elif !defined(AV_WN64) && defined(AV_WL64) 176 # define AV_WN64(p, v) AV_WL64(p, v) 186 #if defined(__GNUC__) && !defined(__TI_COMPILER_VERSION__) 188 union unaligned_64 { uint64_t l; } __attribute__((packed))
av_alias;
189 union unaligned_32 { uint32_t l; } __attribute__((packed))
av_alias;
190 union unaligned_16 { uint16_t l; } __attribute__((packed))
av_alias;
192 # define AV_RN(s, p) (((const union unaligned_##s *) (p))->l) 193 # define AV_WN(s, p, v) ((((union unaligned_##s *) (p))->l) = (v)) 195 #elif defined(__DECC) 197 # define AV_RN(s, p) (*((const __unaligned uint##s##_t*)(p))) 198 # define AV_WN(s, p, v) (*((__unaligned uint##s##_t*)(p)) = (v)) 200 #elif defined(_MSC_VER) && (defined(_M_ARM) || defined(_M_X64)) && AV_HAVE_FAST_UNALIGNED 202 # define AV_RN(s, p) (*((const __unaligned uint##s##_t*)(p))) 203 # define AV_WN(s, p, v) (*((__unaligned uint##s##_t*)(p)) = (v)) 205 #elif AV_HAVE_FAST_UNALIGNED 207 # define AV_RN(s, p) (((const av_alias##s*)(p))->u##s) 208 # define AV_WN(s, p, v) (((av_alias##s*)(p))->u##s = (v)) 213 # define AV_RB16(x) \ 214 ((((const uint8_t*)(x))[0] << 8) | \ 215 ((const uint8_t*)(x))[1]) 218 # define AV_WB16(p, val) do { \ 220 ((uint8_t*)(p))[1] = (d); \ 221 ((uint8_t*)(p))[0] = (d)>>8; \ 226 # define AV_RL16(x) \ 227 ((((const uint8_t*)(x))[1] << 8) | \ 228 ((const uint8_t*)(x))[0]) 231 # define AV_WL16(p, val) do { \ 233 ((uint8_t*)(p))[0] = (d); \ 234 ((uint8_t*)(p))[1] = (d)>>8; \ 239 # define AV_RB32(x) \ 240 (((uint32_t)((const uint8_t*)(x))[0] << 24) | \ 241 (((const uint8_t*)(x))[1] << 16) | \ 242 (((const uint8_t*)(x))[2] << 8) | \ 243 ((const uint8_t*)(x))[3]) 246 # define AV_WB32(p, val) do { \ 248 ((uint8_t*)(p))[3] = (d); \ 249 ((uint8_t*)(p))[2] = (d)>>8; \ 250 ((uint8_t*)(p))[1] = (d)>>16; \ 251 ((uint8_t*)(p))[0] = (d)>>24; \ 256 # define AV_RL32(x) \ 257 (((uint32_t)((const uint8_t*)(x))[3] << 24) | \ 258 (((const uint8_t*)(x))[2] << 16) | \ 259 (((const uint8_t*)(x))[1] << 8) | \ 260 ((const uint8_t*)(x))[0]) 263 # define AV_WL32(p, val) do { \ 265 ((uint8_t*)(p))[0] = (d); \ 266 ((uint8_t*)(p))[1] = (d)>>8; \ 267 ((uint8_t*)(p))[2] = (d)>>16; \ 268 ((uint8_t*)(p))[3] = (d)>>24; \ 273 # define AV_RB64(x) \ 274 (((uint64_t)((const uint8_t*)(x))[0] << 56) | \ 275 ((uint64_t)((const uint8_t*)(x))[1] << 48) | \ 276 ((uint64_t)((const uint8_t*)(x))[2] << 40) | \ 277 ((uint64_t)((const uint8_t*)(x))[3] << 32) | \ 278 ((uint64_t)((const uint8_t*)(x))[4] << 24) | \ 279 ((uint64_t)((const uint8_t*)(x))[5] << 16) | \ 280 ((uint64_t)((const uint8_t*)(x))[6] << 8) | \ 281 (uint64_t)((const uint8_t*)(x))[7]) 284 # define AV_WB64(p, val) do { \ 286 ((uint8_t*)(p))[7] = (d); \ 287 ((uint8_t*)(p))[6] = (d)>>8; \ 288 ((uint8_t*)(p))[5] = (d)>>16; \ 289 ((uint8_t*)(p))[4] = (d)>>24; \ 290 ((uint8_t*)(p))[3] = (d)>>32; \ 291 ((uint8_t*)(p))[2] = (d)>>40; \ 292 ((uint8_t*)(p))[1] = (d)>>48; \ 293 ((uint8_t*)(p))[0] = (d)>>56; \ 298 # define AV_RL64(x) \ 299 (((uint64_t)((const uint8_t*)(x))[7] << 56) | \ 300 ((uint64_t)((const uint8_t*)(x))[6] << 48) | \ 301 ((uint64_t)((const uint8_t*)(x))[5] << 40) | \ 302 ((uint64_t)((const uint8_t*)(x))[4] << 32) | \ 303 ((uint64_t)((const uint8_t*)(x))[3] << 24) | \ 304 ((uint64_t)((const uint8_t*)(x))[2] << 16) | \ 305 ((uint64_t)((const uint8_t*)(x))[1] << 8) | \ 306 (uint64_t)((const uint8_t*)(x))[0]) 309 # define AV_WL64(p, val) do { \ 311 ((uint8_t*)(p))[0] = (d); \ 312 ((uint8_t*)(p))[1] = (d)>>8; \ 313 ((uint8_t*)(p))[2] = (d)>>16; \ 314 ((uint8_t*)(p))[3] = (d)>>24; \ 315 ((uint8_t*)(p))[4] = (d)>>32; \ 316 ((uint8_t*)(p))[5] = (d)>>40; \ 317 ((uint8_t*)(p))[6] = (d)>>48; \ 318 ((uint8_t*)(p))[7] = (d)>>56; \ 322 #if AV_HAVE_BIGENDIAN 323 # define AV_RN(s, p) AV_RB##s(p) 324 # define AV_WN(s, p, v) AV_WB##s(p, v) 326 # define AV_RN(s, p) AV_RL##s(p) 327 # define AV_WN(s, p, v) AV_WL##s(p, v) 333 # define AV_RN16(p) AV_RN(16, p) 337 # define AV_RN32(p) AV_RN(32, p) 341 # define AV_RN64(p) AV_RN(64, p) 345 # define AV_WN16(p, v) AV_WN(16, p, v) 349 # define AV_WN32(p, v) AV_WN(32, p, v) 353 # define AV_WN64(p, v) AV_WN(64, p, v) 356 #if AV_HAVE_BIGENDIAN 357 # define AV_RB(s, p) AV_RN##s(p) 358 # define AV_WB(s, p, v) AV_WN##s(p, v) 359 # define AV_RL(s, p) av_bswap##s(AV_RN##s(p)) 360 # define AV_WL(s, p, v) AV_WN##s(p, av_bswap##s(v)) 362 # define AV_RB(s, p) av_bswap##s(AV_RN##s(p)) 363 # define AV_WB(s, p, v) AV_WN##s(p, av_bswap##s(v)) 364 # define AV_RL(s, p) AV_RN##s(p) 365 # define AV_WL(s, p, v) AV_WN##s(p, v) 368 #define AV_RB8(x) (((const uint8_t*)(x))[0]) 369 #define AV_WB8(p, d) do { ((uint8_t*)(p))[0] = (d); } while(0) 371 #define AV_RL8(x) AV_RB8(x) 372 #define AV_WL8(p, d) AV_WB8(p, d) 375 # define AV_RB16(p) AV_RB(16, p) 378 # define AV_WB16(p, v) AV_WB(16, p, v) 382 # define AV_RL16(p) AV_RL(16, p) 385 # define AV_WL16(p, v) AV_WL(16, p, v) 389 # define AV_RB32(p) AV_RB(32, p) 392 # define AV_WB32(p, v) AV_WB(32, p, v) 396 # define AV_RL32(p) AV_RL(32, p) 399 # define AV_WL32(p, v) AV_WL(32, p, v) 403 # define AV_RB64(p) AV_RB(64, p) 406 # define AV_WB64(p, v) AV_WB(64, p, v) 410 # define AV_RL64(p) AV_RL(64, p) 413 # define AV_WL64(p, v) AV_WL(64, p, v) 417 # define AV_RB24(x) \ 418 ((((const uint8_t*)(x))[0] << 16) | \ 419 (((const uint8_t*)(x))[1] << 8) | \ 420 ((const uint8_t*)(x))[2]) 423 # define AV_WB24(p, d) do { \ 424 ((uint8_t*)(p))[2] = (d); \ 425 ((uint8_t*)(p))[1] = (d)>>8; \ 426 ((uint8_t*)(p))[0] = (d)>>16; \ 431 # define AV_RL24(x) \ 432 ((((const uint8_t*)(x))[2] << 16) | \ 433 (((const uint8_t*)(x))[1] << 8) | \ 434 ((const uint8_t*)(x))[0]) 437 # define AV_WL24(p, d) do { \ 438 ((uint8_t*)(p))[0] = (d); \ 439 ((uint8_t*)(p))[1] = (d)>>8; \ 440 ((uint8_t*)(p))[2] = (d)>>16; \ 449 #define AV_RNA(s, p) (((const av_alias##s*)(p))->u##s) 450 #define AV_WNA(s, p, v) (((av_alias##s*)(p))->u##s = (v)) 453 # define AV_RN16A(p) AV_RNA(16, p) 457 # define AV_RN32A(p) AV_RNA(32, p) 461 # define AV_RN64A(p) AV_RNA(64, p) 465 # define AV_WN16A(p, v) AV_WNA(16, p, v) 469 # define AV_WN32A(p, v) AV_WNA(32, p, v) 473 # define AV_WN64A(p, v) AV_WNA(64, p, v) 481 #define AV_COPYU(n, d, s) AV_WN##n(d, AV_RN##n(s)); 484 # define AV_COPY16U(d, s) AV_COPYU(16, d, s) 488 # define AV_COPY32U(d, s) AV_COPYU(32, d, s) 492 # define AV_COPY64U(d, s) AV_COPYU(64, d, s) 496 # define AV_COPY128U(d, s) \ 499 AV_COPY64U((char *)(d) + 8, (const char *)(s) + 8); \ 509 #define AV_COPY(n, d, s) \ 510 (((av_alias##n*)(d))->u##n = ((const av_alias##n*)(s))->u##n) 513 # define AV_COPY16(d, s) AV_COPY(16, d, s) 517 # define AV_COPY32(d, s) AV_COPY(32, d, s) 521 # define AV_COPY64(d, s) AV_COPY(64, d, s) 525 # define AV_COPY128(d, s) \ 528 AV_COPY64((char*)(d)+8, (char*)(s)+8); \ 532 #define AV_SWAP(n, a, b) FFSWAP(av_alias##n, *(av_alias##n*)(a), *(av_alias##n*)(b)) 535 # define AV_SWAP64(a, b) AV_SWAP(64, a, b) 538 #define AV_ZERO(n, d) (((av_alias##n*)(d))->u##n = 0) 541 # define AV_ZERO16(d) AV_ZERO(16, d) 545 # define AV_ZERO32(d) AV_ZERO(32, d) 549 # define AV_ZERO64(d) AV_ZERO(64, d) 553 # define AV_ZERO128(d) \ 556 AV_ZERO64((char*)(d)+8); \
Macro definitions for various function/variable attributes.