[FFmpeg-devel] [PATCH] Yield on AVERROR(EAGAIN).

Luca Abeni lucabe72
Fri Mar 5 11:46:03 CET 2010


Michael Niedermayer wrote:
> On Fri, Mar 05, 2010 at 08:23:07AM +0100, Reimar D?ffinger wrote:
>> On Fri, Mar 05, 2010 at 03:48:52AM +0100, Michael Niedermayer wrote:
>>> What you suggest needs a select() like system that works with files,
>>> network protocols, audio and video grab APIs as well as screen capture
>>> APIs needs to work on all platforms
>>> that support yield()/sleep() of some kind and needs to work with
>>> any set of supported protocols on that platform and needs protocols
>>> to pass thier file/object handle(s) through demuxers to the user app so
>>> it can do that select() call
>> Actually... No, it would be enough for the devices to just do a select themselves.
> 
>> After all, our networking code does not just do a non-blocking read and then
>> just returns EAGAIN if it didn't get anything.
> 
> this should be fixed of course

The networking code does not support the AVFMT_FLAG_NONBLOCK flag.
I tried adding support for it in the UDP and RTP protocols some
time ago (this is actually quite trivial), but then I had issues with
some other code in libavformat (av_find_stream_info(), if I remember
well - but I might be wrong) that is not prepared to it...
Then, I ran out of time :)
As soon as I find some time, I'll return on this issue.


>> Now the issue is a bit larger if audio and video are separate, we can't block
>> on one while the other overflows a buffer, but a 10ms select in each of the
>> devices that currently cause this issue should be enough, shouldn't it?
> 
> demuxers or protocols blocking a single thread application is bad.
> and not scaleable at all
[...]

I fully agree with this (this is why I started looking at
AVFMT_FLAG_NONBLOCK support for the networking code).



				Luca



More information about the ffmpeg-devel mailing list