19 #ifndef AVUTIL_INTREADWRITE_H 20 #define AVUTIL_INTREADWRITE_H 23 #include "libavutil/avconfig.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 AV_HAVE_FAST_UNALIGNED 202 # define AV_RN(s, p) (((const av_alias##s*)(p))->u##s) 203 # define AV_WN(s, p, v) (((av_alias##s*)(p))->u##s = (v)) 208 # define AV_RB16(x) \ 209 ((((const uint8_t*)(x))[0] << 8) | \ 210 ((const uint8_t*)(x))[1]) 213 # define AV_WB16(p, d) do { \ 214 ((uint8_t*)(p))[1] = (d); \ 215 ((uint8_t*)(p))[0] = (d)>>8; \ 220 # define AV_RL16(x) \ 221 ((((const uint8_t*)(x))[1] << 8) | \ 222 ((const uint8_t*)(x))[0]) 225 # define AV_WL16(p, d) do { \ 226 ((uint8_t*)(p))[0] = (d); \ 227 ((uint8_t*)(p))[1] = (d)>>8; \ 232 # define AV_RB32(x) \ 233 (((uint32_t)((const uint8_t*)(x))[0] << 24) | \ 234 (((const uint8_t*)(x))[1] << 16) | \ 235 (((const uint8_t*)(x))[2] << 8) | \ 236 ((const uint8_t*)(x))[3]) 239 # define AV_WB32(p, d) do { \ 240 ((uint8_t*)(p))[3] = (d); \ 241 ((uint8_t*)(p))[2] = (d)>>8; \ 242 ((uint8_t*)(p))[1] = (d)>>16; \ 243 ((uint8_t*)(p))[0] = (d)>>24; \ 248 # define AV_RL32(x) \ 249 (((uint32_t)((const uint8_t*)(x))[3] << 24) | \ 250 (((const uint8_t*)(x))[2] << 16) | \ 251 (((const uint8_t*)(x))[1] << 8) | \ 252 ((const uint8_t*)(x))[0]) 255 # define AV_WL32(p, d) do { \ 256 ((uint8_t*)(p))[0] = (d); \ 257 ((uint8_t*)(p))[1] = (d)>>8; \ 258 ((uint8_t*)(p))[2] = (d)>>16; \ 259 ((uint8_t*)(p))[3] = (d)>>24; \ 264 # define AV_RB64(x) \ 265 (((uint64_t)((const uint8_t*)(x))[0] << 56) | \ 266 ((uint64_t)((const uint8_t*)(x))[1] << 48) | \ 267 ((uint64_t)((const uint8_t*)(x))[2] << 40) | \ 268 ((uint64_t)((const uint8_t*)(x))[3] << 32) | \ 269 ((uint64_t)((const uint8_t*)(x))[4] << 24) | \ 270 ((uint64_t)((const uint8_t*)(x))[5] << 16) | \ 271 ((uint64_t)((const uint8_t*)(x))[6] << 8) | \ 272 (uint64_t)((const uint8_t*)(x))[7]) 275 # define AV_WB64(p, d) do { \ 276 ((uint8_t*)(p))[7] = (d); \ 277 ((uint8_t*)(p))[6] = (d)>>8; \ 278 ((uint8_t*)(p))[5] = (d)>>16; \ 279 ((uint8_t*)(p))[4] = (d)>>24; \ 280 ((uint8_t*)(p))[3] = (d)>>32; \ 281 ((uint8_t*)(p))[2] = (d)>>40; \ 282 ((uint8_t*)(p))[1] = (d)>>48; \ 283 ((uint8_t*)(p))[0] = (d)>>56; \ 288 # define AV_RL64(x) \ 289 (((uint64_t)((const uint8_t*)(x))[7] << 56) | \ 290 ((uint64_t)((const uint8_t*)(x))[6] << 48) | \ 291 ((uint64_t)((const uint8_t*)(x))[5] << 40) | \ 292 ((uint64_t)((const uint8_t*)(x))[4] << 32) | \ 293 ((uint64_t)((const uint8_t*)(x))[3] << 24) | \ 294 ((uint64_t)((const uint8_t*)(x))[2] << 16) | \ 295 ((uint64_t)((const uint8_t*)(x))[1] << 8) | \ 296 (uint64_t)((const uint8_t*)(x))[0]) 299 # define AV_WL64(p, d) do { \ 300 ((uint8_t*)(p))[0] = (d); \ 301 ((uint8_t*)(p))[1] = (d)>>8; \ 302 ((uint8_t*)(p))[2] = (d)>>16; \ 303 ((uint8_t*)(p))[3] = (d)>>24; \ 304 ((uint8_t*)(p))[4] = (d)>>32; \ 305 ((uint8_t*)(p))[5] = (d)>>40; \ 306 ((uint8_t*)(p))[6] = (d)>>48; \ 307 ((uint8_t*)(p))[7] = (d)>>56; \ 311 #if AV_HAVE_BIGENDIAN 312 # define AV_RN(s, p) AV_RB##s(p) 313 # define AV_WN(s, p, v) AV_WB##s(p, v) 315 # define AV_RN(s, p) AV_RL##s(p) 316 # define AV_WN(s, p, v) AV_WL##s(p, v) 322 # define AV_RN16(p) AV_RN(16, p) 326 # define AV_RN32(p) AV_RN(32, p) 330 # define AV_RN64(p) AV_RN(64, p) 334 # define AV_WN16(p, v) AV_WN(16, p, v) 338 # define AV_WN32(p, v) AV_WN(32, p, v) 342 # define AV_WN64(p, v) AV_WN(64, p, v) 345 #if AV_HAVE_BIGENDIAN 346 # define AV_RB(s, p) AV_RN##s(p) 347 # define AV_WB(s, p, v) AV_WN##s(p, v) 348 # define AV_RL(s, p) av_bswap##s(AV_RN##s(p)) 349 # define AV_WL(s, p, v) AV_WN##s(p, av_bswap##s(v)) 351 # define AV_RB(s, p) av_bswap##s(AV_RN##s(p)) 352 # define AV_WB(s, p, v) AV_WN##s(p, av_bswap##s(v)) 353 # define AV_RL(s, p) AV_RN##s(p) 354 # define AV_WL(s, p, v) AV_WN##s(p, v) 357 #define AV_RB8(x) (((const uint8_t*)(x))[0]) 358 #define AV_WB8(p, d) do { ((uint8_t*)(p))[0] = (d); } while(0) 360 #define AV_RL8(x) AV_RB8(x) 361 #define AV_WL8(p, d) AV_WB8(p, d) 364 # define AV_RB16(p) AV_RB(16, p) 367 # define AV_WB16(p, v) AV_WB(16, p, v) 371 # define AV_RL16(p) AV_RL(16, p) 374 # define AV_WL16(p, v) AV_WL(16, p, v) 378 # define AV_RB32(p) AV_RB(32, p) 381 # define AV_WB32(p, v) AV_WB(32, p, v) 385 # define AV_RL32(p) AV_RL(32, p) 388 # define AV_WL32(p, v) AV_WL(32, p, v) 392 # define AV_RB64(p) AV_RB(64, p) 395 # define AV_WB64(p, v) AV_WB(64, p, v) 399 # define AV_RL64(p) AV_RL(64, p) 402 # define AV_WL64(p, v) AV_WL(64, p, v) 406 # define AV_RB24(x) \ 407 ((((const uint8_t*)(x))[0] << 16) | \ 408 (((const uint8_t*)(x))[1] << 8) | \ 409 ((const uint8_t*)(x))[2]) 412 # define AV_WB24(p, d) do { \ 413 ((uint8_t*)(p))[2] = (d); \ 414 ((uint8_t*)(p))[1] = (d)>>8; \ 415 ((uint8_t*)(p))[0] = (d)>>16; \ 420 # define AV_RL24(x) \ 421 ((((const uint8_t*)(x))[2] << 16) | \ 422 (((const uint8_t*)(x))[1] << 8) | \ 423 ((const uint8_t*)(x))[0]) 426 # define AV_WL24(p, d) do { \ 427 ((uint8_t*)(p))[0] = (d); \ 428 ((uint8_t*)(p))[1] = (d)>>8; \ 429 ((uint8_t*)(p))[2] = (d)>>16; \ 438 #define AV_RNA(s, p) (((const av_alias##s*)(p))->u##s) 439 #define AV_WNA(s, p, v) (((av_alias##s*)(p))->u##s = (v)) 442 # define AV_RN16A(p) AV_RNA(16, p) 446 # define AV_RN32A(p) AV_RNA(32, p) 450 # define AV_RN64A(p) AV_RNA(64, p) 454 # define AV_WN16A(p, v) AV_WNA(16, p, v) 458 # define AV_WN32A(p, v) AV_WNA(32, p, v) 462 # define AV_WN64A(p, v) AV_WNA(64, p, v) 470 #define AV_COPYU(n, d, s) AV_WN##n(d, AV_RN##n(s)); 473 # define AV_COPY16U(d, s) AV_COPYU(16, d, s) 477 # define AV_COPY32U(d, s) AV_COPYU(32, d, s) 481 # define AV_COPY64U(d, s) AV_COPYU(64, d, s) 485 # define AV_COPY128U(d, s) \ 488 AV_COPY64U((char *)(d) + 8, (const char *)(s) + 8); \ 498 #define AV_COPY(n, d, s) \ 499 (((av_alias##n*)(d))->u##n = ((const av_alias##n*)(s))->u##n) 502 # define AV_COPY16(d, s) AV_COPY(16, d, s) 506 # define AV_COPY32(d, s) AV_COPY(32, d, s) 510 # define AV_COPY64(d, s) AV_COPY(64, d, s) 514 # define AV_COPY128(d, s) \ 517 AV_COPY64((char*)(d)+8, (char*)(s)+8); \ 521 #define AV_SWAP(n, a, b) FFSWAP(av_alias##n, *(av_alias##n*)(a), *(av_alias##n*)(b)) 524 # define AV_SWAP64(a, b) AV_SWAP(64, a, b) 527 #define AV_ZERO(n, d) (((av_alias##n*)(d))->u##n = 0) 530 # define AV_ZERO16(d) AV_ZERO(16, d) 534 # define AV_ZERO32(d) AV_ZERO(32, d) 538 # define AV_ZERO64(d) AV_ZERO(64, d) 542 # define AV_ZERO128(d) \ 545 AV_ZERO64((char*)(d)+8); \
Macro definitions for various function/variable attributes.