[FFmpeg-devel] Windows deprecated stdin reading method

Peter dravorek at googlemail.com
Sun Mar 8 00:46:27 CET 2015


Alright, I may have been really stupid, for some reason I always passed
"input_handle" to read and WaitForSingleObject instead of stdin, no clue
what happened there in my head.

Turns out this actually works in my initial tests:

https://github.com/Bigpet/FFmpeg/commit/93864dd0373bc6561be8e45f14f835453c74e832

2015-03-08 0:22 GMT+01:00 Peter <dravorek at googlemail.com>:
>>It checks if there is data in the buffer. The point is to do a non-blocking read on stdin.
>
> I don't know how else to do that for stdin. Using WaitForSingleObject with
> generic functions like read() from io.h or ReadFile doesn't work since
> WaitForSingleObject will trigger on mouse and windows events, so calling those
> functions can result in blocking (even if I wait for an actual keyboard event).
>
> Or is that code specifically there to deal with everything that is not a
> console and what I actually need to do there is somehow typecheck that
> GetStdHandle did not return a console and only then call one of the generic
> read functions? (and let the kbhit and getch that come afterwards handle the
> console)
>
> 2015-03-07 23:38 GMT+01:00 Reimar Döffinger <Reimar.Doeffinger at gmx.de>:
>> On 07.03.2015, at 16:51, Peter <dravorek at googlemail.com> wrote:
>>> The issue is this patch
>>> https://github.com/FFmpeg/FFmpeg/commit/ca4d71b149ebe32aeaf617ffccf362624b9aafb1
>>> which uses a member of the FILE struct which is not available in the
>>> new C runtime (it's now just a struct with a void*).
>>>
>>> I do not quite know the semantics of the stdin->_cnt > 0 check.
>>
>> It checks if there is data in the buffer. The point is to do a non-blocking read on stdin.
>>
>>> So I tried a few approaches, like using the deprecated function that is called
>>> after the #ifdef block anyway:
>>> https://github.com/Bigpet/FFmpeg/commit/b167e17e6f8839e1b4ce0edad2708ff4237e4aec
>>> (I'm kind of worried about this since using "read(0, &ch, 1);" instead
>>> of "getch" with that if
>>> condition actually blocks in some cases, so it's not 100% equivalent)
>>>
>>> Or trying to understand what the non-deprecated Win32 API calls would look like:
>>> https://github.com/Bigpet/FFmpeg/commit/8d9cae13f389ab7dddc736ecac3feb01843ca094
>>
>> I don't think that's generic enough, you can't know what kind of thing stdin is, so using any non-generic function on it might break things...
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel at ffmpeg.org
>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


More information about the ffmpeg-devel mailing list