unsignedintmt[AV_RANDOM_N];///< the array for the state vector
intindex;///< current untempered value we use as the base.
intindex;///< Current untempered value we use as the base.
}AVRandomState;
voidav_init_random(unsignedintseed,AVRandomState*state);///< to be inlined, the struct must be visible, so it doesn't make sense to try and keep it opaque with malloc/free like calls
voidav_random_generate_untempered_numbers(AVRandomState*state);///< Regenerate the untempered numbers (must be done every 624 iterations, or it will loop)
voidav_init_random(unsignedintseed,AVRandomState*state);///< To be inlined, the struct must be visible. So it does not make sense to try and keep it opaque with malloc/free-like calls.
voidav_random_generate_untempered_numbers(AVRandomState*state);///< Regenerate the untempered numbers (must be done every 624 iterations, or it will loop).
/**
* generates a random number on [0,0xffffffff]-interval
* Generates a random number from the interval [0,0xffffffff].
*
* Please do NOT use the mersenne twister, it is slow, use the random generator
* Please do NOT use the Mersenne Twister, it is slow. Use the random generator
* from lfg.c/h or a simple LCG like state= state*1664525+1013904223.
* If you still choose to use MT, expect that you will have to provide
* some evidence that it makes a difference for the case where you use it.
...
...
@@ -47,14 +47,14 @@ static inline unsigned int av_random(AVRandomState *state)
{
unsignedinty;
// regenerate the untempered numbers if we should...
// Regenerate the untempered numbers if we should...
if(state->index>=AV_RANDOM_N)
av_random_generate_untempered_numbers(state);
// grab one...
// Grab one...
y=state->mt[state->index++];
/* Now temper (Mersenne Twister coefficients) The coefficients for MT19937 are.. */
/* Now temper (Mersenne Twister coefficients). The coefficients for MT19937 are.. */
y^=(y>>11);
y^=(y<<7)&0x9d2c5680;
y^=(y<<15)&0xefc60000;
...
...
@@ -63,7 +63,7 @@ static inline unsigned int av_random(AVRandomState *state)