[FFmpeg-devel] [PATCH 2/4] lavd/pulse_audio_dec: add audio_device option

Lukasz Marek lukasz.m.luki at gmail.com
Fri Oct 11 00:39:37 CEST 2013


Device can be selected by passing AVOption as well.

Signed-off-by: Lukasz Marek <lukasz.m.luki at gmail.com>
---
 doc/indevs.texi               |   11 +++++------
 libavdevice/pulse_audio_dec.c |   10 ++++++++--
 2 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/doc/indevs.texi b/doc/indevs.texi
index 6bcb237..b7981c6 100644
--- a/doc/indevs.texi
+++ b/doc/indevs.texi
@@ -489,12 +489,6 @@ PulseAudio input device.
 
 To enable this output device you need to configure FFmpeg with @code{--enable-libpulse}.
 
-The filename to provide to the input device is a source device or the
-string "default"
-
-To list the PulseAudio source devices and their properties you can invoke
-the command @command{pactl list sources}.
-
 @subsection Options
 @table @option
 @item server
@@ -508,6 +502,11 @@ by default it is the @code{LIBAVFORMAT_IDENT} string.
 Specify the stream name PulseAudio will use when showing active streams,
 by default it is "record".
 
+ at item audio_device
+Specify the device to use. The specified input name is used as default.
+String "default" can be used to specify default device.
+List of input devices can be obtained with command @command{pactl list sources}.
+
 @item sample_rate
 Specify the samplerate in Hz, by default 48kHz is used.
 
diff --git a/libavdevice/pulse_audio_dec.c b/libavdevice/pulse_audio_dec.c
index 21b3caa..aa0c995 100644
--- a/libavdevice/pulse_audio_dec.c
+++ b/libavdevice/pulse_audio_dec.c
@@ -40,6 +40,7 @@ typedef struct PulseData {
     char *server;
     char *name;
     char *stream_name;
+    const char *device;
     int  sample_rate;
     int  channels;
     int  frame_size;
@@ -53,7 +54,7 @@ static av_cold int pulse_read_header(AVFormatContext *s)
 {
     PulseData *pd = s->priv_data;
     AVStream *st;
-    char *device = NULL;
+    const char *device = NULL;
     int ret;
     enum AVCodecID codec_id =
         s->audio_codec_id == AV_CODEC_ID_NONE ? DEFAULT_CODEC_ID : s->audio_codec_id;
@@ -72,8 +73,12 @@ static av_cold int pulse_read_header(AVFormatContext *s)
 
     attr.fragsize = pd->fragment_size;
 
-    if (strcmp(s->filename, "default"))
+    if (pd->device)
+        device = pd->device;
+    else
         device = s->filename;
+    if (device && !strcmp(device, "default"))
+        device = NULL; /* Set default device */
 
     pd->s = pa_simple_new(pd->server, pd->name,
                           PA_STREAM_RECORD,
@@ -147,6 +152,7 @@ static const AVOption options[] = {
     { "server",        "pulse server name",                              OFFSET(server),        AV_OPT_TYPE_STRING, {.str = NULL},     0, 0, D },
     { "name",          "application name",                               OFFSET(name),          AV_OPT_TYPE_STRING, {.str = LIBAVFORMAT_IDENT},  0, 0, D },
     { "stream_name",   "stream description",                             OFFSET(stream_name),   AV_OPT_TYPE_STRING, {.str = "record"}, 0, 0, D },
+    { "audio_device",  "set device name",                                OFFSET(device),        AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, D },
     { "sample_rate",   "sample rate in Hz",                              OFFSET(sample_rate),   AV_OPT_TYPE_INT,    {.i64 = 48000},    1, INT_MAX, D },
     { "channels",      "number of audio channels",                       OFFSET(channels),      AV_OPT_TYPE_INT,    {.i64 = 2},        1, INT_MAX, D },
     { "frame_size",    "number of bytes per frame",                      OFFSET(frame_size),    AV_OPT_TYPE_INT,    {.i64 = 1024},     1, INT_MAX, D },
-- 
1.7.10.4



More information about the ffmpeg-devel mailing list