Differential D13992 Diff 38227 multimedia/qt5-multimedia/files/patch-src_plugins_alsa_qalsaaudiodeviceinfo.cpp
Changeset View
Changeset View
Standalone View
Standalone View
multimedia/qt5-multimedia/files/patch-src_plugins_alsa_qalsaaudiodeviceinfo.cpp
- This file was added.
Property | Old Value | New Value |
---|---|---|
fbsd:nokeywords | null | yes \ No newline at end of property |
svn:eol-style | null | native \ No newline at end of property |
svn:mime-type | null | text/plain \ No newline at end of property |
Patch from Stephen Hurd. PR208570. Allow ALSA aliases. | |||||
tcberner: ^ this belongs into the 'Submitted by' | |||||
- Use more verbose variable names | |||||
- Remove unneeded variables | |||||
- constify deviceName | |||||
- Add #ifdef Q_OS_FREEBSD | |||||
Done Inline Actions^ This does not really help to understand what the patch does :) Stephen's first message in the PR is probably a bit more descriptive: When using ALSA with FreeBSD, the direct snd_device instances are not available, only plugin devices and "default". For programs which use QAudio, this means there are *no* devices enumerated using QAudio::availableDevices(). The attached patch adds the aliases to the available device list. tcberner: ^ This does not really help to understand what the patch does :)
Stephen's first message in… | |||||
src/plugins/alsa/qalsaaudiodeviceinfo.cpp | 54 ++++++++++++++++++++++++++++++- | |||||
1 file changed, 53 insertions(+), 1 deletion(-) | |||||
--- b/src/plugins/alsa/qalsaaudiodeviceinfo.cpp | |||||
+++ b/src/plugins/alsa/qalsaaudiodeviceinfo.cpp | |||||
@@ -374,6 +374,58 @@ QList<QByteArray> QAlsaAudioDeviceInfo::availableDevices(QAudio::Mode mode) | |||||
++n; | |||||
} | |||||
snd_device_name_free_hint(hints); | |||||
+ | |||||
+#ifdef Q_OS_FREEBSD | |||||
+ // Now find aliases... | |||||
+ snd_config_iterator_t pos, next; | |||||
+ snd_config_t *top, *node, *type; | |||||
+ snd_pcm_t *pcm; | |||||
+ snd_pcm_stream_t streamType; | |||||
+ const char *idString; | |||||
+ const char **ignoreId; | |||||
+ static const char *ignore[] = {"hw", "plughw", "plug", "dsnoop", "tee", | |||||
+ "file", "null", "shm", "cards", "rate_convert", NULL}; | |||||
+ | |||||
+ // Populate snd_config... | |||||
+ if (snd_config == NULL) | |||||
+ snd_config_update(); | |||||
+ if (snd_config != NULL) { | |||||
+ switch (mode) { | |||||
+ case QAudio::AudioInput: | |||||
+ streamType = SND_PCM_STREAM_CAPTURE; | |||||
+ break; | |||||
+ case QAudio::AudioOutput: | |||||
+ streamType = SND_PCM_STREAM_PLAYBACK; | |||||
+ break; | |||||
+ default: | |||||
+ goto bad_mode; | |||||
+ } | |||||
+ // Find "pcm" nodes... | |||||
+ if (snd_config_search(snd_config, "pcm", &top) >= 0) { | |||||
+ for (pos = snd_config_iterator_first(top), next = snd_config_iterator_next(pos); | |||||
+ pos != snd_config_iterator_end(top); | |||||
+ pos = next, next = snd_config_iterator_next(pos)) { | |||||
+ node = snd_config_iterator_entry(pos); | |||||
+ if (snd_config_search(node, "type", &type) < 0) | |||||
+ continue; | |||||
+ snd_config_get_id(node, &idString); | |||||
+ for (ignoreId = ignore; *ignoreId; ignoreId++) { | |||||
+ if (strcmp(*ignoreId, idString) == 0) | |||||
+ break; | |||||
+ } | |||||
+ if (*ignoreId) | |||||
+ continue; | |||||
+ // Ensure it's available... | |||||
+ if (snd_pcm_open(&pcm, idString, streamType, 0)) | |||||
+ continue; | |||||
+ snd_pcm_close(pcm); | |||||
+ const QString deviceName = QLatin1String(idString); | |||||
+ devices.append(deviceName.toLocal8Bit().constData()); | |||||
+ } | |||||
+ } | |||||
+ } | |||||
+bad_mode: | |||||
+#endif | |||||
#else | |||||
int idx = 0; | |||||
char* name; |
^ this belongs into the 'Submitted by'