* commit '0a75d1da23b8659ec49391469bb592da12760077': options_table: refs option is not snow-only random_seed: Support using CryptGenRandom on windows doc: update the faq entry about custom I/O Conflicts: doc/faq.texi libavcodec/options_table.h Merged-by: Michael Niedermayer <michaelni@gmx.at>tags/n1.1
@@ -1281,6 +1281,7 @@ HAVE_LIST=" | |||||
closesocket | closesocket | ||||
cmov | cmov | ||||
cpunop | cpunop | ||||
CryptGenRandom | |||||
dcbzl | dcbzl | ||||
dev_bktr_ioctl_bt848_h | dev_bktr_ioctl_bt848_h | ||||
dev_bktr_ioctl_meteor_h | dev_bktr_ioctl_meteor_h | ||||
@@ -3540,6 +3541,7 @@ check_func_headers windows.h PeekNamedPipe | |||||
check_func_headers io.h setmode | check_func_headers io.h setmode | ||||
check_func_headers lzo/lzo1x.h lzo1x_999_compress | check_func_headers lzo/lzo1x.h lzo1x_999_compress | ||||
check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32 | check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32 | ||||
check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32 | |||||
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi | check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi | ||||
check_func_headers windows.h GetProcessAffinityMask | check_func_headers windows.h GetProcessAffinityMask | ||||
check_func_headers windows.h GetProcessTimes | check_func_headers windows.h GetProcessTimes | ||||
@@ -467,8 +467,8 @@ to use them you have to append -D__STDC_CONSTANT_MACROS to your CXXFLAGS | |||||
@section I have a file in memory / a API different from *open/*read/ libc how do I use it with libavformat? | @section I have a file in memory / a API different from *open/*read/ libc how do I use it with libavformat? | ||||
You have to implement a URLProtocol, see @file{libavformat/file.c} in | |||||
FFmpeg and @file{libmpdemux/demux_lavf.c} in MPlayer sources. | |||||
You have to create a custom AVIOContext using @code{avio_alloc_context}, | |||||
see @file{libavformat/aviobuf.c} in FFmpeg and @file{libmpdemux/demux_lavf.c} in MPlayer or MPlayer2 sources. | |||||
@section Where can I find libav* headers for Pascal/Delphi? | @section Where can I find libav* headers for Pascal/Delphi? | ||||
@@ -23,6 +23,10 @@ | |||||
#if HAVE_UNISTD_H | #if HAVE_UNISTD_H | ||||
#include <unistd.h> | #include <unistd.h> | ||||
#endif | #endif | ||||
#if HAVE_CRYPTGENRANDOM | |||||
#include <windows.h> | |||||
#include <wincrypt.h> | |||||
#endif | |||||
#include <fcntl.h> | #include <fcntl.h> | ||||
#include <math.h> | #include <math.h> | ||||
#include <time.h> | #include <time.h> | ||||
@@ -102,6 +106,17 @@ uint32_t av_get_random_seed(void) | |||||
{ | { | ||||
uint32_t seed; | uint32_t seed; | ||||
#if HAVE_CRYPTGENRANDOM | |||||
HCRYPTPROV provider; | |||||
if (CryptAcquireContext(&provider, NULL, NULL, PROV_RSA_FULL, | |||||
CRYPT_VERIFYCONTEXT | CRYPT_SILENT)) { | |||||
BOOL ret = CryptGenRandom(provider, sizeof(seed), (PBYTE) &seed); | |||||
CryptReleaseContext(provider, 0); | |||||
if (ret) | |||||
return seed; | |||||
} | |||||
#endif | |||||
if (read_random(&seed, "/dev/urandom") == sizeof(seed)) | if (read_random(&seed, "/dev/urandom") == sizeof(seed)) | ||||
return seed; | return seed; | ||||
if (read_random(&seed, "/dev/random") == sizeof(seed)) | if (read_random(&seed, "/dev/random") == sizeof(seed)) | ||||