annotate lfg.c @ 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 ef2c3d23d344
children 41da9d9d39b7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
533
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
1 /*
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
2 * Lagged Fibonacci PRNG
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
3 * Copyright (c) 2008 Michael Niedermayer
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
4 *
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
5 * This file is part of FFmpeg.
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
6 *
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
11 *
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
15 * Lesser General Public License for more details.
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
16 *
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
20 */
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
21
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
22 #include <inttypes.h>
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
23 #include "lfg.h"
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
24 #include "md5.h"
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
25 #include "intreadwrite.h"
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
26
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
27 void av_cold av_lfg_init(AVLFG *c, unsigned int seed){
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
28 uint8_t tmp[16]={0};
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
29 int i;
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
30
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
31 for(i=8; i<64; i+=4){
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
32 AV_WL32(tmp, seed); tmp[4]=i;
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
33 av_md5_sum(tmp, tmp, 16);
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
34 c->state[i ]= AV_RL32(tmp);
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
35 c->state[i+1]= AV_RL32(tmp+4);
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
36 c->state[i+2]= AV_RL32(tmp+8);
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
37 c->state[i+3]= AV_RL32(tmp+12);
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
38 }
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
39 c->index=0;
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
40 }
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
41
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
42 #ifdef TEST
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
43 #include "log.h"
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
44 #include "common.h"
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
45
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
46 int main(void)
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
47 {
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
48 int x=0;
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
49 int i, j;
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
50 AVLFG state;
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
51
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
52 av_lfg_init(&state, 0xdeadbeef);
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
53 for (j = 0; j < 10000; j++) {
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
54 START_TIMER
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
55 for (i = 0; i < 624; i++) {
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
56 // av_log(NULL,AV_LOG_ERROR, "%X\n", av_lfg_get(&state));
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
57 x+=av_lfg_get(&state);
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
58 }
702
ef2c3d23d344 Fix reference to av_random where av_lfg_get was meant.
diego
parents: 533
diff changeset
59 STOP_TIMER("624 calls of av_lfg_get");
533
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
60 }
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
61 av_log(NULL, AV_LOG_ERROR, "final value:%X\n", x);
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
62 return 0;
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
63 }
02617c39b8ff Simple lagged fibonacci PRNG.
michael
parents:
diff changeset
64 #endif