annotate common.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 8adb1d368c25
children 92180cbccda6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
108
11be8e0d1344 Add official LGPL license headers to the files that were missing them.
diego
parents: 104
diff changeset
1 /*
11be8e0d1344 Add official LGPL license headers to the files that were missing them.
diego
parents: 104
diff changeset
2 * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
11be8e0d1344 Add official LGPL license headers to the files that were missing them.
diego
parents: 104
diff changeset
3 *
116
d76a36742464 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 113
diff changeset
4 * This file is part of FFmpeg.
d76a36742464 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 113
diff changeset
5 *
d76a36742464 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 113
diff changeset
6 * FFmpeg is free software; you can redistribute it and/or
108
11be8e0d1344 Add official LGPL license headers to the files that were missing them.
diego
parents: 104
diff changeset
7 * modify it under the terms of the GNU Lesser General Public
11be8e0d1344 Add official LGPL license headers to the files that were missing them.
diego
parents: 104
diff changeset
8 * License as published by the Free Software Foundation; either
116
d76a36742464 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 113
diff changeset
9 * version 2.1 of the License, or (at your option) any later version.
108
11be8e0d1344 Add official LGPL license headers to the files that were missing them.
diego
parents: 104
diff changeset
10 *
116
d76a36742464 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 113
diff changeset
11 * FFmpeg is distributed in the hope that it will be useful,
108
11be8e0d1344 Add official LGPL license headers to the files that were missing them.
diego
parents: 104
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11be8e0d1344 Add official LGPL license headers to the files that were missing them.
diego
parents: 104
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11be8e0d1344 Add official LGPL license headers to the files that were missing them.
diego
parents: 104
diff changeset
14 * Lesser General Public License for more details.
11be8e0d1344 Add official LGPL license headers to the files that were missing them.
diego
parents: 104
diff changeset
15 *
11be8e0d1344 Add official LGPL license headers to the files that were missing them.
diego
parents: 104
diff changeset
16 * You should have received a copy of the GNU Lesser General Public
116
d76a36742464 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 113
diff changeset
17 * License along with FFmpeg; if not, write to the Free Software
108
11be8e0d1344 Add official LGPL license headers to the files that were missing them.
diego
parents: 104
diff changeset
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
11be8e0d1344 Add official LGPL license headers to the files that were missing them.
diego
parents: 104
diff changeset
19 */
11be8e0d1344 Add official LGPL license headers to the files that were missing them.
diego
parents: 104
diff changeset
20
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
21 /**
642
70bdd5501662 Use full internal pathname in doxygen @file directives.
diego
parents: 633
diff changeset
22 * @file libavutil/common.h
466
f4fd038fcb58 misc spelling fixes
diego
parents: 452
diff changeset
23 * common internal and external API header
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
24 */
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
25
567
bd4052d9050c Globally rename the header inclusion guard names.
stefano
parents: 519
diff changeset
26 #ifndef AVUTIL_COMMON_H
bd4052d9050c Globally rename the header inclusion guard names.
stefano
parents: 519
diff changeset
27 #define AVUTIL_COMMON_H
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
28
630
fb04e2fc189c Reorganize header #includes: Unconditionally #include standard C headers,
diego
parents: 619
diff changeset
29 #include <ctype.h>
fb04e2fc189c Reorganize header #includes: Unconditionally #include standard C headers,
diego
parents: 619
diff changeset
30 #include <errno.h>
158
aa83c1df5a69 merge #ifdef HAVE_AV_CONFIG_H sections
mru
parents: 157
diff changeset
31 #include <inttypes.h>
630
fb04e2fc189c Reorganize header #includes: Unconditionally #include standard C headers,
diego
parents: 619
diff changeset
32 #include <limits.h>
fb04e2fc189c Reorganize header #includes: Unconditionally #include standard C headers,
diego
parents: 619
diff changeset
33 #include <math.h>
fb04e2fc189c Reorganize header #includes: Unconditionally #include standard C headers,
diego
parents: 619
diff changeset
34 #include <stdio.h>
fb04e2fc189c Reorganize header #includes: Unconditionally #include standard C headers,
diego
parents: 619
diff changeset
35 #include <stdlib.h>
fb04e2fc189c Reorganize header #includes: Unconditionally #include standard C headers,
diego
parents: 619
diff changeset
36 #include <string.h>
159
039198e96ee2 rename always_inline to av_always_inline and move to common.h
mru
parents: 158
diff changeset
37
668
8adb1d368c25 Avoid warnings from AV_GCC_VERSION_AT_LEAST with some non-gcc compilers
mru
parents: 664
diff changeset
38 #ifdef __GNUC__
8adb1d368c25 Avoid warnings from AV_GCC_VERSION_AT_LEAST with some non-gcc compilers
mru
parents: 664
diff changeset
39 # define AV_GCC_VERSION_AT_LEAST(x,y) (__GNUC__ > x || __GNUC__ == x && __GNUC_MINOR__ >= y)
8adb1d368c25 Avoid warnings from AV_GCC_VERSION_AT_LEAST with some non-gcc compilers
mru
parents: 664
diff changeset
40 #else
8adb1d368c25 Avoid warnings from AV_GCC_VERSION_AT_LEAST with some non-gcc compilers
mru
parents: 664
diff changeset
41 # define AV_GCC_VERSION_AT_LEAST(x,y) 0
8adb1d368c25 Avoid warnings from AV_GCC_VERSION_AT_LEAST with some non-gcc compilers
mru
parents: 664
diff changeset
42 #endif
590
e9d89a89561a Use AV_GCC_VERSION_AT_LEAST() to simplify gcc version checks.
cehoyos
parents: 580
diff changeset
43
159
039198e96ee2 rename always_inline to av_always_inline and move to common.h
mru
parents: 158
diff changeset
44 #ifndef av_always_inline
590
e9d89a89561a Use AV_GCC_VERSION_AT_LEAST() to simplify gcc version checks.
cehoyos
parents: 580
diff changeset
45 #if AV_GCC_VERSION_AT_LEAST(3,1)
159
039198e96ee2 rename always_inline to av_always_inline and move to common.h
mru
parents: 158
diff changeset
46 # define av_always_inline __attribute__((always_inline)) inline
372
317edea5d1a8 ensure av_noinline is always defined
aurel
parents: 370
diff changeset
47 #else
317edea5d1a8 ensure av_noinline is always defined
aurel
parents: 370
diff changeset
48 # define av_always_inline inline
317edea5d1a8 ensure av_noinline is always defined
aurel
parents: 370
diff changeset
49 #endif
317edea5d1a8 ensure av_noinline is always defined
aurel
parents: 370
diff changeset
50 #endif
317edea5d1a8 ensure av_noinline is always defined
aurel
parents: 370
diff changeset
51
317edea5d1a8 ensure av_noinline is always defined
aurel
parents: 370
diff changeset
52 #ifndef av_noinline
590
e9d89a89561a Use AV_GCC_VERSION_AT_LEAST() to simplify gcc version checks.
cehoyos
parents: 580
diff changeset
53 #if AV_GCC_VERSION_AT_LEAST(3,1)
246
60748db91fb3 av_noinline
michael
parents: 245
diff changeset
54 # define av_noinline __attribute__((noinline))
159
039198e96ee2 rename always_inline to av_always_inline and move to common.h
mru
parents: 158
diff changeset
55 #else
246
60748db91fb3 av_noinline
michael
parents: 245
diff changeset
56 # define av_noinline
159
039198e96ee2 rename always_inline to av_always_inline and move to common.h
mru
parents: 158
diff changeset
57 #endif
039198e96ee2 rename always_inline to av_always_inline and move to common.h
mru
parents: 158
diff changeset
58 #endif
039198e96ee2 rename always_inline to av_always_inline and move to common.h
mru
parents: 158
diff changeset
59
481
f4187c1c15a6 Reapply r12489: Add pure, const and malloc attributes to proper functions
zuxy
parents: 478
diff changeset
60 #ifndef av_pure
590
e9d89a89561a Use AV_GCC_VERSION_AT_LEAST() to simplify gcc version checks.
cehoyos
parents: 580
diff changeset
61 #if AV_GCC_VERSION_AT_LEAST(3,1)
481
f4187c1c15a6 Reapply r12489: Add pure, const and malloc attributes to proper functions
zuxy
parents: 478
diff changeset
62 # define av_pure __attribute__((pure))
f4187c1c15a6 Reapply r12489: Add pure, const and malloc attributes to proper functions
zuxy
parents: 478
diff changeset
63 #else
f4187c1c15a6 Reapply r12489: Add pure, const and malloc attributes to proper functions
zuxy
parents: 478
diff changeset
64 # define av_pure
f4187c1c15a6 Reapply r12489: Add pure, const and malloc attributes to proper functions
zuxy
parents: 478
diff changeset
65 #endif
f4187c1c15a6 Reapply r12489: Add pure, const and malloc attributes to proper functions
zuxy
parents: 478
diff changeset
66 #endif
f4187c1c15a6 Reapply r12489: Add pure, const and malloc attributes to proper functions
zuxy
parents: 478
diff changeset
67
f4187c1c15a6 Reapply r12489: Add pure, const and malloc attributes to proper functions
zuxy
parents: 478
diff changeset
68 #ifndef av_const
590
e9d89a89561a Use AV_GCC_VERSION_AT_LEAST() to simplify gcc version checks.
cehoyos
parents: 580
diff changeset
69 #if AV_GCC_VERSION_AT_LEAST(2,6)
481
f4187c1c15a6 Reapply r12489: Add pure, const and malloc attributes to proper functions
zuxy
parents: 478
diff changeset
70 # define av_const __attribute__((const))
f4187c1c15a6 Reapply r12489: Add pure, const and malloc attributes to proper functions
zuxy
parents: 478
diff changeset
71 #else
f4187c1c15a6 Reapply r12489: Add pure, const and malloc attributes to proper functions
zuxy
parents: 478
diff changeset
72 # define av_const
f4187c1c15a6 Reapply r12489: Add pure, const and malloc attributes to proper functions
zuxy
parents: 478
diff changeset
73 #endif
f4187c1c15a6 Reapply r12489: Add pure, const and malloc attributes to proper functions
zuxy
parents: 478
diff changeset
74 #endif
f4187c1c15a6 Reapply r12489: Add pure, const and malloc attributes to proper functions
zuxy
parents: 478
diff changeset
75
486
2e4747b3d034 Apply 'cold' attribute to init/uninit functions in libavcodec
zuxy
parents: 481
diff changeset
76 #ifndef av_cold
591
5fe37f8a1017 Silence the following icc warnings:
cehoyos
parents: 590
diff changeset
77 #if (!defined(__ICC) || __ICC > 1100) && AV_GCC_VERSION_AT_LEAST(4,3)
486
2e4747b3d034 Apply 'cold' attribute to init/uninit functions in libavcodec
zuxy
parents: 481
diff changeset
78 # define av_cold __attribute__((cold))
2e4747b3d034 Apply 'cold' attribute to init/uninit functions in libavcodec
zuxy
parents: 481
diff changeset
79 #else
2e4747b3d034 Apply 'cold' attribute to init/uninit functions in libavcodec
zuxy
parents: 481
diff changeset
80 # define av_cold
2e4747b3d034 Apply 'cold' attribute to init/uninit functions in libavcodec
zuxy
parents: 481
diff changeset
81 #endif
2e4747b3d034 Apply 'cold' attribute to init/uninit functions in libavcodec
zuxy
parents: 481
diff changeset
82 #endif
2e4747b3d034 Apply 'cold' attribute to init/uninit functions in libavcodec
zuxy
parents: 481
diff changeset
83
662
1ed74ddc5e6b av_flatten to make the similarly named attribute available.
michael
parents: 661
diff changeset
84 #ifndef av_flatten
663
39c6caee1839 Use AV_GCC_VERSION_AT_LEAST instead of complicated __GNUC__ version check.
diego
parents: 662
diff changeset
85 #if AV_GCC_VERSION_AT_LEAST(4,1)
662
1ed74ddc5e6b av_flatten to make the similarly named attribute available.
michael
parents: 661
diff changeset
86 # define av_flatten __attribute__((flatten))
1ed74ddc5e6b av_flatten to make the similarly named attribute available.
michael
parents: 661
diff changeset
87 #else
1ed74ddc5e6b av_flatten to make the similarly named attribute available.
michael
parents: 661
diff changeset
88 # define av_flatten
1ed74ddc5e6b av_flatten to make the similarly named attribute available.
michael
parents: 661
diff changeset
89 #endif
1ed74ddc5e6b av_flatten to make the similarly named attribute available.
michael
parents: 661
diff changeset
90 #endif
1ed74ddc5e6b av_flatten to make the similarly named attribute available.
michael
parents: 661
diff changeset
91
100
5d02abb9a7e5 attribute_deprecated
michael
parents: 99
diff changeset
92 #ifndef attribute_deprecated
590
e9d89a89561a Use AV_GCC_VERSION_AT_LEAST() to simplify gcc version checks.
cehoyos
parents: 580
diff changeset
93 #if AV_GCC_VERSION_AT_LEAST(3,1)
100
5d02abb9a7e5 attribute_deprecated
michael
parents: 99
diff changeset
94 # define attribute_deprecated __attribute__((deprecated))
5d02abb9a7e5 attribute_deprecated
michael
parents: 99
diff changeset
95 #else
5d02abb9a7e5 attribute_deprecated
michael
parents: 99
diff changeset
96 # define attribute_deprecated
5d02abb9a7e5 attribute_deprecated
michael
parents: 99
diff changeset
97 #endif
5d02abb9a7e5 attribute_deprecated
michael
parents: 99
diff changeset
98 #endif
5d02abb9a7e5 attribute_deprecated
michael
parents: 99
diff changeset
99
339
8829032777d5 rename attribute_unused to av_unused and moves its declaration to common.h
benoit
parents: 286
diff changeset
100 #ifndef av_unused
8829032777d5 rename attribute_unused to av_unused and moves its declaration to common.h
benoit
parents: 286
diff changeset
101 #if defined(__GNUC__)
8829032777d5 rename attribute_unused to av_unused and moves its declaration to common.h
benoit
parents: 286
diff changeset
102 # define av_unused __attribute__((unused))
8829032777d5 rename attribute_unused to av_unused and moves its declaration to common.h
benoit
parents: 286
diff changeset
103 #else
8829032777d5 rename attribute_unused to av_unused and moves its declaration to common.h
benoit
parents: 286
diff changeset
104 # define av_unused
8829032777d5 rename attribute_unused to av_unused and moves its declaration to common.h
benoit
parents: 286
diff changeset
105 #endif
8829032777d5 rename attribute_unused to av_unused and moves its declaration to common.h
benoit
parents: 286
diff changeset
106 #endif
8829032777d5 rename attribute_unused to av_unused and moves its declaration to common.h
benoit
parents: 286
diff changeset
107
661
ac3fc6cb4781 av_uninit() to suppress false uninitialized warnings from gcc without deoptimizing code.
michael
parents: 642
diff changeset
108 #ifndef av_uninit
664
01e418ebd7d6 Silence one icc warning:
cehoyos
parents: 663
diff changeset
109 #if defined(__GNUC__) && !defined(__ICC)
661
ac3fc6cb4781 av_uninit() to suppress false uninitialized warnings from gcc without deoptimizing code.
michael
parents: 642
diff changeset
110 # define av_uninit(x) x=x
ac3fc6cb4781 av_uninit() to suppress false uninitialized warnings from gcc without deoptimizing code.
michael
parents: 642
diff changeset
111 #else
ac3fc6cb4781 av_uninit() to suppress false uninitialized warnings from gcc without deoptimizing code.
michael
parents: 642
diff changeset
112 # define av_uninit(x) x
ac3fc6cb4781 av_uninit() to suppress false uninitialized warnings from gcc without deoptimizing code.
michael
parents: 642
diff changeset
113 #endif
ac3fc6cb4781 av_uninit() to suppress false uninitialized warnings from gcc without deoptimizing code.
michael
parents: 642
diff changeset
114 #endif
ac3fc6cb4781 av_uninit() to suppress false uninitialized warnings from gcc without deoptimizing code.
michael
parents: 642
diff changeset
115
633
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 630
diff changeset
116 //rounded division & shift
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
117 #define RSHIFT(a,b) ((a) > 0 ? ((a) + ((1<<(b))>>1))>>(b) : ((a) + ((1<<(b))>>1)-1)>>(b))
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
118 /* assume b>0 */
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
119 #define ROUNDED_DIV(a,b) (((a)>0 ? (a) + ((b)>>1) : (a) - ((b)>>1))/(b))
120
f42a6347df1d Rename ABS macro to FFABS.
diego
parents: 119
diff changeset
120 #define FFABS(a) ((a) >= 0 ? (a) : (-(a)))
119
7d5463d9530a Rename SIGN macro to FFSIGN to avoid clashes with system headers.
diego
parents: 117
diff changeset
121 #define FFSIGN(a) ((a) > 0 ? 1 : -1)
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
122
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
123 #define FFMAX(a,b) ((a) > (b) ? (a) : (b))
498
2ae1cc70b1c4 Implement FFMAX3(a,b,c) - maximum over three arguments.
voroshil
parents: 496
diff changeset
124 #define FFMAX3(a,b,c) FFMAX(FFMAX(a,b),c)
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
125 #define FFMIN(a,b) ((a) > (b) ? (b) : (a))
501
b35354bd6b57 add FFMIN3
bcoudurier
parents: 498
diff changeset
126 #define FFMIN3(a,b,c) FFMIN(FFMIN(a,b),c)
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
127
126
28a98fbd027f Rename SWAP macro to FFSWAP.
diego
parents: 125
diff changeset
128 #define FFSWAP(type,a,b) do{type SWAP_tmp= b; b= a; a= SWAP_tmp;}while(0)
576
481638df1e8b Add a macro to get the number of elements in a table.
benoit
parents: 567
diff changeset
129 #define FF_ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0]))
99
michael
parents: 89
diff changeset
130
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
131 /* misc math functions */
157
d96dae9bdcaa fix mingw shared build, and get rid of FF_IMPORT_ATTR
mru
parents: 156
diff changeset
132 extern const uint8_t ff_log2_tab[256];
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
133
481
f4187c1c15a6 Reapply r12489: Add pure, const and malloc attributes to proper functions
zuxy
parents: 478
diff changeset
134 static inline av_const int av_log2(unsigned int v)
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
135 {
443
864980df1385 Merge declaration and initialization.
michael
parents: 392
diff changeset
136 int n = 0;
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
137 if (v & 0xffff0000) {
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
138 v >>= 16;
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
139 n += 16;
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
140 }
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
141 if (v & 0xff00) {
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
142 v >>= 8;
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
143 n += 8;
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
144 }
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
145 n += ff_log2_tab[v];
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
146
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
147 return n;
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
148 }
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
149
481
f4187c1c15a6 Reapply r12489: Add pure, const and malloc attributes to proper functions
zuxy
parents: 478
diff changeset
150 static inline av_const int av_log2_16bit(unsigned int v)
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
151 {
443
864980df1385 Merge declaration and initialization.
michael
parents: 392
diff changeset
152 int n = 0;
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
153 if (v & 0xff00) {
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
154 v >>= 8;
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
155 n += 8;
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
156 }
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
157 n += ff_log2_tab[v];
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
158
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
159 return n;
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
160 }
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
161
39
c25cab283094 document clip functions
aurel
parents: 38
diff changeset
162 /**
633
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 630
diff changeset
163 * Clips a signed integer value into the amin-amax range.
39
c25cab283094 document clip functions
aurel
parents: 38
diff changeset
164 * @param a value to clip
c25cab283094 document clip functions
aurel
parents: 38
diff changeset
165 * @param amin minimum value of the clip range
c25cab283094 document clip functions
aurel
parents: 38
diff changeset
166 * @param amax maximum value of the clip range
151
d6f1b361d2c2 spelling cosmetics: cliped --> clipped
diego
parents: 147
diff changeset
167 * @return clipped value
39
c25cab283094 document clip functions
aurel
parents: 38
diff changeset
168 */
481
f4187c1c15a6 Reapply r12489: Add pure, const and malloc attributes to proper functions
zuxy
parents: 478
diff changeset
169 static inline av_const int av_clip(int a, int amin, int amax)
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
170 {
452
4b2cd7e98d58 prettyprinting cosmetics
diego
parents: 443
diff changeset
171 if (a < amin) return amin;
63
e5a312df8a07 cosmetic
michael
parents: 62
diff changeset
172 else if (a > amax) return amax;
e5a312df8a07 cosmetic
michael
parents: 62
diff changeset
173 else return a;
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
174 }
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
175
39
c25cab283094 document clip functions
aurel
parents: 38
diff changeset
176 /**
633
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 630
diff changeset
177 * Clips a signed integer value into the 0-255 range.
39
c25cab283094 document clip functions
aurel
parents: 38
diff changeset
178 * @param a value to clip
151
d6f1b361d2c2 spelling cosmetics: cliped --> clipped
diego
parents: 147
diff changeset
179 * @return clipped value
39
c25cab283094 document clip functions
aurel
parents: 38
diff changeset
180 */
481
f4187c1c15a6 Reapply r12489: Add pure, const and malloc attributes to proper functions
zuxy
parents: 478
diff changeset
181 static inline av_const uint8_t av_clip_uint8(int a)
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
182 {
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
183 if (a&(~255)) return (-a)>>31;
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
184 else return a;
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
185 }
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
186
373
c3b57cc542e0 add a new av_clip_int16() function to libavutil
aurel
parents: 372
diff changeset
187 /**
633
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 630
diff changeset
188 * Clips a signed integer value into the -32768,32767 range.
373
c3b57cc542e0 add a new av_clip_int16() function to libavutil
aurel
parents: 372
diff changeset
189 * @param a value to clip
c3b57cc542e0 add a new av_clip_int16() function to libavutil
aurel
parents: 372
diff changeset
190 * @return clipped value
c3b57cc542e0 add a new av_clip_int16() function to libavutil
aurel
parents: 372
diff changeset
191 */
481
f4187c1c15a6 Reapply r12489: Add pure, const and malloc attributes to proper functions
zuxy
parents: 478
diff changeset
192 static inline av_const int16_t av_clip_int16(int a)
373
c3b57cc542e0 add a new av_clip_int16() function to libavutil
aurel
parents: 372
diff changeset
193 {
c3b57cc542e0 add a new av_clip_int16() function to libavutil
aurel
parents: 372
diff changeset
194 if ((a+32768) & ~65535) return (a>>31) ^ 32767;
c3b57cc542e0 add a new av_clip_int16() function to libavutil
aurel
parents: 372
diff changeset
195 else return a;
c3b57cc542e0 add a new av_clip_int16() function to libavutil
aurel
parents: 372
diff changeset
196 }
c3b57cc542e0 add a new av_clip_int16() function to libavutil
aurel
parents: 372
diff changeset
197
519
5cdb952bd09a Add av_clipf() function to common.h and use it in ra288.c
vitor
parents: 516
diff changeset
198 /**
633
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 630
diff changeset
199 * Clips a float value into the amin-amax range.
519
5cdb952bd09a Add av_clipf() function to common.h and use it in ra288.c
vitor
parents: 516
diff changeset
200 * @param a value to clip
5cdb952bd09a Add av_clipf() function to common.h and use it in ra288.c
vitor
parents: 516
diff changeset
201 * @param amin minimum value of the clip range
5cdb952bd09a Add av_clipf() function to common.h and use it in ra288.c
vitor
parents: 516
diff changeset
202 * @param amax maximum value of the clip range
5cdb952bd09a Add av_clipf() function to common.h and use it in ra288.c
vitor
parents: 516
diff changeset
203 * @return clipped value
5cdb952bd09a Add av_clipf() function to common.h and use it in ra288.c
vitor
parents: 516
diff changeset
204 */
5cdb952bd09a Add av_clipf() function to common.h and use it in ra288.c
vitor
parents: 516
diff changeset
205 static inline av_const float av_clipf(float a, float amin, float amax)
5cdb952bd09a Add av_clipf() function to common.h and use it in ra288.c
vitor
parents: 516
diff changeset
206 {
5cdb952bd09a Add av_clipf() function to common.h and use it in ra288.c
vitor
parents: 516
diff changeset
207 if (a < amin) return amin;
5cdb952bd09a Add av_clipf() function to common.h and use it in ra288.c
vitor
parents: 516
diff changeset
208 else if (a > amax) return amax;
5cdb952bd09a Add av_clipf() function to common.h and use it in ra288.c
vitor
parents: 516
diff changeset
209 else return a;
5cdb952bd09a Add av_clipf() function to common.h and use it in ra288.c
vitor
parents: 516
diff changeset
210 }
5cdb952bd09a Add av_clipf() function to common.h and use it in ra288.c
vitor
parents: 516
diff changeset
211
0
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
212 #define MKTAG(a,b,c,d) (a | (b << 8) | (c << 16) | (d << 24))
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
213 #define MKBETAG(a,b,c,d) (d | (c << 8) | (b << 16) | (a << 24))
ee8f44bb7c4d libavutil: Utility code from libavcodec moved to a separate library.
al
parents:
diff changeset
214
132
589af48c86f4 Add doxy comments for macro GET_UTF8
gpoirier
parents: 131
diff changeset
215 /*!
589af48c86f4 Add doxy comments for macro GET_UTF8
gpoirier
parents: 131
diff changeset
216 * \def GET_UTF8(val, GET_BYTE, ERROR)
633
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 630
diff changeset
217 * Converts a UTF-8 character (up to 4 bytes long) to its 32-bit UCS-4 encoded form
132
589af48c86f4 Add doxy comments for macro GET_UTF8
gpoirier
parents: 131
diff changeset
218 * \param val is the output and should be of type uint32_t. It holds the converted
341
53126d45b095 misc typo fixes
diego
parents: 339
diff changeset
219 * UCS-4 character and should be a left value.
53126d45b095 misc typo fixes
diego
parents: 339
diff changeset
220 * \param GET_BYTE gets UTF-8 encoded bytes from any proper source. It can be
132
589af48c86f4 Add doxy comments for macro GET_UTF8
gpoirier
parents: 131
diff changeset
221 * a function or a statement whose return value or evaluated value is of type
341
53126d45b095 misc typo fixes
diego
parents: 339
diff changeset
222 * uint8_t. It will be executed up to 4 times for values in the valid UTF-8 range,
147
7e143f348a72 Correct GET/PUT_UTF8 comment: the get/put functions might be called up
reimar
parents: 146
diff changeset
223 * and up to 7 times in the general case.
341
53126d45b095 misc typo fixes
diego
parents: 339
diff changeset
224 * \param ERROR action that should be taken when an invalid UTF-8 byte is returned
132
589af48c86f4 Add doxy comments for macro GET_UTF8
gpoirier
parents: 131
diff changeset
225 * from GET_BYTE. It should be a statement that jumps out of the macro,
589af48c86f4 Add doxy comments for macro GET_UTF8
gpoirier
parents: 131
diff changeset
226 * like exit(), goto, return, break, or continue.
589af48c86f4 Add doxy comments for macro GET_UTF8
gpoirier
parents: 131
diff changeset
227 */
130
dc1ff57e1b08 woops, fix missplaced doxy comment
gpoirier
parents: 129
diff changeset
228 #define GET_UTF8(val, GET_BYTE, ERROR)\
dc1ff57e1b08 woops, fix missplaced doxy comment
gpoirier
parents: 129
diff changeset
229 val= GET_BYTE;\
dc1ff57e1b08 woops, fix missplaced doxy comment
gpoirier
parents: 129
diff changeset
230 {\
dc1ff57e1b08 woops, fix missplaced doxy comment
gpoirier
parents: 129
diff changeset
231 int ones= 7 - av_log2(val ^ 255);\
dc1ff57e1b08 woops, fix missplaced doxy comment
gpoirier
parents: 129
diff changeset
232 if(ones==1)\
dc1ff57e1b08 woops, fix missplaced doxy comment
gpoirier
parents: 129
diff changeset
233 ERROR\
dc1ff57e1b08 woops, fix missplaced doxy comment
gpoirier
parents: 129
diff changeset
234 val&= 127>>ones;\
dc1ff57e1b08 woops, fix missplaced doxy comment
gpoirier
parents: 129
diff changeset
235 while(--ones > 0){\
dc1ff57e1b08 woops, fix missplaced doxy comment
gpoirier
parents: 129
diff changeset
236 int tmp= GET_BYTE - 128;\
dc1ff57e1b08 woops, fix missplaced doxy comment
gpoirier
parents: 129
diff changeset
237 if(tmp>>6)\
dc1ff57e1b08 woops, fix missplaced doxy comment
gpoirier
parents: 129
diff changeset
238 ERROR\
dc1ff57e1b08 woops, fix missplaced doxy comment
gpoirier
parents: 129
diff changeset
239 val= (val<<6) + tmp;\
dc1ff57e1b08 woops, fix missplaced doxy comment
gpoirier
parents: 129
diff changeset
240 }\
dc1ff57e1b08 woops, fix missplaced doxy comment
gpoirier
parents: 129
diff changeset
241 }
dc1ff57e1b08 woops, fix missplaced doxy comment
gpoirier
parents: 129
diff changeset
242
129
ccae53673692 Fix ASF format parser's broken UTF-16 string handling
gpoirier
parents: 127
diff changeset
243 /*!
131
e10026931162 Fix wrong params name in PUT_UTF8 doxy comments
gpoirier
parents: 130
diff changeset
244 * \def PUT_UTF8(val, tmp, PUT_BYTE)
633
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 630
diff changeset
245 * Converts a 32-bit Unicode character to its UTF-8 encoded form (up to 4 bytes long).
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 630
diff changeset
246 * \param val is an input-only argument and should be of type uint32_t. It holds
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 630
diff changeset
247 * a UCS-4 encoded Unicode character that is to be converted to UTF-8. If
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 630
diff changeset
248 * val is given as a function it is executed only once.
129
ccae53673692 Fix ASF format parser's broken UTF-16 string handling
gpoirier
parents: 127
diff changeset
249 * \param tmp is a temporary variable and should be of type uint8_t. It
ccae53673692 Fix ASF format parser's broken UTF-16 string handling
gpoirier
parents: 127
diff changeset
250 * represents an intermediate value during conversion that is to be
633
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 630
diff changeset
251 * output by PUT_BYTE.
341
53126d45b095 misc typo fixes
diego
parents: 339
diff changeset
252 * \param PUT_BYTE writes the converted UTF-8 bytes to any proper destination.
129
ccae53673692 Fix ASF format parser's broken UTF-16 string handling
gpoirier
parents: 127
diff changeset
253 * It could be a function or a statement, and uses tmp as the input byte.
ccae53673692 Fix ASF format parser's broken UTF-16 string handling
gpoirier
parents: 127
diff changeset
254 * For example, PUT_BYTE could be "*output++ = tmp;" PUT_BYTE will be
341
53126d45b095 misc typo fixes
diego
parents: 339
diff changeset
255 * executed up to 4 times for values in the valid UTF-8 range and up to
147
7e143f348a72 Correct GET/PUT_UTF8 comment: the get/put functions might be called up
reimar
parents: 146
diff changeset
256 * 7 times in the general case, depending on the length of the converted
633
8c48a1b999a3 spelling/grammar/consistency review part I
diego
parents: 630
diff changeset
257 * Unicode character.
129
ccae53673692 Fix ASF format parser's broken UTF-16 string handling
gpoirier
parents: 127
diff changeset
258 */
ccae53673692 Fix ASF format parser's broken UTF-16 string handling
gpoirier
parents: 127
diff changeset
259 #define PUT_UTF8(val, tmp, PUT_BYTE)\
ccae53673692 Fix ASF format parser's broken UTF-16 string handling
gpoirier
parents: 127
diff changeset
260 {\
ccae53673692 Fix ASF format parser's broken UTF-16 string handling
gpoirier
parents: 127
diff changeset
261 int bytes, shift;\
ccae53673692 Fix ASF format parser's broken UTF-16 string handling
gpoirier
parents: 127
diff changeset
262 uint32_t in = val;\
ccae53673692 Fix ASF format parser's broken UTF-16 string handling
gpoirier
parents: 127
diff changeset
263 if (in < 0x80) {\
ccae53673692 Fix ASF format parser's broken UTF-16 string handling
gpoirier
parents: 127
diff changeset
264 tmp = in;\
ccae53673692 Fix ASF format parser's broken UTF-16 string handling
gpoirier
parents: 127
diff changeset
265 PUT_BYTE\
ccae53673692 Fix ASF format parser's broken UTF-16 string handling
gpoirier
parents: 127
diff changeset
266 } else {\
ccae53673692 Fix ASF format parser's broken UTF-16 string handling
gpoirier
parents: 127
diff changeset
267 bytes = (av_log2(in) + 4) / 5;\
ccae53673692 Fix ASF format parser's broken UTF-16 string handling
gpoirier
parents: 127
diff changeset
268 shift = (bytes - 1) * 6;\
ccae53673692 Fix ASF format parser's broken UTF-16 string handling
gpoirier
parents: 127
diff changeset
269 tmp = (256 - (256 >> bytes)) | (in >> shift);\
ccae53673692 Fix ASF format parser's broken UTF-16 string handling
gpoirier
parents: 127
diff changeset
270 PUT_BYTE\
ccae53673692 Fix ASF format parser's broken UTF-16 string handling
gpoirier
parents: 127
diff changeset
271 while (shift >= 6) {\
ccae53673692 Fix ASF format parser's broken UTF-16 string handling
gpoirier
parents: 127
diff changeset
272 shift -= 6;\
ccae53673692 Fix ASF format parser's broken UTF-16 string handling
gpoirier
parents: 127
diff changeset
273 tmp = 0x80 | ((in >> shift) & 0x3f);\
ccae53673692 Fix ASF format parser's broken UTF-16 string handling
gpoirier
parents: 127
diff changeset
274 PUT_BYTE\
ccae53673692 Fix ASF format parser's broken UTF-16 string handling
gpoirier
parents: 127
diff changeset
275 }\
ccae53673692 Fix ASF format parser's broken UTF-16 string handling
gpoirier
parents: 127
diff changeset
276 }\
ccae53673692 Fix ASF format parser's broken UTF-16 string handling
gpoirier
parents: 127
diff changeset
277 }
ccae53673692 Fix ASF format parser's broken UTF-16 string handling
gpoirier
parents: 127
diff changeset
278
630
fb04e2fc189c Reorganize header #includes: Unconditionally #include standard C headers,
diego
parents: 619
diff changeset
279 #include "mem.h"
fb04e2fc189c Reorganize header #includes: Unconditionally #include standard C headers,
diego
parents: 619
diff changeset
280
619
c309f86c05a2 Move internal.h #include to the end of the file so that it is after
diego
parents: 610
diff changeset
281 #ifdef HAVE_AV_CONFIG_H
630
fb04e2fc189c Reorganize header #includes: Unconditionally #include standard C headers,
diego
parents: 619
diff changeset
282 # include "config.h"
619
c309f86c05a2 Move internal.h #include to the end of the file so that it is after
diego
parents: 610
diff changeset
283 # include "internal.h"
c309f86c05a2 Move internal.h #include to the end of the file so that it is after
diego
parents: 610
diff changeset
284 #endif /* HAVE_AV_CONFIG_H */
c309f86c05a2 Move internal.h #include to the end of the file so that it is after
diego
parents: 610
diff changeset
285
567
bd4052d9050c Globally rename the header inclusion guard names.
stefano
parents: 519
diff changeset
286 #endif /* AVUTIL_COMMON_H */