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