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

Side by Side Diff: third_party/ffmpeg/include/libavutil/common.h

Issue 56129: Update public FFmpeg header files from r16647 to r18286. (Closed)
Patch Set: Created 11 years, 8 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
OLDNEW
1 /* 1 /*
2 * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> 2 * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
3 * 3 *
4 * This file is part of FFmpeg. 4 * This file is part of FFmpeg.
5 * 5 *
6 * FFmpeg is free software; you can redistribute it and/or 6 * FFmpeg is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public 7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either 8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version. 9 * version 2.1 of the License, or (at your option) any later version.
10 * 10 *
11 * FFmpeg is distributed in the hope that it will be useful, 11 * FFmpeg is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details. 14 * Lesser General Public License for more details.
15 * 15 *
16 * You should have received a copy of the GNU Lesser General Public 16 * You should have received a copy of the GNU Lesser General Public
17 * License along with FFmpeg; if not, write to the Free Software 17 * License along with FFmpeg; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 */ 19 */
20 20
21 /** 21 /**
22 * @file common.h 22 * @file libavutil/common.h
23 * common internal and external API header 23 * common internal and external API header
24 */ 24 */
25 25
26 #ifndef AVUTIL_COMMON_H 26 #ifndef AVUTIL_COMMON_H
27 #define AVUTIL_COMMON_H 27 #define AVUTIL_COMMON_H
28 28
29 #include <ctype.h>
30 #include <errno.h>
29 #include <inttypes.h> 31 #include <inttypes.h>
32 #include <limits.h>
33 #include <math.h>
34 #include <stdio.h>
35 #include <stdlib.h>
36 #include <string.h>
30 37
31 #ifdef HAVE_AV_CONFIG_H 38 #ifdef __GNUC__
32 /* only include the following when compiling package */ 39 # define AV_GCC_VERSION_AT_LEAST(x,y) (__GNUC__ > x || __GNUC__ == x && __GNU C_MINOR__ >= y)
33 # include "config.h" 40 #else
34 41 # define AV_GCC_VERSION_AT_LEAST(x,y) 0
35 # include <stdlib.h> 42 #endif
36 # include <stdio.h>
37 # include <string.h>
38 # include <ctype.h>
39 # include <limits.h>
40 # include <errno.h>
41 # include <math.h>
42 #endif /* HAVE_AV_CONFIG_H */
43
44 #define AV_GCC_VERSION_AT_LEAST(x,y) (defined(__GNUC__) && (__GNUC__ > x || __GN UC__ == x && __GNUC_MINOR__ >= y))
45 43
46 #ifndef av_always_inline 44 #ifndef av_always_inline
47 #if AV_GCC_VERSION_AT_LEAST(3,1) 45 #if AV_GCC_VERSION_AT_LEAST(3,1)
48 # define av_always_inline __attribute__((always_inline)) inline 46 # define av_always_inline __attribute__((always_inline)) inline
49 #else 47 #else
50 # define av_always_inline inline 48 # define av_always_inline inline
51 #endif 49 #endif
52 #endif 50 #endif
53 51
54 #ifndef av_noinline 52 #ifndef av_noinline
(...skipping 21 matching lines...) Expand all
76 #endif 74 #endif
77 75
78 #ifndef av_cold 76 #ifndef av_cold
79 #if (!defined(__ICC) || __ICC > 1100) && AV_GCC_VERSION_AT_LEAST(4,3) 77 #if (!defined(__ICC) || __ICC > 1100) && AV_GCC_VERSION_AT_LEAST(4,3)
80 # define av_cold __attribute__((cold)) 78 # define av_cold __attribute__((cold))
81 #else 79 #else
82 # define av_cold 80 # define av_cold
83 #endif 81 #endif
84 #endif 82 #endif
85 83
86 #ifdef HAVE_AV_CONFIG_H 84 #ifndef av_flatten
87 # include "internal.h" 85 #if AV_GCC_VERSION_AT_LEAST(4,1)
88 #endif /* HAVE_AV_CONFIG_H */ 86 # define av_flatten __attribute__((flatten))
87 #else
88 # define av_flatten
89 #endif
90 #endif
89 91
90 #ifndef attribute_deprecated 92 #ifndef attribute_deprecated
91 #if AV_GCC_VERSION_AT_LEAST(3,1) 93 #if AV_GCC_VERSION_AT_LEAST(3,1)
92 # define attribute_deprecated __attribute__((deprecated)) 94 # define attribute_deprecated __attribute__((deprecated))
93 #else 95 #else
94 # define attribute_deprecated 96 # define attribute_deprecated
95 #endif 97 #endif
96 #endif 98 #endif
97 99
98 #ifndef av_unused 100 #ifndef av_unused
99 #if defined(__GNUC__) 101 #if defined(__GNUC__)
100 # define av_unused __attribute__((unused)) 102 # define av_unused __attribute__((unused))
101 #else 103 #else
102 # define av_unused 104 # define av_unused
103 #endif 105 #endif
104 #endif 106 #endif
105 107
106 #include "mem.h" 108 #ifndef av_uninit
109 #if defined(__GNUC__) && !defined(__ICC)
110 # define av_uninit(x) x=x
111 #else
112 # define av_uninit(x) x
113 #endif
114 #endif
107 115
108 //rounded divison & shift 116 //rounded division & shift
109 #define RSHIFT(a,b) ((a) > 0 ? ((a) + ((1<<(b))>>1))>>(b) : ((a) + ((1<<(b))>>1) -1)>>(b)) 117 #define RSHIFT(a,b) ((a) > 0 ? ((a) + ((1<<(b))>>1))>>(b) : ((a) + ((1<<(b))>>1) -1)>>(b))
110 /* assume b>0 */ 118 /* assume b>0 */
111 #define ROUNDED_DIV(a,b) (((a)>0 ? (a) + ((b)>>1) : (a) - ((b)>>1))/(b)) 119 #define ROUNDED_DIV(a,b) (((a)>0 ? (a) + ((b)>>1) : (a) - ((b)>>1))/(b))
112 #define FFABS(a) ((a) >= 0 ? (a) : (-(a))) 120 #define FFABS(a) ((a) >= 0 ? (a) : (-(a)))
113 #define FFSIGN(a) ((a) > 0 ? 1 : -1) 121 #define FFSIGN(a) ((a) > 0 ? 1 : -1)
114 122
115 #define FFMAX(a,b) ((a) > (b) ? (a) : (b)) 123 #define FFMAX(a,b) ((a) > (b) ? (a) : (b))
116 #define FFMAX3(a,b,c) FFMAX(FFMAX(a,b),c) 124 #define FFMAX3(a,b,c) FFMAX(FFMAX(a,b),c)
117 #define FFMIN(a,b) ((a) > (b) ? (b) : (a)) 125 #define FFMIN(a,b) ((a) > (b) ? (b) : (a))
118 #define FFMIN3(a,b,c) FFMIN(FFMIN(a,b),c) 126 #define FFMIN3(a,b,c) FFMIN(FFMIN(a,b),c)
(...skipping 25 matching lines...) Expand all
144 int n = 0; 152 int n = 0;
145 if (v & 0xff00) { 153 if (v & 0xff00) {
146 v >>= 8; 154 v >>= 8;
147 n += 8; 155 n += 8;
148 } 156 }
149 n += ff_log2_tab[v]; 157 n += ff_log2_tab[v];
150 158
151 return n; 159 return n;
152 } 160 }
153 161
154 /* median of 3 */
155 static inline av_const int mid_pred(int a, int b, int c)
156 {
157 #if HAVE_CMOV
158 int i=b;
159 __asm__ volatile(
160 "cmp %2, %1 \n\t"
161 "cmovg %1, %0 \n\t"
162 "cmovg %2, %1 \n\t"
163 "cmp %3, %1 \n\t"
164 "cmovl %3, %1 \n\t"
165 "cmp %1, %0 \n\t"
166 "cmovg %1, %0 \n\t"
167 :"+&r"(i), "+&r"(a)
168 :"r"(b), "r"(c)
169 );
170 return i;
171 #elif 0
172 int t= (a-b)&((a-b)>>31);
173 a-=t;
174 b+=t;
175 b-= (b-c)&((b-c)>>31);
176 b+= (a-b)&((a-b)>>31);
177
178 return b;
179 #else
180 if(a>b){
181 if(c>b){
182 if(c>a) b=a;
183 else b=c;
184 }
185 }else{
186 if(b>c){
187 if(c>a) b=c;
188 else b=a;
189 }
190 }
191 return b;
192 #endif
193 }
194
195 /** 162 /**
196 * clip a signed integer value into the amin-amax range 163 * Clips a signed integer value into the amin-amax range.
197 * @param a value to clip 164 * @param a value to clip
198 * @param amin minimum value of the clip range 165 * @param amin minimum value of the clip range
199 * @param amax maximum value of the clip range 166 * @param amax maximum value of the clip range
200 * @return clipped value 167 * @return clipped value
201 */ 168 */
202 static inline av_const int av_clip(int a, int amin, int amax) 169 static inline av_const int av_clip(int a, int amin, int amax)
203 { 170 {
204 if (a < amin) return amin; 171 if (a < amin) return amin;
205 else if (a > amax) return amax; 172 else if (a > amax) return amax;
206 else return a; 173 else return a;
207 } 174 }
208 175
209 /** 176 /**
210 * clip a signed integer value into the 0-255 range 177 * Clips a signed integer value into the 0-255 range.
211 * @param a value to clip 178 * @param a value to clip
212 * @return clipped value 179 * @return clipped value
213 */ 180 */
214 static inline av_const uint8_t av_clip_uint8(int a) 181 static inline av_const uint8_t av_clip_uint8(int a)
215 { 182 {
216 if (a&(~255)) return (-a)>>31; 183 if (a&(~255)) return (-a)>>31;
217 else return a; 184 else return a;
218 } 185 }
219 186
220 /** 187 /**
221 * clip a signed integer value into the -32768,32767 range 188 * Clips a signed integer value into the -32768,32767 range.
222 * @param a value to clip 189 * @param a value to clip
223 * @return clipped value 190 * @return clipped value
224 */ 191 */
225 static inline av_const int16_t av_clip_int16(int a) 192 static inline av_const int16_t av_clip_int16(int a)
226 { 193 {
227 if ((a+32768) & ~65535) return (a>>31) ^ 32767; 194 if ((a+32768) & ~65535) return (a>>31) ^ 32767;
228 else return a; 195 else return a;
229 } 196 }
230 197
231 /** 198 /**
232 * clip a float value into the amin-amax range 199 * Clips a float value into the amin-amax range.
233 * @param a value to clip 200 * @param a value to clip
234 * @param amin minimum value of the clip range 201 * @param amin minimum value of the clip range
235 * @param amax maximum value of the clip range 202 * @param amax maximum value of the clip range
236 * @return clipped value 203 * @return clipped value
237 */ 204 */
238 static inline av_const float av_clipf(float a, float amin, float amax) 205 static inline av_const float av_clipf(float a, float amin, float amax)
239 { 206 {
240 if (a < amin) return amin; 207 if (a < amin) return amin;
241 else if (a > amax) return amax; 208 else if (a > amax) return amax;
242 else return a; 209 else return a;
243 } 210 }
244 211
245 /* math */
246 int64_t av_const ff_gcd(int64_t a, int64_t b);
247
248 /**
249 * converts fourcc string to int
250 */
251 static inline av_pure int ff_get_fourcc(const char *s){
252 #ifdef HAVE_AV_CONFIG_H
253 assert( strlen(s)==4 );
254 #endif
255
256 return (s[0]) + (s[1]<<8) + (s[2]<<16) + (s[3]<<24);
257 }
258
259 #define MKTAG(a,b,c,d) (a | (b << 8) | (c << 16) | (d << 24)) 212 #define MKTAG(a,b,c,d) (a | (b << 8) | (c << 16) | (d << 24))
260 #define MKBETAG(a,b,c,d) (d | (c << 8) | (b << 16) | (a << 24)) 213 #define MKBETAG(a,b,c,d) (d | (c << 8) | (b << 16) | (a << 24))
261 214
262 /*! 215 /*!
263 * \def GET_UTF8(val, GET_BYTE, ERROR) 216 * \def GET_UTF8(val, GET_BYTE, ERROR)
264 * converts a UTF-8 character (up to 4 bytes long) to its 32-bit UCS-4 encoded f orm 217 * Converts a UTF-8 character (up to 4 bytes long) to its 32-bit UCS-4 encoded f orm
265 * \param val is the output and should be of type uint32_t. It holds the convert ed 218 * \param val is the output and should be of type uint32_t. It holds the convert ed
266 * UCS-4 character and should be a left value. 219 * UCS-4 character and should be a left value.
267 * \param GET_BYTE gets UTF-8 encoded bytes from any proper source. It can be 220 * \param GET_BYTE gets UTF-8 encoded bytes from any proper source. It can be
268 * a function or a statement whose return value or evaluated value is of type 221 * a function or a statement whose return value or evaluated value is of type
269 * uint8_t. It will be executed up to 4 times for values in the valid UTF-8 rang e, 222 * uint8_t. It will be executed up to 4 times for values in the valid UTF-8 rang e,
270 * and up to 7 times in the general case. 223 * and up to 7 times in the general case.
271 * \param ERROR action that should be taken when an invalid UTF-8 byte is return ed 224 * \param ERROR action that should be taken when an invalid UTF-8 byte is return ed
272 * from GET_BYTE. It should be a statement that jumps out of the macro, 225 * from GET_BYTE. It should be a statement that jumps out of the macro,
273 * like exit(), goto, return, break, or continue. 226 * like exit(), goto, return, break, or continue.
274 */ 227 */
275 #define GET_UTF8(val, GET_BYTE, ERROR)\ 228 #define GET_UTF8(val, GET_BYTE, ERROR)\
276 val= GET_BYTE;\ 229 val= GET_BYTE;\
277 {\ 230 {\
278 int ones= 7 - av_log2(val ^ 255);\ 231 int ones= 7 - av_log2(val ^ 255);\
279 if(ones==1)\ 232 if(ones==1)\
280 ERROR\ 233 ERROR\
281 val&= 127>>ones;\ 234 val&= 127>>ones;\
282 while(--ones > 0){\ 235 while(--ones > 0){\
283 int tmp= GET_BYTE - 128;\ 236 int tmp= GET_BYTE - 128;\
284 if(tmp>>6)\ 237 if(tmp>>6)\
285 ERROR\ 238 ERROR\
286 val= (val<<6) + tmp;\ 239 val= (val<<6) + tmp;\
287 }\ 240 }\
288 } 241 }
289 242
290 /*! 243 /*!
291 * \def PUT_UTF8(val, tmp, PUT_BYTE) 244 * \def PUT_UTF8(val, tmp, PUT_BYTE)
292 * converts a 32-bit unicode character to its UTF-8 encoded form (up to 4 bytes long). 245 * Converts a 32-bit Unicode character to its UTF-8 encoded form (up to 4 bytes long).
293 * \param val is an input only argument and should be of type uint32_t. It holds 246 * \param val is an input-only argument and should be of type uint32_t. It holds
294 * a ucs4 encoded unicode character that is to be converted to UTF-8. If 247 * a UCS-4 encoded Unicode character that is to be converted to UTF-8. If
295 * val is given as a function it's executed only once. 248 * val is given as a function it is executed only once.
296 * \param tmp is a temporary variable and should be of type uint8_t. It 249 * \param tmp is a temporary variable and should be of type uint8_t. It
297 * represents an intermediate value during conversion that is to be 250 * represents an intermediate value during conversion that is to be
298 * outputted by PUT_BYTE. 251 * output by PUT_BYTE.
299 * \param PUT_BYTE writes the converted UTF-8 bytes to any proper destination. 252 * \param PUT_BYTE writes the converted UTF-8 bytes to any proper destination.
300 * It could be a function or a statement, and uses tmp as the input byte. 253 * It could be a function or a statement, and uses tmp as the input byte.
301 * For example, PUT_BYTE could be "*output++ = tmp;" PUT_BYTE will be 254 * For example, PUT_BYTE could be "*output++ = tmp;" PUT_BYTE will be
302 * executed up to 4 times for values in the valid UTF-8 range and up to 255 * executed up to 4 times for values in the valid UTF-8 range and up to
303 * 7 times in the general case, depending on the length of the converted 256 * 7 times in the general case, depending on the length of the converted
304 * unicode character. 257 * Unicode character.
305 */ 258 */
306 #define PUT_UTF8(val, tmp, PUT_BYTE)\ 259 #define PUT_UTF8(val, tmp, PUT_BYTE)\
307 {\ 260 {\
308 int bytes, shift;\ 261 int bytes, shift;\
309 uint32_t in = val;\ 262 uint32_t in = val;\
310 if (in < 0x80) {\ 263 if (in < 0x80) {\
311 tmp = in;\ 264 tmp = in;\
312 PUT_BYTE\ 265 PUT_BYTE\
313 } else {\ 266 } else {\
314 bytes = (av_log2(in) + 4) / 5;\ 267 bytes = (av_log2(in) + 4) / 5;\
315 shift = (bytes - 1) * 6;\ 268 shift = (bytes - 1) * 6;\
316 tmp = (256 - (256 >> bytes)) | (in >> shift);\ 269 tmp = (256 - (256 >> bytes)) | (in >> shift);\
317 PUT_BYTE\ 270 PUT_BYTE\
318 while (shift >= 6) {\ 271 while (shift >= 6) {\
319 shift -= 6;\ 272 shift -= 6;\
320 tmp = 0x80 | ((in >> shift) & 0x3f);\ 273 tmp = 0x80 | ((in >> shift) & 0x3f);\
321 PUT_BYTE\ 274 PUT_BYTE\
322 }\ 275 }\
323 }\ 276 }\
324 } 277 }
325 278
279 #include "mem.h"
280
281 #ifdef HAVE_AV_CONFIG_H
282 # include "config.h"
283 # include "internal.h"
284 #endif /* HAVE_AV_CONFIG_H */
285
326 #endif /* AVUTIL_COMMON_H */ 286 #endif /* AVUTIL_COMMON_H */
OLDNEW
« no previous file with comments | « third_party/ffmpeg/include/libavutil/base64.h ('k') | third_party/ffmpeg/include/libavutil/crc.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698