[FFmpeg-cvslog] lavd/pulse_audio_enc: more stream validation restrictive

Lukasz Marek git at videolan.org
Sun Oct 27 22:10:33 CET 2013


ffmpeg | branch: master | Lukasz Marek <lukasz.m.luki at gmail.com> | Sun Oct 27 21:27:39 2013 +0100| [7f5e75eea94020aaddeda1960186ceee73ca1c36] | committer: Lukasz Marek

lavd/pulse_audio_enc: more stream validation restrictive

So far pulse device picked up first audio stream and ignored others.
It is required to provide exactly one audio stream now.

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

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

 libavdevice/pulse_audio_enc.c |   20 ++++----------------
 1 file changed, 4 insertions(+), 16 deletions(-)

diff --git a/libavdevice/pulse_audio_enc.c b/libavdevice/pulse_audio_enc.c
index 05df05c..e0f23c8 100644
--- a/libavdevice/pulse_audio_enc.c
+++ b/libavdevice/pulse_audio_enc.c
@@ -34,7 +34,6 @@ typedef struct PulseData {
     const char *stream_name;
     const char *device;
     pa_simple *pa;
-    unsigned int stream_index;
     int64_t timestamp;
 } PulseData;
 
@@ -43,23 +42,15 @@ static av_cold int pulse_write_header(AVFormatContext *h)
     PulseData *s = h->priv_data;
     AVStream *st = NULL;
     int ret;
-    unsigned int i;
     pa_sample_spec ss;
     pa_buffer_attr attr = { -1, -1, -1, -1, -1 };
     const char *stream_name = s->stream_name;
 
-    for (i = 0; i < h->nb_streams; i++) {
-        if (h->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
-            st = h->streams[i];
-            s->stream_index = i;
-            break;
-        }
-    }
-
-    if (!st) {
-        av_log(s, AV_LOG_ERROR, "No audio stream found.\n");
+    if (h->nb_streams != 1 || h->streams[0]->codec->codec_type != AVMEDIA_TYPE_AUDIO) {
+        av_log(s, AV_LOG_ERROR, "Only a single audio stream is supported.\n");
         return AVERROR(EINVAL);
     }
+    st = h->streams[0];
 
     if (!stream_name) {
         if (h->filename[0])
@@ -114,16 +105,13 @@ static int pulse_write_packet(AVFormatContext *h, AVPacket *pkt)
         return 0;
     }
 
-    if (s->stream_index != pkt->stream_index)
-        return 0;
-
     if (pkt->dts != AV_NOPTS_VALUE)
         s->timestamp = pkt->dts;
 
     if (pkt->duration) {
         s->timestamp += pkt->duration;;
     } else {
-        AVStream *st = h->streams[s->stream_index];
+        AVStream *st = h->streams[0];
         AVCodecContext *codec_ctx = st->codec;
         AVRational r = { 1, codec_ctx->sample_rate };
         int64_t samples = pkt->size / (av_get_bytes_per_sample(codec_ctx->sample_fmt) * codec_ctx->channels);



More information about the ffmpeg-cvslog mailing list