On Fri, 30 Sep 2016, Nicolas George wrote:

Le nonidi 9 vendémiaire, an CCXXV, Marton Balint a écrit :
Signed-off-by: Marton Balint <c...@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
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to