mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
ffmpeg: fix reading from stdin on windows
Based on code by Rolf Siegrist Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
31dfc49598
commit
ca4d71b149
2
configure
vendored
2
configure
vendored
@ -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
|
||||
|
28
ffmpeg.c
28
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
|
||||
|
Loading…
Reference in New Issue
Block a user