initial reworking for mod_portaudio multiple enpoint support

This commit is contained in:
Moises Silva 2011-03-17 21:46:52 -04:00
parent 8cb2bad004
commit df43e51ca5
3 changed files with 70 additions and 15 deletions

View File

@ -5,12 +5,14 @@
or the device number prefixed with # eg "#1" (or blank for default) --> or the device number prefixed with # eg "#1" (or blank for default) -->
<!-- device to use for input --> <!-- device to use for input -->
<param name="indev" value=""/> <param name="indev" value="Built-in Input"/>
<!-- device to use for output --> <!-- device to use for output -->
<param name="outdev" value=""/> <!--<param name="outdev" value="Built-in Output"/>-->
<param name="outdev" value="#2"/>
<!--device to use for inbound ring --> <!--device to use for inbound ring -->
<!--<param name="ringdev" value=""/>--> <param name="ringdev" value="Built-in Output"/>
<!--File to play as the ring sound --> <!--File to play as the ring sound -->
<!--<param name="ring-file" value="/sounds/ring.wav"/>--> <!--<param name="ring-file" value="/sounds/ring.wav"/>-->
<!--Number of seconds to pause between rings --> <!--Number of seconds to pause between rings -->
@ -29,7 +31,30 @@
<param name="cid-num" value="$${outbound_caller_id}"/> <param name="cid-num" value="$${outbound_caller_id}"/>
<!--audio sample rate and interval --> <!--audio sample rate and interval -->
<param name="sample-rate" value="48000"/> <!--<param name="sample-rate" value="48000"/>-->
<param name="sample-rate" value="8000"/>
<param name="codec-ms" value="20"/> <param name="codec-ms" value="20"/>
</settings> </settings>
<shared-devices>
<device friendly-name="usb1" device="#2">
<param name="channels" value="2" />
<param name="sample-rate" value="8000" />
<param name="codec-ms" value="20" />
</device>
</shared-devices>
<endpoints>
<endpoint name="usbout-left">
<param name="outdev" value="usb1:0" />
</endpoint>
<endpoint name="usbout-right">
<param name="outdev" value="usb1:1" />
</endpoint>
</endpoints>
</configuration> </configuration>

View File

@ -106,6 +106,34 @@ struct audio_stream {
}; };
typedef struct audio_stream audio_stream_t; typedef struct audio_stream audio_stream_t;
typedef struct _pa_shared_device {
/*! Sampling rate */
int sample_rate;
/*! */
int codec_ms;
/*! Device number */
int devno;
/*! Running stream (if a stream is already running for devno) */
audio_stream_t *stream;
/*! The actual portaudio device number */
/*! It's a shared device after all */
switch_mutex_t *mutex;
} pa_shared_device_t;
typedef struct _pa_endpoint {
/*! Input device for this endpoint */
pa_shared_device_t *indev;
/*! Output device for this endpoint */
pa_shared_device_t *outdev;
/*! Channel index within the input device stream */
int inchan;
/*! Channel index within the input device stream */
int outchan;
} pa_endpoint_t;
static struct { static struct {
int debug; int debug;
int port; int port;

View File

@ -56,17 +56,19 @@ extern "C" {
#include <string.h> #include <string.h>
typedef struct { #define MAX_IO_CHANNELS 2
PaUtilRingBuffer inFIFO; typedef struct {
PaUtilRingBuffer outFIFO; PaStream *istream;
PaStream *istream; PaStream *ostream;
PaStream *ostream; PaStream *iostream;
PaStream *iostream; int bytesPerFrame;
int bytesPerFrame; int do_dual;
int do_dual; int has_in;
int has_in; int has_out;
int has_out; PaUtilRingBuffer inFIFOs[2]
} PABLIO_Stream; PaUtilRingBuffer outFIFOs[2]
int channelCount;
} PABLIO_Stream;
/* Values for flags for OpenAudioStream(). */ /* Values for flags for OpenAudioStream(). */
#define PABLIO_READ (1<<0) #define PABLIO_READ (1<<0)