diff options
Diffstat (limited to 'src/device_alsa.cpp')
-rw-r--r-- | src/device_alsa.cpp | 20 |
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; |