17QnxAudioDeviceInfo::QnxAudioDeviceInfo(
const QByteArray &deviceName, QAudioDevice::Mode mode)
18 : QAudioDevicePrivate(deviceName, mode, QString::fromUtf8(deviceName))
20 isDefault = id.contains(
"Preferred");
22 preferredFormat.setChannelCount(mode == QAudioDevice::Input ? 1 : 2);
24 minimumChannelCount = 1;
25 maximumChannelCount = 2;
27 const std::optional<snd_pcm_channel_info_t> info = pcmChannelInfo(id, mode);
32 minimumSampleRate = info->min_rate;
33 maximumSampleRate = info->max_rate;
35 constexpr std::array sampleRates { 48000, 44100, 22050, 16000, 11025, 8000 };
37 for (
int rate : sampleRates) {
38 if (rate <= maximumSampleRate && rate >= minimumSampleRate) {
39 preferredFormat.setSampleRate(rate);
44 if (info->formats & SND_PCM_FMT_U8) {
45 supportedSampleFormats << QAudioFormat::UInt8;
46 preferredFormat.setSampleFormat(QAudioFormat::UInt8);
49 if (info->formats & SND_PCM_FMT_S16) {
50 supportedSampleFormats << QAudioFormat::Int16;
51 preferredFormat.setSampleFormat(QAudioFormat::Int16);
54 if (info->formats & SND_PCM_FMT_S32)
55 supportedSampleFormats << QAudioFormat::Int32;
57 if (info->formats & SND_PCM_FMT_FLOAT)
58 supportedSampleFormats << QAudioFormat::Float;
65bool QnxAudioDeviceInfo::isFormatSupported(
const QAudioFormat &format)
const
72 const std::optional<snd_pcm_channel_info_t> info = pcmChannelInfo(handle.get(), mode);
77 snd_pcm_channel_params_t params = formatToChannelParams(format, mode, info->max_fragment_size);
78 const int errorCode = snd_pcm_plugin_params(handle.get(), ¶ms);
80 return errorCode == 0;