diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2011-09-04 00:24:06 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2011-09-04 02:14:39 +0200 |
commit | ca4d71b149ebe32aeaf617ffccf362624b9aafb1 (patch) | |
tree | af459b3531d0a7eba20996e8fef913ae7f5d02b5 | |
parent | 31dfc4959816aa4637e50c7f79660c75205ef84c (diff) | |
download | ffmpeg-ca4d71b149ebe32aeaf617ffccf362624b9aafb1.tar.gz |
ffmpeg: fix reading from stdin on windows
Based on code by Rolf Siegrist
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rwxr-xr-x | configure | 2 | ||||
-rw-r--r-- | ffmpeg.c | 28 |
2 files changed, 29 insertions, 1 deletions
@@ -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 |