summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2011-09-04 00:24:06 +0200
committerMichael Niedermayer <michaelni@gmx.at>2011-09-04 02:14:39 +0200
commitca4d71b149ebe32aeaf617ffccf362624b9aafb1 (patch)
treeaf459b3531d0a7eba20996e8fef913ae7f5d02b5
parent31dfc4959816aa4637e50c7f79660c75205ef84c (diff)
ffmpeg: fix reading from stdin on windows
Based on code by Rolf Siegrist Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rwxr-xr-xconfigure2
-rw-r--r--ffmpeg.c28
2 files changed, 29 insertions, 1 deletions
diff --git a/configure b/configure
index 0752d73302..10269db2f0 100755
--- a/configure
+++ b/configure
@@ -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
diff --git a/ffmpeg.c b/ffmpeg.c
index 96515c0bcc..8b9cf1c1ac 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -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