[FFmpeg-cvslog] lavd/pulse_audio_enc: add nonblocking mode

Lukasz Marek git at videolan.org
Fri Apr 18 05:04:09 CEST 2014


ffmpeg | branch: master | Lukasz Marek <lukasz.m.luki2 at gmail.com> | Sun Apr  6 23:12:44 2014 +0200| [bc31a57902b83ae09221d53861c35dcb0109c4f7] | committer: Lukasz Marek

lavd/pulse_audio_enc: add nonblocking mode

Signed-off-by: Lukasz Marek <lukasz.m.luki2 at gmail.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=bc31a57902b83ae09221d53861c35dcb0109c4f7
---

 libavdevice/pulse_audio_enc.c |   11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/libavdevice/pulse_audio_enc.c b/libavdevice/pulse_audio_enc.c
index 779766e..6c02399 100644
--- a/libavdevice/pulse_audio_enc.c
+++ b/libavdevice/pulse_audio_enc.c
@@ -41,6 +41,7 @@ typedef struct PulseData {
     pa_threaded_mainloop *mainloop;
     pa_context *ctx;
     pa_stream *stream;
+    int nonblocking;
 } PulseData;
 
 static void pulse_stream_writable(pa_stream *stream, size_t nbytes, void *userdata)
@@ -257,6 +258,7 @@ static av_cold int pulse_write_header(AVFormatContext *h)
         else
             stream_name = "Playback";
     }
+    s->nonblocking = (h->flags & AVFMT_FLAG_NONBLOCK);
 
     if (s->buffer_duration) {
         int64_t bytes = s->buffer_duration;
@@ -401,8 +403,13 @@ static int pulse_write_packet(AVFormatContext *h, AVPacket *pkt)
         av_log(s, AV_LOG_ERROR, "PulseAudio stream is in invalid state.\n");
         goto fail;
     }
-    while (!pa_stream_writable_size(s->stream))
-        pa_threaded_mainloop_wait(s->mainloop);
+    while (!pa_stream_writable_size(s->stream)) {
+        if (s->nonblocking) {
+            pa_threaded_mainloop_unlock(s->mainloop);
+            return AVERROR(EAGAIN);
+        } else
+            pa_threaded_mainloop_wait(s->mainloop);
+    }
 
     if ((ret = pa_stream_write(s->stream, pkt->data, pkt->size, NULL, 0, PA_SEEK_RELATIVE)) < 0) {
         av_log(s, AV_LOG_ERROR, "pa_stream_write failed: %s\n", pa_strerror(ret));



More information about the ffmpeg-cvslog mailing list