Browse code

Replace random() usage in test programs by av_lfg_*().

Originally committed as revision 18070 to svn://svn.ffmpeg.org/ffmpeg/trunk

Diego Biurrun authored on 2009/03/20 20:48:27
Showing 9 changed files
... ...
@@ -179,9 +179,9 @@ void ff_init_cabac_states(CABACContext *c){
179 179
 }
180 180
 
181 181
 #ifdef TEST
182
-#undef random
183 182
 #define SIZE 10240
184 183
 
184
+#include "libavutil/lfg.h"
185 185
 #include "avcodec.h"
186 186
 #include "cabac.h"
187 187
 
... ...
@@ -191,12 +191,14 @@ int main(void){
191 191
     uint8_t r[9*SIZE];
192 192
     int i;
193 193
     uint8_t state[10]= {0};
194
+    AVLFG prn;
194 195
 
196
+    av_lfg_init(&prn, 1);
195 197
     ff_init_cabac_encoder(&c, b, SIZE);
196 198
     ff_init_cabac_states(&c);
197 199
 
198 200
     for(i=0; i<SIZE; i++){
199
-        r[i]= random()%7;
201
+        r[i] = av_lfg_get(&prn) % 7;
200 202
     }
201 203
 
202 204
     for(i=0; i<SIZE; i++){
... ...
@@ -33,6 +33,7 @@
33 33
 #include <math.h>
34 34
 
35 35
 #include "libavutil/common.h"
36
+#include "libavutil/lfg.h"
36 37
 
37 38
 #include "simple_idct.h"
38 39
 #include "aandcttab.h"
... ...
@@ -41,7 +42,6 @@
41 41
 #include "x86/idct_xvid.h"
42 42
 
43 43
 #undef printf
44
-#undef random
45 44
 
46 45
 void *fast_memcpy(void *a, const void *b, size_t c){return memcpy(a,b,c);};
47 46
 
... ...
@@ -208,8 +208,9 @@ void dct_error(const char *name, int is_idct,
208 208
     int64_t sysErr[64], sysErrMax=0;
209 209
     int maxout=0;
210 210
     int blockSumErrMax=0, blockSumErr;
211
+    AVLFG prn;
211 212
 
212
-    srandom(0);
213
+    av_lfg_init(&prn, 1);
213 214
 
214 215
     err_inf = 0;
215 216
     err2 = 0;
... ...
@@ -220,7 +221,7 @@ void dct_error(const char *name, int is_idct,
220 220
         switch(test){
221 221
         case 0:
222 222
             for(i=0;i<64;i++)
223
-                block1[i] = (random() % 512) -256;
223
+                block1[i] = (av_lfg_get(&prn) % 512) -256;
224 224
             if (is_idct){
225 225
                 fdct(block1);
226 226
 
... ...
@@ -229,12 +230,12 @@ void dct_error(const char *name, int is_idct,
229 229
             }
230 230
         break;
231 231
         case 1:{
232
-            int num= (random()%10)+1;
232
+            int num = av_lfg_get(&prn) % 10 + 1;
233 233
             for(i=0;i<num;i++)
234
-                block1[random()%64] = (random() % 512) -256;
234
+                block1[av_lfg_get(&prn) % 64] = av_lfg_get(&prn) % 512 -256;
235 235
         }break;
236 236
         case 2:
237
-            block1[0]= (random()%4096)-2048;
237
+            block1[0] = av_lfg_get(&prn) % 4096 - 2048;
238 238
             block1[63]= (block1[0]&1)^1;
239 239
         break;
240 240
         }
... ...
@@ -334,7 +335,7 @@ void dct_error(const char *name, int is_idct,
334 334
     switch(test){
335 335
     case 0:
336 336
         for(i=0;i<64;i++)
337
-            block1[i] = (random() % 512) -256;
337
+            block1[i] = av_lfg_get(&prn) % 512 -256;
338 338
         if (is_idct){
339 339
             fdct(block1);
340 340
 
... ...
@@ -344,10 +345,10 @@ void dct_error(const char *name, int is_idct,
344 344
     break;
345 345
     case 1:{
346 346
     case 2:
347
-        block1[0] = (random() % 512) -256;
348
-        block1[1] = (random() % 512) -256;
349
-        block1[2] = (random() % 512) -256;
350
-        block1[3] = (random() % 512) -256;
347
+        block1[0] = av_lfg_get(&prn) % 512 -256;
348
+        block1[1] = av_lfg_get(&prn) % 512 -256;
349
+        block1[2] = av_lfg_get(&prn) % 512 -256;
350
+        block1[3] = av_lfg_get(&prn) % 512 -256;
351 351
     }break;
352 352
     }
353 353
 
... ...
@@ -471,7 +472,9 @@ void idct248_error(const char *name,
471 471
 {
472 472
     int it, i, it1, ti, ti1, err_max, v;
473 473
 
474
-    srandom(0);
474
+    AVLFG prn;
475
+
476
+    av_lfg_init(&prn, 1);
475 477
 
476 478
     /* just one test to see if code is correct (precision is less
477 479
        important here) */
... ...
@@ -480,7 +483,7 @@ void idct248_error(const char *name,
480 480
 
481 481
         /* XXX: use forward transform to generate values */
482 482
         for(i=0;i<64;i++)
483
-            block1[i] = (random() % 256) - 128;
483
+            block1[i] = av_lfg_get(&prn) % 256 - 128;
484 484
         block1[0] += 1024;
485 485
 
486 486
         for(i=0; i<64; i++)
... ...
@@ -23,6 +23,7 @@
23 23
  * FFT and MDCT tests.
24 24
  */
25 25
 
26
+#include "libavutil/lfg.h"
26 27
 #include "dsputil.h"
27 28
 #include <math.h>
28 29
 #include <unistd.h>
... ...
@@ -31,7 +32,6 @@
31 31
 #include <string.h>
32 32
 
33 33
 #undef exit
34
-#undef random
35 34
 
36 35
 /* reference fft */
37 36
 
... ...
@@ -131,7 +131,9 @@ void mdct_ref(float *output, float *input, int nbits)
131 131
 
132 132
 float frandom(void)
133 133
 {
134
-    return (float)((random() & 0xffff) - 32768) / 32768.0;
134
+    AVLFG prn;
135
+    av_lfg_init(&prn, 1);
136
+    return (float)((av_lfg_get(&prn) & 0xffff) - 32768) / 32768.0;
135 137
 }
136 138
 
137 139
 int64_t gettime(void)
... ...
@@ -30,10 +30,10 @@
30 30
 #include <unistd.h>
31 31
 
32 32
 #include "dsputil.h"
33
+#include "libavutil/lfg.h"
33 34
 
34 35
 #undef exit
35 36
 #undef printf
36
-#undef random
37 37
 
38 38
 #define WIDTH 64
39 39
 #define HEIGHT 64
... ...
@@ -44,9 +44,12 @@ uint8_t img2[WIDTH * HEIGHT];
44 44
 void fill_random(uint8_t *tab, int size)
45 45
 {
46 46
     int i;
47
+    AVLFG prn;
48
+
49
+    av_lfg_init(&prn, 1);
47 50
     for(i=0;i<size;i++) {
48 51
 #if 1
49
-        tab[i] = random() % 256;
52
+        tab[i] = av_lfg_get(&prn) % 256;
50 53
 #else
51 54
         tab[i] = i;
52 55
 #endif
... ...
@@ -142,7 +145,7 @@ int main(int argc, char **argv)
142 142
     ctx = avcodec_alloc_context();
143 143
     ctx->dsp_mask = FF_MM_FORCE;
144 144
     dsputil_init(&cctx, ctx);
145
-    for (c = 0; c < 2; c++) {
145
+    for (c = 0; c < 1; c++) {
146 146
         int x;
147 147
         ctx->dsp_mask = FF_MM_FORCE | flags[c];
148 148
         dsputil_init(&mmxctx, ctx);
... ...
@@ -111,13 +111,18 @@ int ff_rac_terminate(RangeCoder *c){
111 111
 
112 112
 #ifdef TEST
113 113
 #define SIZE 10240
114
-#undef random
114
+
115
+#include "libavutil/lfg.h"
116
+
115 117
 int main(void){
116 118
     RangeCoder c;
117 119
     uint8_t b[9*SIZE];
118 120
     uint8_t r[9*SIZE];
119 121
     int i;
120 122
     uint8_t state[10]= {0};
123
+    AVLFG prn;
124
+
125
+    av_lfg_init(&prn, 1);
121 126
 
122 127
     ff_init_range_encoder(&c, b, SIZE);
123 128
     ff_build_rac_states(&c, 0.05*(1LL<<32), 128+64+32+16);
... ...
@@ -125,7 +130,7 @@ int main(void){
125 125
     memset(state, 128, sizeof(state));
126 126
 
127 127
     for(i=0; i<SIZE; i++){
128
-        r[i]= random()%7;
128
+        r[i] = av_lfg_get(&prn) % 7;
129 129
     }
130 130
 
131 131
     for(i=0; i<SIZE; i++){
... ...
@@ -4689,7 +4689,8 @@ AVCodec snow_encoder = {
4689 4689
 #undef malloc
4690 4690
 #undef free
4691 4691
 #undef printf
4692
-#undef random
4692
+
4693
+#include "libavutil/lfg.h"
4693 4694
 
4694 4695
 int main(void){
4695 4696
     int width=256;
... ...
@@ -4699,10 +4700,13 @@ int main(void){
4699 4699
     int i;
4700 4700
     s.spatial_decomposition_count=6;
4701 4701
     s.spatial_decomposition_type=1;
4702
+    AVLFG prn;
4703
+
4704
+    av_lfg_init(&prn, 1);
4702 4705
 
4703 4706
     printf("testing 5/3 DWT\n");
4704 4707
     for(i=0; i<width*height; i++)
4705
-        buffer[0][i]= buffer[1][i]= random()%54321 - 12345;
4708
+        buffer[0][i] = buffer[1][i] = av_lfg_get(&prn) % 54321 - 12345;
4706 4709
 
4707 4710
     ff_spatial_dwt(buffer[0], width, height, width, s.spatial_decomposition_type, s.spatial_decomposition_count);
4708 4711
     ff_spatial_idwt(buffer[0], width, height, width, s.spatial_decomposition_type, s.spatial_decomposition_count);
... ...
@@ -4713,7 +4717,7 @@ int main(void){
4713 4713
     printf("testing 9/7 DWT\n");
4714 4714
     s.spatial_decomposition_type=0;
4715 4715
     for(i=0; i<width*height; i++)
4716
-        buffer[0][i]= buffer[1][i]= random()%54321 - 12345;
4716
+        buffer[0][i] = buffer[1][i] = av_lfg_get(&prn) % 54321 - 12345;
4717 4717
 
4718 4718
     ff_spatial_dwt(buffer[0], width, height, width, s.spatial_decomposition_type, s.spatial_decomposition_count);
4719 4719
     ff_spatial_idwt(buffer[0], width, height, width, s.spatial_decomposition_type, s.spatial_decomposition_count);
... ...
@@ -192,10 +192,9 @@ int av_aes_init(AVAES *a, const uint8_t *key, int key_bits, int decrypt) {
192 192
 }
193 193
 
194 194
 #ifdef TEST
195
+#include "lfg.h"
195 196
 #include "log.h"
196 197
 
197
-#undef random
198
-
199 198
 int main(void){
200 199
     int i,j;
201 200
     AVAES ae, ad, b;
... ...
@@ -209,10 +208,12 @@ int main(void){
209 209
         {0x73, 0x22, 0x81, 0xc0, 0xa0, 0xaa, 0xb8, 0xf7, 0xa5, 0x4a, 0x0c, 0x67, 0xa0, 0xc4, 0x5e, 0xcf},
210 210
         {0x6d, 0x25, 0x1e, 0x69, 0x44, 0xb0, 0x51, 0xe0, 0x4e, 0xaa, 0x6f, 0xb4, 0xdb, 0xf7, 0x84, 0x65}};
211 211
     uint8_t temp[16];
212
+    AVLFG prn;
212 213
 
213 214
     av_aes_init(&ae, "PI=3.141592654..", 128, 0);
214 215
     av_aes_init(&ad, "PI=3.141592654..", 128, 1);
215 216
     av_log_set_level(AV_LOG_DEBUG);
217
+    av_lfg_init(&prn, 1);
216 218
 
217 219
     for(i=0; i<2; i++){
218 220
         av_aes_init(&b, rkey[i], 128, 1);
... ...
@@ -224,7 +225,7 @@ int main(void){
224 224
 
225 225
     for(i=0; i<10000; i++){
226 226
         for(j=0; j<16; j++){
227
-            pt[j]= random();
227
+            pt[j] = av_lfg_get(&prn);
228 228
         }
229 229
 {START_TIMER
230 230
         av_aes_crypt(&ae, temp, pt, 1, NULL, 0);
... ...
@@ -164,9 +164,9 @@ int ff_pca(PCA *pca, double *eigenvector, double *eigenvalue){
164 164
 #ifdef TEST
165 165
 
166 166
 #undef printf
167
-#undef random
168 167
 #include <stdio.h>
169 168
 #include <stdlib.h>
169
+#include "lfg.h"
170 170
 
171 171
 int main(void){
172 172
     PCA *pca;
... ...
@@ -174,15 +174,18 @@ int main(void){
174 174
 #define LEN 8
175 175
     double eigenvector[LEN*LEN];
176 176
     double eigenvalue[LEN];
177
+    AVLFG prn;
178
+
179
+    av_lfg_init(&prn, 1);
177 180
 
178 181
     pca= ff_pca_init(LEN);
179 182
 
180 183
     for(i=0; i<9000000; i++){
181 184
         double v[2*LEN+100];
182 185
         double sum=0;
183
-        int pos= random()%LEN;
184
-        int v2= (random()%101) - 50;
185
-        v[0]= (random()%101) - 50;
186
+        int pos = av_lfg_get(&prn) % LEN;
187
+        int v2  = av_lfg_get(&prn) % 101 - 50;
188
+        v[0]    = av_lfg_get(&prn) % 101 - 50;
186 189
         for(j=1; j<8; j++){
187 190
             if(j<=pos) v[j]= v[0];
188 191
             else       v[j]= v2;
... ...
@@ -191,7 +194,7 @@ int main(void){
191 191
 /*        for(j=0; j<LEN; j++){
192 192
             v[j] -= v[pos];
193 193
         }*/
194
-//        sum += random()%10;
194
+//        sum += av_lfg_get(&prn) % 10;
195 195
 /*        for(j=0; j<LEN; j++){
196 196
             v[j] -= sum/LEN;
197 197
         }*/
... ...
@@ -144,7 +144,9 @@ void av_tree_enumerate(AVTreeNode *t, void *opaque, int (*f)(void *opaque, void
144 144
 #endif
145 145
 
146 146
 #ifdef TEST
147
-#undef random
147
+
148
+#include "lfg.h"
149
+
148 150
 static int check(AVTreeNode *t){
149 151
     if(t){
150 152
         int left= check(t->child[0]);
... ...
@@ -179,9 +181,12 @@ int cmp(const void *a, const void *b){
179 179
 int main(void){
180 180
     int i,k;
181 181
     AVTreeNode *root= NULL, *node=NULL;
182
+    AVLFG prn;
183
+
184
+    av_lfg_init(&prn, 1);
182 185
 
183 186
     for(i=0; i<10000; i++){
184
-        int j= (random()%86294);
187
+        int j = av_lfg_get(&prn) % 86294;
185 188
         if(check(root) > 999){
186 189
             av_log(NULL, AV_LOG_ERROR, "FATAL error %d\n", i);
187 190
         print(root, 0);
... ...
@@ -192,7 +197,7 @@ int main(void){
192 192
             node= av_mallocz(av_tree_node_size);
193 193
         av_tree_insert(&root, (void*)(j+1), cmp, &node);
194 194
 
195
-        j= (random()%86294);
195
+        j = av_lfg_get(&prn) % 86294;
196 196
         {
197 197
             AVTreeNode *node2=NULL;
198 198
             av_log(NULL, AV_LOG_ERROR, "removing %4d\n", j);