13 snd_pcm_channel_params_t
params;
16 params.mode = SND_PCM_MODE_BLOCK;
17 params.start_mode = SND_PCM_START_DATA;
18 params.stop_mode = SND_PCM_STOP_ROLLOVER;
19 params.buf.block.frag_size = fragmentSize;
20 params.buf.block.frags_min = 1;
21 params.buf.block.frags_max = 1;
22 strcpy(
params.sw_mixer_subchn_name,
"QAudio Channel");
24 params.format.interleave = 1;
28 switch (
format.sampleFormat()) {
30 params.format.format = SND_PCM_SFMT_U8;
35#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
36 params.format.format = SND_PCM_SFMT_S16_LE;
38 params.format.format = SND_PCM_SFMT_S16_BE;
42#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
43 params.format.format = SND_PCM_SFMT_S32_LE;
45 params.format.format = SND_PCM_SFMT_S32_BE;
49#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
50 params.format.format = SND_PCM_SFMT_FLOAT_LE;
52 params.format.format = SND_PCM_SFMT_FLOAT_BE;
64 ? SND_PCM_OPEN_PLAYBACK
65 : SND_PCM_OPEN_CAPTURE;
69 const int errorCode = snd_pcm_open_name(&
handle,
id.constData(), pcmMode);
72 qWarning(
"Unable to open PCM device %s (0x%x)",
id.constData(), -errorCode);
79template <
typename T,
typename Func>
83 std::optional<T>
t = { T{} };
86 ? SND_PCM_CHANNEL_PLAYBACK
87 : SND_PCM_CHANNEL_CAPTURE;
92 qWarning(
"QAudioDevice: couldn't get channel info (0x%x)", -errorCode);
99template <
typename T,
typename Func>
108 return pcmChannelGetStruct<T>(
handle.get(),
mode, std::forward<Func>(
func));
114 return pcmChannelGetStruct<snd_pcm_channel_info_t>(
handle,
mode, snd_pcm_plugin_info);
120 return pcmChannelGetStruct<snd_pcm_channel_info_t>(
device,
mode, snd_pcm_plugin_info);
125 return pcmChannelGetStruct<snd_pcm_channel_setup_t>(
handle,
mode, snd_pcm_plugin_setup);
131 return pcmChannelGetStruct<snd_pcm_channel_setup_t>(
device,
mode, snd_pcm_plugin_setup);
136 return pcmChannelGetStruct<snd_pcm_channel_status_t>(
handle,
mode, snd_pcm_plugin_status);
142 return pcmChannelGetStruct<snd_pcm_channel_status_t>(
device,
mode, snd_pcm_plugin_status);
IOBluetoothDevice * device
Mode
Describes the mode of this device.
Combined button and popup list for selecting options.
std::optional< T > pcmChannelGetStruct(snd_pcm_t *handle, QAudioDevice::Mode mode, Func &&func)
std::optional< snd_pcm_channel_info_t > pcmChannelInfo(snd_pcm_t *handle, QAudioDevice::Mode mode)
std::optional< snd_pcm_channel_setup_t > pcmChannelSetup(snd_pcm_t *handle, QAudioDevice::Mode mode)
HandleUniquePtr openPcmDevice(const QByteArray &id, QAudioDevice::Mode mode)
std::unique_ptr< snd_pcm_t, HandleDeleter > HandleUniquePtr
std::optional< snd_pcm_channel_status_t > pcmChannelStatus(snd_pcm_t *handle, QAudioDevice::Mode mode)
snd_pcm_channel_params_t formatToChannelParams(const QAudioFormat &format, QAudioDevice::Mode mode, int fragmentSize)
GLuint64 GLenum void * handle
GLint GLsizei GLsizei GLenum format