|
|
@@ -21,6 +21,7 @@ |
|
|
|
#include <unistd.h> |
|
|
|
#include <fcntl.h> |
|
|
|
#include "timer.h" |
|
|
|
#include "time.h" |
|
|
|
#include "random_seed.h" |
|
|
|
#include "avutil.h" |
|
|
|
|
|
|
@@ -37,6 +38,38 @@ static int read_random(uint32_t *dst, const char *file) |
|
|
|
return err; |
|
|
|
} |
|
|
|
|
|
|
|
static uint32_t get_generic_seed(void) |
|
|
|
{ |
|
|
|
int last_t=0; |
|
|
|
int bits=0; |
|
|
|
uint64_t random=0; |
|
|
|
int i; |
|
|
|
int s=0; |
|
|
|
|
|
|
|
for(i=0;bits<64;i++){ |
|
|
|
int t= clock()>>s; |
|
|
|
if(last_t && t != last_t){ |
|
|
|
if(i<10000U && s<24){ |
|
|
|
s++; |
|
|
|
i=t=0; |
|
|
|
}else{ |
|
|
|
random= 2*random + (i&1); |
|
|
|
bits++; |
|
|
|
} |
|
|
|
} |
|
|
|
last_t= t; |
|
|
|
} |
|
|
|
#ifdef AV_READ_TIME |
|
|
|
random ^= AV_READ_TIME(); |
|
|
|
#else |
|
|
|
random ^= clock(); |
|
|
|
#endif |
|
|
|
|
|
|
|
random += random>>32; |
|
|
|
|
|
|
|
return random; |
|
|
|
} |
|
|
|
|
|
|
|
uint32_t av_get_random_seed(void) |
|
|
|
{ |
|
|
|
uint32_t seed; |
|
|
@@ -45,12 +78,7 @@ uint32_t av_get_random_seed(void) |
|
|
|
return seed; |
|
|
|
if (read_random(&seed, "/dev/random") == sizeof(seed)) |
|
|
|
return seed; |
|
|
|
|
|
|
|
#ifdef AV_READ_TIME |
|
|
|
seed = AV_READ_TIME(); |
|
|
|
#endif |
|
|
|
// XXX what to do ? |
|
|
|
return seed; |
|
|
|
return get_generic_seed(); |
|
|
|
} |
|
|
|
|
|
|
|
#if LIBAVUTIL_VERSION_MAJOR < 51 |
|
|
|