From 3202566a05ef57922379697c5192010415488d20 Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Wed, 25 Jun 2008 13:45:40 +0000 Subject: alsa plugin: mmap access support git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@431 90c681e8-e032-0410-971d-27865f9a5e38 --- src/plugins/Output/alsa/outputalsa.cpp | 28 +++- src/plugins/Output/alsa/outputalsa.h | 1 + src/plugins/Output/alsa/settingsdialog.cpp | 3 + src/plugins/Output/alsa/settingsdialog.ui | 159 +++++++++++++-------- .../Output/alsa/translations/alsa_plugin_cs.ts | 27 ++-- .../Output/alsa/translations/alsa_plugin_de.ts | 27 ++-- .../Output/alsa/translations/alsa_plugin_ru.ts | 28 ++-- .../Output/alsa/translations/alsa_plugin_uk_UA.ts | 28 ++-- .../Output/alsa/translations/alsa_plugin_zh_CN.ts | 27 ++-- .../Output/alsa/translations/alsa_plugin_zh_TW.ts | 27 ++-- 10 files changed, 226 insertions(+), 129 deletions(-) (limited to 'src/plugins/Output') diff --git a/src/plugins/Output/alsa/outputalsa.cpp b/src/plugins/Output/alsa/outputalsa.cpp index 0f3b62d7e..100d3a7b6 100644 --- a/src/plugins/Output/alsa/outputalsa.cpp +++ b/src/plugins/Output/alsa/outputalsa.cpp @@ -29,6 +29,10 @@ #include #include +#ifdef HAVE_ALLOCA_H +#include +#endif + #include #include #include @@ -41,6 +45,7 @@ OutputALSA::OutputALSA(QObject * parent, bool useVolume) { QSettings settings(QDir::homePath()+"/.qmmp/qmmprc", QSettings::IniFormat); QString dev_name = settings.value("ALSA/device","default").toString(); + m_use_mmap = settings.value("ALSA/use_mmap", FALSE).toBool(); pcm_name = strdup(dev_name.toAscii().data()); stream = SND_PCM_STREAM_PLAYBACK; snd_pcm_hw_params_alloca(&hwparams); @@ -120,12 +125,23 @@ void OutputALSA::configure(long freq, int chan, int prec, int brate) uint period_time = settings.value("period_time",100).toUInt()*1000; settings.endGroup(); - if (snd_pcm_hw_params_set_access(pcm_handle, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED) < 0) + if (m_use_mmap) { - qWarning("OutputALSA: Error setting access."); - return; + if (snd_pcm_hw_params_set_access(pcm_handle, hwparams, SND_PCM_ACCESS_MMAP_INTERLEAVED) < 0) + { + qWarning("OutputALSA: Error setting mmap access."); + m_use_mmap = FALSE; + } } + if (!m_use_mmap) + { + if (snd_pcm_hw_params_set_access(pcm_handle, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED) < 0) + { + qWarning("OutputALSA: Error setting access."); + return; + } + } if (snd_pcm_hw_params_set_format(pcm_handle, hwparams, SND_PCM_FORMAT_S16_LE) < 0) { @@ -137,6 +153,7 @@ void OutputALSA::configure(long freq, int chan, int prec, int brate) exact_rate = rate;// = 11000; qDebug("OutputALSA: frequency=%d, channels=%d, bitrate=%d", rate, chan, brate); + if (snd_pcm_hw_params_set_rate_near(pcm_handle, hwparams, &exact_rate, 0) < 0) { qWarning("OutputALSA: Error setting rate.\n"); @@ -285,7 +302,10 @@ void OutputALSA::run() l = snd_pcm_bytes_to_frames(pcm_handle, b->nbytes - n); while (l>0) { - m = snd_pcm_writei (pcm_handle, b->data+n, l); + if (m_use_mmap) + m = snd_pcm_mmap_writei (pcm_handle, b->data+n, l); + else + m = snd_pcm_writei (pcm_handle, b->data+n, l); if (m > 0) { diff --git a/src/plugins/Output/alsa/outputalsa.h b/src/plugins/Output/alsa/outputalsa.h index d22213012..cbf0cedca 100644 --- a/src/plugins/Output/alsa/outputalsa.h +++ b/src/plugins/Output/alsa/outputalsa.h @@ -76,6 +76,7 @@ private: snd_mixer_elem_t* getMixerElem(snd_mixer_t *mixer, char *name, int index); snd_mixer_t *mixer; snd_mixer_elem_t *pcm_element; + bool m_use_mmap; }; diff --git a/src/plugins/Output/alsa/settingsdialog.cpp b/src/plugins/Output/alsa/settingsdialog.cpp index 7c5ddf081..cbb129795 100644 --- a/src/plugins/Output/alsa/settingsdialog.cpp +++ b/src/plugins/Output/alsa/settingsdialog.cpp @@ -54,6 +54,8 @@ SettingsDialog::SettingsDialog ( QWidget *parent ) if (d >= 0) ui.mixerDeviceComboBox->setCurrentIndex(d); + ui.mmapCheckBox->setChecked(settings.value("use_mmap", FALSE).toBool()); + settings.endGroup(); } @@ -191,6 +193,7 @@ void SettingsDialog::writeSettings() settings.setValue("mixer_card", card); } settings.setValue("mixer_device", ui.mixerDeviceComboBox->currentText ()); + settings.setValue("use_mmap", ui.mmapCheckBox->isChecked()); settings.endGroup(); accept(); } diff --git a/src/plugins/Output/alsa/settingsdialog.ui b/src/plugins/Output/alsa/settingsdialog.ui index 2f9a20753..6eda3c05a 100644 --- a/src/plugins/Output/alsa/settingsdialog.ui +++ b/src/plugins/Output/alsa/settingsdialog.ui @@ -13,10 +13,22 @@ ALSA Plugin Settings - + 9 - + + 9 + + + 9 + + + 9 + + + 6 + + 6 @@ -29,12 +41,21 @@ Device Settings - - 9 - 6 + + 9 + + + 9 + + + 9 + + + 9 + @@ -58,10 +79,22 @@ Mixer - + + 9 + + + 9 + + + 9 + + 9 - + + 6 + + 6 @@ -100,36 +133,49 @@ Advanced Settings - - 9 - 6 + + 9 + + + 9 + + + 9 + + + 9 + Soundcard - - 9 - - - 6 - - - - - Qt::Vertical + + + + Buffer time (ms): - - - 20 - 111 - + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - + + + + + + 200 + + + 10000 + + + 500 + + @@ -144,61 +190,58 @@ + + + + Period time (ms): + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + - - 5000 - 20 - - 100 - - - - - - 10000 - - - 200 + 5000 - 500 + 100 - - - - Buffer time (ms): + + + + Qt::Horizontal - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 188 + 20 + - + - - + + - Period time (ms): - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + Use mmap access - + - Qt::Horizontal + Qt::Vertical - 188 - 20 + 60 + 81 diff --git a/src/plugins/Output/alsa/translations/alsa_plugin_cs.ts b/src/plugins/Output/alsa/translations/alsa_plugin_cs.ts index 4e41c7332..b672ca366 100644 --- a/src/plugins/Output/alsa/translations/alsa_plugin_cs.ts +++ b/src/plugins/Output/alsa/translations/alsa_plugin_cs.ts @@ -31,59 +31,64 @@ Nastavení pluginu ALSA - + Device Settings Nastavení zařízení - + Audio device Zvukové zařízení - + Mixer Mixér - + Mixer card: Zvuková karta: - + Mixer device: Ovládání hlasitosti: - + Advanced Settings Pokročilá nastavení - + Soundcard Zvuková karta - + Buffer time (ms): Velikost bufferu (ms): - + Period time (ms): Délka periody (ms): - + Cancel Zrušit - + OK OK + + + Use mmap access + + diff --git a/src/plugins/Output/alsa/translations/alsa_plugin_de.ts b/src/plugins/Output/alsa/translations/alsa_plugin_de.ts index 0f3e01d65..29f95cbea 100644 --- a/src/plugins/Output/alsa/translations/alsa_plugin_de.ts +++ b/src/plugins/Output/alsa/translations/alsa_plugin_de.ts @@ -31,59 +31,64 @@ ALSA Plugin Einstellungen - + Device Settings Geräte-Einstellungen - + Audio device Audiogerät - + Mixer Mixer - + Mixer card: Mixerkarte: - + Mixer device: Mixergerät: - + Advanced Settings Erweiterte Einstellungen - + Soundcard Soundkarte - + Buffer time (ms): Pufferzeit (ms): - + Period time (ms): Zeitraster (ms): - + Cancel Abbrechen - + OK OK + + + Use mmap access + + diff --git a/src/plugins/Output/alsa/translations/alsa_plugin_ru.ts b/src/plugins/Output/alsa/translations/alsa_plugin_ru.ts index eb6edabe6..b49715a8c 100644 --- a/src/plugins/Output/alsa/translations/alsa_plugin_ru.ts +++ b/src/plugins/Output/alsa/translations/alsa_plugin_ru.ts @@ -1,5 +1,6 @@ + OutputALSAFactory @@ -26,57 +27,57 @@ SettingsDialog - + Device Settings Параметры устройства - + Audio device Аудио устройство - + Mixer Микшер - + Mixer card: Карта микшера: - + Mixer device: Устройство микшера: - + Advanced Settings Дополнительные настройки - + Soundcard Звуковая карта - + Buffer time (ms): Время буферизации (мс): - + Period time (ms): Время периода (мс): - + Cancel Отмена - + OK OK @@ -85,5 +86,10 @@ ALSA Plugin Settings Настройки модуля ALSA + + + Use mmap access + Использовать доступ mmap + diff --git a/src/plugins/Output/alsa/translations/alsa_plugin_uk_UA.ts b/src/plugins/Output/alsa/translations/alsa_plugin_uk_UA.ts index 7ac8a24cc..3df00d7ba 100644 --- a/src/plugins/Output/alsa/translations/alsa_plugin_uk_UA.ts +++ b/src/plugins/Output/alsa/translations/alsa_plugin_uk_UA.ts @@ -1,6 +1,5 @@ - OutputALSAFactory @@ -27,57 +26,57 @@ SettingsDialog - + Device Settings Параметри пристроїв - + Audio device Аудіо пристрій - + Mixer Мікшер - + Mixer card: Карта мікшера: - + Mixer device: Пристрій мікшера: - + Advanced Settings Додаткові налаштування - + Soundcard Звукова карта - + Buffer time (ms): Час буферизації (мс): - + Period time (ms): Час періоду (мс): - + Cancel Відміна - + OK Застосувати @@ -86,5 +85,10 @@ ALSA Plugin Settings Налаштування модуля ALSA + + + Use mmap access + + diff --git a/src/plugins/Output/alsa/translations/alsa_plugin_zh_CN.ts b/src/plugins/Output/alsa/translations/alsa_plugin_zh_CN.ts index 969691b93..cd129243c 100644 --- a/src/plugins/Output/alsa/translations/alsa_plugin_zh_CN.ts +++ b/src/plugins/Output/alsa/translations/alsa_plugin_zh_CN.ts @@ -26,57 +26,57 @@ SettingsDialog - + Device Settings 设备设置 - + Audio device 音频设备 - + Mixer 混频 - + Mixer card: 混频卡: - + Mixer device: 混频设备: - + Advanced Settings 高级设置 - + Soundcard 声卡 - + Buffer time (ms): 缓冲时间(ms): - + Period time (ms): 周期时间(ms): - + Cancel 取消 - + OK 确定 @@ -85,5 +85,10 @@ ALSA Plugin Settings ALSA 插件设置 + + + Use mmap access + + diff --git a/src/plugins/Output/alsa/translations/alsa_plugin_zh_TW.ts b/src/plugins/Output/alsa/translations/alsa_plugin_zh_TW.ts index c04726a4d..bf0499845 100644 --- a/src/plugins/Output/alsa/translations/alsa_plugin_zh_TW.ts +++ b/src/plugins/Output/alsa/translations/alsa_plugin_zh_TW.ts @@ -26,57 +26,57 @@ SettingsDialog - + Device Settings 裝置設定 - + Audio device 聲訊裝置 - + Mixer 混頻 - + Mixer card: 混頻卡: - + Mixer device: 混頻裝置: - + Advanced Settings 進階設定 - + Soundcard 音效卡 - + Buffer time (ms): 緩衝時間(ms): - + Period time (ms): 周期時間(ms): - + Cancel 取消 - + OK 確定 @@ -85,5 +85,10 @@ ALSA Plugin Settings ALSA 插件設定 + + + Use mmap access + + -- cgit v1.2.3-13-gbd6f