Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(112)

Side by Side Diff: patched-ffmpeg-mt/libavutil/intreadwrite.h

Issue 789004: ffmpeg roll of source to mar 9 version... (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/ffmpeg/
Patch Set: '' Created 10 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * This file is part of FFmpeg. 2 * This file is part of FFmpeg.
3 * 3 *
4 * FFmpeg is free software; you can redistribute it and/or 4 * FFmpeg is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public 5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either 6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version. 7 * version 2.1 of the License, or (at your option) any later version.
8 * 8 *
9 * FFmpeg is distributed in the hope that it will be useful, 9 * FFmpeg is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details. 12 * Lesser General Public License for more details.
13 * 13 *
14 * You should have received a copy of the GNU Lesser General Public 14 * You should have received a copy of the GNU Lesser General Public
15 * License along with FFmpeg; if not, write to the Free Software 15 * License along with FFmpeg; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 */ 17 */
18 18
19 #ifndef AVUTIL_INTREADWRITE_H 19 #ifndef AVUTIL_INTREADWRITE_H
20 #define AVUTIL_INTREADWRITE_H 20 #define AVUTIL_INTREADWRITE_H
21 21
22 #include <stdint.h> 22 #include <stdint.h>
23 #include "config.h" 23 #include "config.h"
24 #include "bswap.h" 24 #include "bswap.h"
25 #include "common.h"
26
27 typedef union {
28 uint64_t u64;
29 uint32_t u32[2];
30 uint16_t u16[4];
31 uint8_t u8 [8];
32 double f64;
33 float f32[2];
34 } av_alias av_alias64;
35
36 typedef union {
37 uint32_t u32;
38 uint16_t u16[2];
39 uint8_t u8 [4];
40 float f32;
41 } av_alias av_alias32;
42
43 typedef union {
44 uint16_t u16;
45 uint8_t u8 [2];
46 } av_alias av_alias16;
25 47
26 /* 48 /*
27 * Arch-specific headers can provide any combination of 49 * Arch-specific headers can provide any combination of
28 * AV_[RW][BLN](16|24|32|64) and AV_(COPY|SWAP|ZERO)(64|128) macros. 50 * AV_[RW][BLN](16|24|32|64) and AV_(COPY|SWAP|ZERO)(64|128) macros.
29 * Preprocessor symbols must be defined, even if these are implemented 51 * Preprocessor symbols must be defined, even if these are implemented
30 * as inline functions. 52 * as inline functions.
31 */ 53 */
32 54
33 #if ARCH_ARM 55 #if ARCH_ARM
34 # include "arm/intreadwrite.h" 56 # include "arm/intreadwrite.h"
35 #elif ARCH_AVR32 57 #elif ARCH_AVR32
36 # include "avr32/intreadwrite.h" 58 # include "avr32/intreadwrite.h"
37 #elif ARCH_MIPS 59 #elif ARCH_MIPS
38 # include "mips/intreadwrite.h" 60 # include "mips/intreadwrite.h"
39 #elif ARCH_PPC 61 #elif ARCH_PPC
40 # include "ppc/intreadwrite.h" 62 # include "ppc/intreadwrite.h"
63 #elif ARCH_TOMI
64 # include "tomi/intreadwrite.h"
41 #elif ARCH_X86 65 #elif ARCH_X86
42 # include "x86/intreadwrite.h" 66 # include "x86/intreadwrite.h"
43 #endif 67 #endif
44 68
45 /* 69 /*
46 * Map AV_RNXX <-> AV_R[BL]XX for all variants provided by per-arch headers. 70 * Map AV_RNXX <-> AV_R[BL]XX for all variants provided by per-arch headers.
47 */ 71 */
48 72
49 #if HAVE_BIGENDIAN 73 #if HAVE_BIGENDIAN
50 74
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 172
149 #endif /* !HAVE_BIGENDIAN */ 173 #endif /* !HAVE_BIGENDIAN */
150 174
151 /* 175 /*
152 * Define AV_[RW]N helper macros to simplify definitions not provided 176 * Define AV_[RW]N helper macros to simplify definitions not provided
153 * by per-arch headers. 177 * by per-arch headers.
154 */ 178 */
155 179
156 #if HAVE_ATTRIBUTE_PACKED 180 #if HAVE_ATTRIBUTE_PACKED
157 181
158 struct unaligned_64 { uint64_t l; } __attribute__((packed)); 182 union unaligned_64 { uint64_t l; } __attribute__((packed)) av_alias;
159 struct unaligned_32 { uint32_t l; } __attribute__((packed)); 183 union unaligned_32 { uint32_t l; } __attribute__((packed)) av_alias;
160 struct unaligned_16 { uint16_t l; } __attribute__((packed)); 184 union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias;
161 185
162 # define AV_RN(s, p) (((const struct unaligned_##s *) (p))->l) 186 # define AV_RN(s, p) (((const union unaligned_##s *) (p))->l)
163 # define AV_WN(s, p, v) ((((struct unaligned_##s *) (p))->l) = (v)) 187 # define AV_WN(s, p, v) ((((union unaligned_##s *) (p))->l) = (v))
164 188
165 #elif defined(__DECC) 189 #elif defined(__DECC)
166 190
167 # define AV_RN(s, p) (*((const __unaligned uint##s##_t*)(p))) 191 # define AV_RN(s, p) (*((const __unaligned uint##s##_t*)(p)))
168 # define AV_WN(s, p, v) (*((__unaligned uint##s##_t*)(p)) = (v)) 192 # define AV_WN(s, p, v) (*((__unaligned uint##s##_t*)(p)) = (v))
169 193
170 #elif HAVE_FAST_UNALIGNED 194 #elif HAVE_FAST_UNALIGNED
171 195
172 # define AV_RN(s, p) (*((const uint##s##_t*)(p))) 196 # define AV_RN(s, p) (((const av_alias##s*)(p))->u##s)
173 # define AV_WN(s, p, v) (*((uint##s##_t*)(p)) = (v)) 197 # define AV_WN(s, p, v) (((av_alias##s*)(p))->u##s = (v))
174 198
175 #else 199 #else
176 200
177 #ifndef AV_RB16 201 #ifndef AV_RB16
178 # define AV_RB16(x) \ 202 # define AV_RB16(x) \
179 ((((const uint8_t*)(x))[0] << 8) | \ 203 ((((const uint8_t*)(x))[0] << 8) | \
180 ((const uint8_t*)(x))[1]) 204 ((const uint8_t*)(x))[1])
181 #endif 205 #endif
182 #ifndef AV_WB16 206 #ifndef AV_WB16
183 # define AV_WB16(p, d) do { \ 207 # define AV_WB16(p, d) do { \
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 ((const uint8_t*)(x))[0]) 417 ((const uint8_t*)(x))[0])
394 #endif 418 #endif
395 #ifndef AV_WL24 419 #ifndef AV_WL24
396 # define AV_WL24(p, d) do { \ 420 # define AV_WL24(p, d) do { \
397 ((uint8_t*)(p))[0] = (d); \ 421 ((uint8_t*)(p))[0] = (d); \
398 ((uint8_t*)(p))[1] = (d)>>8; \ 422 ((uint8_t*)(p))[1] = (d)>>8; \
399 ((uint8_t*)(p))[2] = (d)>>16; \ 423 ((uint8_t*)(p))[2] = (d)>>16; \
400 } while(0) 424 } while(0)
401 #endif 425 #endif
402 426
427 /*
428 * The AV_[RW]NA macros access naturally aligned data
429 * in a type-safe way.
430 */
431
432 #define AV_RNA(s, p) (((const av_alias##s*)(p))->u##s)
433 #define AV_WNA(s, p, v) (((av_alias##s*)(p))->u##s = (v))
434
435 #ifndef AV_RN16A
436 # define AV_RN16A(p) AV_RNA(16, p)
437 #endif
438
439 #ifndef AV_RN32A
440 # define AV_RN32A(p) AV_RNA(32, p)
441 #endif
442
443 #ifndef AV_RN64A
444 # define AV_RN64A(p) AV_RNA(64, p)
445 #endif
446
447 #ifndef AV_WN16A
448 # define AV_WN16A(p, v) AV_WNA(16, p, v)
449 #endif
450
451 #ifndef AV_WN32A
452 # define AV_WN32A(p, v) AV_WNA(32, p, v)
453 #endif
454
455 #ifndef AV_WN64A
456 # define AV_WN64A(p, v) AV_WNA(64, p, v)
457 #endif
458
403 /* Parameters for AV_COPY*, AV_SWAP*, AV_ZERO* must be 459 /* Parameters for AV_COPY*, AV_SWAP*, AV_ZERO* must be
404 * naturally aligned. They may be implemented using MMX, 460 * naturally aligned. They may be implemented using MMX,
405 * so emms_c() must be called before using any float code 461 * so emms_c() must be called before using any float code
406 * afterwards. 462 * afterwards.
407 */ 463 */
408 464
409 #define AV_COPY(n, d, s) (*(uint##n##_t*)(d) = *(const uint##n##_t*)(s)) 465 #define AV_COPY(n, d, s) \
466 (((av_alias##n*)(d))->u##n = ((const av_alias##n*)(s))->u##n)
467
468 #ifndef AV_COPY16
469 # define AV_COPY16(d, s) AV_COPY(16, d, s)
470 #endif
410 471
411 #ifndef AV_COPY32 472 #ifndef AV_COPY32
412 # define AV_COPY32(d, s) AV_COPY(32, d, s) 473 # define AV_COPY32(d, s) AV_COPY(32, d, s)
413 #endif 474 #endif
414 475
415 #ifndef AV_COPY64 476 #ifndef AV_COPY64
416 # define AV_COPY64(d, s) AV_COPY(64, d, s) 477 # define AV_COPY64(d, s) AV_COPY(64, d, s)
417 #endif 478 #endif
418 479
419 #ifndef AV_COPY128 480 #ifndef AV_COPY128
420 # define AV_COPY128(d, s) \ 481 # define AV_COPY128(d, s) \
421 do { \ 482 do { \
422 AV_COPY64(d, s); \ 483 AV_COPY64(d, s); \
423 AV_COPY64((char*)(d)+8, (char*)(s)+8); \ 484 AV_COPY64((char*)(d)+8, (char*)(s)+8); \
424 } while(0) 485 } while(0)
425 #endif 486 #endif
426 487
427 #define AV_SWAP(n, a, b) FFSWAP(uint##n##_t, *(uint##n##_t*)(a), *(uint##n##_t*) (b)) 488 #define AV_SWAP(n, a, b) FFSWAP(av_alias##n, *(av_alias##n*)(a), *(av_alias##n*) (b))
428 489
429 #ifndef AV_SWAP64 490 #ifndef AV_SWAP64
430 # define AV_SWAP64(a, b) AV_SWAP(64, a, b) 491 # define AV_SWAP64(a, b) AV_SWAP(64, a, b)
431 #endif 492 #endif
432 493
433 #define AV_ZERO(n, d) (*(uint##n##_t*)(d) = 0) 494 #define AV_ZERO(n, d) (((av_alias##n*)(d))->u##n = 0)
495
496 #ifndef AV_ZERO16
497 # define AV_ZERO16(d) AV_ZERO(16, d)
498 #endif
499
500 #ifndef AV_ZERO32
501 # define AV_ZERO32(d) AV_ZERO(32, d)
502 #endif
434 503
435 #ifndef AV_ZERO64 504 #ifndef AV_ZERO64
436 # define AV_ZERO64(d) AV_ZERO(64, d) 505 # define AV_ZERO64(d) AV_ZERO(64, d)
437 #endif 506 #endif
438 507
439 #ifndef AV_ZERO128 508 #ifndef AV_ZERO128
440 # define AV_ZERO128(d) \ 509 # define AV_ZERO128(d) \
441 do { \ 510 do { \
442 AV_ZERO64(d); \ 511 AV_ZERO64(d); \
443 AV_ZERO64((char*)(d)+8); \ 512 AV_ZERO64((char*)(d)+8); \
444 } while(0) 513 } while(0)
445 #endif 514 #endif
446 515
447 #endif /* AVUTIL_INTREADWRITE_H */ 516 #endif /* AVUTIL_INTREADWRITE_H */
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698