[FFmpeg-devel] [PATCH 3/3] lavd/openal: return EAGAIN if no samples are available
Marton Balint
cus at passwd.hu
Fri Sep 30 21:27:16 EEST 2016
On Fri, 30 Sep 2016, Nicolas George wrote:
> Le nonidi 9 vendémiaire, an CCXXV, Marton Balint a écrit :
>> Signed-off-by: Marton Balint <cus at passwd.hu>
>> ---
>> libavdevice/openal-dec.c | 3 +++
>> 1 file changed, 3 insertions(+)
>>
>> diff --git a/libavdevice/openal-dec.c b/libavdevice/openal-dec.c
>> index 0647952..8773944 100644
>> --- a/libavdevice/openal-dec.c
>> +++ b/libavdevice/openal-dec.c
>> @@ -191,6 +191,9 @@ static int read_packet(AVFormatContext* ctx, AVPacket *pkt)
>> alcGetIntegerv(ad->device, ALC_CAPTURE_SAMPLES, (ALCsizei) sizeof(ALCint), &nb_samples);
>> if (error = al_get_error(ad->device, &error_msg)) goto fail;
>>
>> + if (nb_samples == 0)
>> + return AVERROR(EAGAIN);
>> +
>
> EAGAIN is only acceptable in non-blocking mode. You may be able to use REDO
> (I do not remember the exact name), but beware you are not creating a
> busy-wait loop.
>
Alsa dev and v4l2 seem to work this way regardless if non blocking mode is
set or not, and ffmpeg.c also waits if it encounters AVERROR(EAGAIN) in
av_read_frame. So AVERROR(EAGAIN) return value seems to be consistent with
existing code, which assumes that if EAGAIN is returned from
av_read_frame, wait a bit.
If what you wrote is the way to move forward, then at least send a
documentation patch, to establish this av_read_frame return
value behaviour.
Regards,
Marton
More information about the ffmpeg-devel
mailing list