summaryrefslogtreecommitdiff
path: root/src/device_alsa.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/device_alsa.cpp')
-rw-r--r--src/device_alsa.cpp20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/device_alsa.cpp b/src/device_alsa.cpp
index b727825..5a8652f 100644
--- a/src/device_alsa.cpp
+++ b/src/device_alsa.cpp
@@ -11,7 +11,8 @@
namespace audiere {
static snd_pcm_t* openDevice(const std::string &name,
- unsigned int rate) {
+ unsigned int &rate,
+ unsigned int &bufsz) {
int status = 0;
snd_pcm_t* pcm_handle = 0;
@@ -148,6 +149,7 @@ namespace audiere {
return 0;
}
+ bufsz = period_size * channels * 2;
return pcm_handle;
}
@@ -160,15 +162,15 @@ namespace audiere {
if (default_device != devices[0])
devices[0] = default_device;
- int i, rate;
+ unsigned int i, rate, buffer_size;
snd_pcm_t* pcm_handle = 0;
for (i = 0; devices[i].length() > 0; i++) {
rate = 48000;
- pcm_handle = openDevice(devices[i], rate);
+ pcm_handle = openDevice(devices[i], rate, buffer_size);
if (!pcm_handle) {
rate = 44100;
- pcm_handle = openDevice(devices[i], rate);
+ pcm_handle = openDevice(devices[i], rate, buffer_size);
}
if (pcm_handle)
break;
@@ -178,14 +180,14 @@ namespace audiere {
return 0;
}
- return new ALSAAudioDevice(pcm_handle, devices[i], rate, 4096);
+ return new ALSAAudioDevice(pcm_handle, devices[i], rate, buffer_size);
}
ALSAAudioDevice::ALSAAudioDevice(snd_pcm_t* pcm_handle,
const std::string &name,
- int rate,
- int buffer_size)
+ unsigned int rate,
+ unsigned int buffer_size)
: MixerDevice(rate), m_pcm_name(name), m_rate(rate)
{
m_pcm_handle = pcm_handle;
@@ -214,11 +216,13 @@ namespace audiere {
// reopen a pcm
if (!m_pcm_handle) {
- m_pcm_handle = openDevice(m_pcm_name, m_rate);
+ m_pcm_handle = openDevice(m_pcm_name, m_rate, m_buffer_size);
if (!m_pcm_handle) {
usleep(100);
return;
}
+ delete [] m_buffer;
+ m_buffer = new char [m_buffer_size];
}
sample_buf = m_buffer;