Commit ca4d71b1 authored by Michael Niedermayer's avatar Michael Niedermayer

ffmpeg: fix reading from stdin on windows

Based on code by Rolf Siegrist
Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent 31dfc495
......@@ -1101,6 +1101,7 @@ HAVE_LIST="
memalign
mkstemp
mmap
PeekNamedPipe
posix_memalign
round
roundf
......@@ -2842,6 +2843,7 @@ check_func strerror_r
check_func strptime
check_func strtok_r
check_func_headers conio.h kbhit
check_func_headers windows.h PeekNamedPipe
check_func_headers io.h setmode
check_func_headers lzo/lzo1x.h lzo1x_999_compress
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
......
......@@ -487,9 +487,9 @@ static void term_init(void)
/* read a key without blocking */
static int read_key(void)
{
unsigned char ch;
#if HAVE_TERMIOS_H
int n = 1;
unsigned char ch;
struct timeval tv;
fd_set rfds;
......@@ -509,6 +509,32 @@ static int read_key(void)
return n;
}
#elif HAVE_KBHIT
# if HAVE_PEEKNAMEDPIPE
static int is_pipe;
static HANDLE input_handle;
DWORD dw, nchars;
if(!input_handle){
input_handle = GetStdHandle(STD_INPUT_HANDLE);
is_pipe = !GetConsoleMode(input_handle, &dw);
}
if (stdin->_cnt > 0) {
read(0, &ch, 1);
return ch;
}
if (is_pipe) {
/* When running under a GUI, you will end here. */
if (!PeekNamedPipe(input_handle, NULL, 0, NULL, &nchars, NULL))
return -1;
//Read it
if(nchars != 0) {
read(0, &ch, 1);
return ch;
}else{
return -1;
}
}
# endif
if(kbhit())
return(getch());
#endif
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment