annotate integer.c @ 2497:69adfbbdcdeb libavcodec

- samples from mplayer ftp in the "adv" profile seem to have profile=2, which isn't the advanced one; and indeed, using adv. profile parser fails. Using normal parser works, and that's what is done - attempt at taking care of stride for NORM2 bitplane decoding - duplication of much code from msmpeg4.c; this code isn't yet used, but goes down as far as the block layer (mainly Transform Type stuff, the remains are wild editing without checking). Unusable yet, and lacks the AC decoding (but a step further in bitstream parsing) patch by anonymous
author michael
date Fri, 04 Feb 2005 02:20:38 +0000
parents 2c2f738772b7
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2001
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
1 /*
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
2 * arbitrary precision integers
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
3 * Copyright (c) 2004 Michael Niedermayer <michaelni@gmx.at>
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
4 *
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
5 * This library is free software; you can redistribute it and/or
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
6 * modify it under the terms of the GNU Lesser General Public
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
7 * License as published by the Free Software Foundation; either
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
8 * version 2 of the License, or (at your option) any later version.
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
9 *
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
10 * This library is distributed in the hope that it will be useful,
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
13 * Lesser General Public License for more details.
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
14 *
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
15 * You should have received a copy of the GNU Lesser General Public
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
16 * License along with this library; if not, write to the Free Software
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
18 *
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
19 */
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
20
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
21 /**
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
22 * @file integer.c
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
23 * arbitrary precision integers.
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
24 * @author Michael Niedermayer <michaelni@gmx.at>
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
25 */
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
26
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
27 #include "common.h"
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
28 #include "integer.h"
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
29
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
30 AVInteger av_add_i(AVInteger a, AVInteger b){
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
31 int i, carry=0;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
32
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
33 for(i=0; i<AV_INTEGER_SIZE; i++){
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
34 carry= (carry>>16) + a.v[i] + b.v[i];
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
35 a.v[i]= carry;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
36 }
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
37 return a;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
38 }
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
39
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
40 AVInteger av_sub_i(AVInteger a, AVInteger b){
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
41 int i, carry=0;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
42
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
43 for(i=0; i<AV_INTEGER_SIZE; i++){
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
44 carry= (carry>>16) + a.v[i] - b.v[i];
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
45 a.v[i]= carry;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
46 }
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
47 return a;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
48 }
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
49
2127
2c2f738772b7 more comments
michael
parents: 2001
diff changeset
50 /**
2c2f738772b7 more comments
michael
parents: 2001
diff changeset
51 * returns the rounded down value of the logarithm of base 2 of the given AVInteger.
2c2f738772b7 more comments
michael
parents: 2001
diff changeset
52 * this is simply the index of the most significant bit which is 1. Or 0 of all bits are 0
2c2f738772b7 more comments
michael
parents: 2001
diff changeset
53 */
2001
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
54 int av_log2_i(AVInteger a){
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
55 int i;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
56
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
57 for(i=AV_INTEGER_SIZE-1; i>=0; i--){
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
58 if(a.v[i])
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
59 return av_log2_16bit(a.v[i]) + 16*i;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
60 }
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
61 return -1;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
62 }
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
63
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
64 AVInteger av_mul_i(AVInteger a, AVInteger b){
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
65 AVInteger out;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
66 int i, j;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
67 int na= (av_log2_i(a)+16) >> 4;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
68 int nb= (av_log2_i(b)+16) >> 4;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
69
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
70 memset(&out, 0, sizeof(out));
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
71
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
72 for(i=0; i<na; i++){
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
73 unsigned int carry=0;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
74
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
75 if(a.v[i])
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
76 for(j=i; j<AV_INTEGER_SIZE && j-i<=nb; j++){
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
77 carry= (carry>>16) + out.v[j] + a.v[i]*b.v[j-i];
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
78 out.v[j]= carry;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
79 }
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
80 }
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
81
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
82 return out;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
83 }
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
84
2127
2c2f738772b7 more comments
michael
parents: 2001
diff changeset
85 /**
2c2f738772b7 more comments
michael
parents: 2001
diff changeset
86 * returns 0 if a==b, 1 if a>b and -1 if a<b.
2c2f738772b7 more comments
michael
parents: 2001
diff changeset
87 */
2001
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
88 int av_cmp_i(AVInteger a, AVInteger b){
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
89 int i;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
90 int v= (int16_t)a.v[AV_INTEGER_SIZE-1] - (int16_t)b.v[AV_INTEGER_SIZE-1];
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
91 if(v) return (v>>16)|1;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
92
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
93 for(i=AV_INTEGER_SIZE-2; i>=0; i--){
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
94 int v= a.v[i] - b.v[i];
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
95 if(v) return (v>>16)|1;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
96 }
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
97 return 0;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
98 }
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
99
2127
2c2f738772b7 more comments
michael
parents: 2001
diff changeset
100 /**
2c2f738772b7 more comments
michael
parents: 2001
diff changeset
101 * bitwise shift.
2c2f738772b7 more comments
michael
parents: 2001
diff changeset
102 * @param s the number of bits by which the value should be shifted right, may be negative for shifting left
2c2f738772b7 more comments
michael
parents: 2001
diff changeset
103 */
2001
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
104 AVInteger av_shr_i(AVInteger a, int s){
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
105 AVInteger out;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
106 int i;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
107
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
108 for(i=0; i<AV_INTEGER_SIZE; i++){
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
109 int index= i + (s>>4);
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
110 unsigned int v=0;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
111 if(index+1<AV_INTEGER_SIZE && index+1>=0) v = a.v[index+1]<<16;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
112 if(index <AV_INTEGER_SIZE && index >=0) v+= a.v[index ];
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
113 out.v[i]= v >> (s&15);
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
114 }
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
115 return out;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
116 }
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
117
2127
2c2f738772b7 more comments
michael
parents: 2001
diff changeset
118 /**
2c2f738772b7 more comments
michael
parents: 2001
diff changeset
119 * returns a % b.
2c2f738772b7 more comments
michael
parents: 2001
diff changeset
120 * @param quot a/b will be stored here
2c2f738772b7 more comments
michael
parents: 2001
diff changeset
121 */
2001
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
122 AVInteger av_mod_i(AVInteger *quot, AVInteger a, AVInteger b){
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
123 int i= av_log2_i(a) - av_log2_i(b);
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
124 AVInteger quot_temp;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
125 if(!quot) quot = &quot_temp;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
126
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
127 assert((int16_t)a[AV_INTEGER_SIZE-1] >= 0 && (int16_t)b[AV_INTEGER_SIZE-1] >= 0);
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
128 assert(av_log2(b)>=0);
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
129
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
130 if(i > 0)
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
131 b= av_shr_i(b, -i);
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
132
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
133 memset(quot, 0, sizeof(AVInteger));
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
134
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
135 while(i-- >= 0){
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
136 *quot= av_shr_i(*quot, -1);
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
137 if(av_cmp_i(a, b) >= 0){
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
138 a= av_sub_i(a, b);
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
139 quot->v[0] += 1;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
140 }
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
141 b= av_shr_i(b, 1);
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
142 }
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
143 return a;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
144 }
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
145
2127
2c2f738772b7 more comments
michael
parents: 2001
diff changeset
146 /**
2c2f738772b7 more comments
michael
parents: 2001
diff changeset
147 * returns a/b.
2c2f738772b7 more comments
michael
parents: 2001
diff changeset
148 */
2001
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
149 AVInteger av_div_i(AVInteger a, AVInteger b){
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
150 AVInteger quot;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
151 av_mod_i(&quot, a, b);
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
152 return quot;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
153 }
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
154
2127
2c2f738772b7 more comments
michael
parents: 2001
diff changeset
155 /**
2c2f738772b7 more comments
michael
parents: 2001
diff changeset
156 * converts the given int64_t to an AVInteger.
2c2f738772b7 more comments
michael
parents: 2001
diff changeset
157 */
2001
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
158 AVInteger av_int2i(int64_t a){
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
159 AVInteger out;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
160 int i;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
161
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
162 for(i=0; i<AV_INTEGER_SIZE; i++){
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
163 out.v[i]= a;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
164 a>>=16;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
165 }
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
166 return out;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
167 }
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
168
2127
2c2f738772b7 more comments
michael
parents: 2001
diff changeset
169 /**
2c2f738772b7 more comments
michael
parents: 2001
diff changeset
170 * converts the given AVInteger to an int64_t.
2c2f738772b7 more comments
michael
parents: 2001
diff changeset
171 * if the AVInteger is too large to fit into an int64_t,
2c2f738772b7 more comments
michael
parents: 2001
diff changeset
172 * then only the least significant 64bit will be used
2c2f738772b7 more comments
michael
parents: 2001
diff changeset
173 */
2001
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
174 int64_t av_i2int(AVInteger a){
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
175 int i;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
176 int64_t out=(int8_t)a.v[AV_INTEGER_SIZE-1];
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
177
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
178 for(i= AV_INTEGER_SIZE-2; i>=0; i--){
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
179 out = (out<<16) + a.v[i];
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
180 }
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
181 return out;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
182 }
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
183
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
184 #if 0
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
185 #undef NDEBUG
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
186 #include <assert.h>
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
187
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
188 const uint8_t ff_log2_tab[256]={
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
189 0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
190 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
191 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
192 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
193 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
194 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
195 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
196 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
197 };
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
198
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
199 main(){
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
200 int64_t a,b;
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
201
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
202 for(a=7; a<256*256*256; a+=13215){
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
203 for(b=3; b<256*256*256; b+=27118){
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
204 AVInteger ai= av_int2i(a);
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
205 AVInteger bi= av_int2i(b);
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
206
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
207 assert(av_i2int(ai) == a);
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
208 assert(av_i2int(bi) == b);
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
209 assert(av_i2int(av_add_i(ai,bi)) == a+b);
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
210 assert(av_i2int(av_sub_i(ai,bi)) == a-b);
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
211 assert(av_i2int(av_mul_i(ai,bi)) == a*b);
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
212 assert(av_i2int(av_shr_i(ai, 9)) == a>>9);
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
213 assert(av_i2int(av_shr_i(ai,-9)) == a<<9);
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
214 assert(av_i2int(av_shr_i(ai, 17)) == a>>17);
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
215 assert(av_i2int(av_shr_i(ai,-17)) == a<<17);
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
216 assert(av_log2_i(ai) == av_log2(a));
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
217 assert(av_i2int(av_div_i(ai,bi)) == a/b);
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
218 }
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
219 }
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
220 }
7523553ca85f arbitrary precision integer support
michael
parents:
diff changeset
221 #endif