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