ffmpeg / libavutil / lfg.h @ d71ad089
History | View | Annotate | Download (1.71 KB)
1 | 2754fe8b | Michael Niedermayer | /*
|
---|---|---|---|
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 | 98790382 | Stefano Sabatini | #ifndef AVUTIL_LFG_H
|
23 | #define AVUTIL_LFG_H
|
||
24 | 2754fe8b | Michael Niedermayer | |
25 | typedef struct { |
||
26 | unsigned int state[64]; |
||
27 | int index;
|
||
28 | } AVLFG; |
||
29 | |||
30 | void av_lfg_init(AVLFG *c, unsigned int seed); |
||
31 | |||
32 | 2cf3c863 | Michael Niedermayer | /**
|
33 | 89c9ff50 | Diego Biurrun | * Gets the next random unsigned 32-bit number using an ALFG.
|
34 | 2cf3c863 | Michael Niedermayer | *
|
35 | * Please also consider a simple LCG like state= state*1664525+1013904223,
|
||
36 | * it may be good enough and faster for your specific use case.
|
||
37 | */
|
||
38 | 2754fe8b | Michael Niedermayer | static inline unsigned int av_lfg_get(AVLFG *c){ |
39 | c->state[c->index & 63] = c->state[(c->index-24) & 63] + c->state[(c->index-55) & 63]; |
||
40 | return c->state[c->index++ & 63]; |
||
41 | } |
||
42 | |||
43 | 310d4424 | Michael Niedermayer | /**
|
44 | 89c9ff50 | Diego Biurrun | * Gets the next random unsigned 32-bit number using a MLFG.
|
45 | 310d4424 | Michael Niedermayer | *
|
46 | 89c9ff50 | Diego Biurrun | * Please also consider av_lfg_get() above, it is faster.
|
47 | 310d4424 | Michael Niedermayer | */
|
48 | static inline unsigned int av_mlfg_get(AVLFG *c){ |
||
49 | unsigned int a= c->state[(c->index-55) & 63]; |
||
50 | unsigned int b= c->state[(c->index-24) & 63]; |
||
51 | f39e8b03 | Michael Niedermayer | return c->state[c->index++ & 63] = 2*a*b+a+b; |
52 | 310d4424 | Michael Niedermayer | } |
53 | |||
54 | 98790382 | Stefano Sabatini | #endif /* AVUTIL_LFG_H */ |