18 spec.rate =
format.sampleRate();
19 spec.channels =
format.channelCount();
20 spec.format = PA_SAMPLE_INVALID;
24 spec.format = PA_SAMPLE_U8;
26 spec.format = isBigEndian ? PA_SAMPLE_S16BE : PA_SAMPLE_S16LE;
28 spec.format = isBigEndian ? PA_SAMPLE_S32BE : PA_SAMPLE_S32LE;
30 spec.format = isBigEndian ? PA_SAMPLE_FLOAT32BE : PA_SAMPLE_FLOAT32LE;
47 map.map[0] = PA_CHANNEL_POSITION_MONO;
50 map.map[
map.channels++] = PA_CHANNEL_POSITION_FRONT_LEFT;
52 map.map[
map.channels++] = PA_CHANNEL_POSITION_FRONT_RIGHT;
54 map.map[
map.channels++] = PA_CHANNEL_POSITION_FRONT_CENTER;
56 map.map[
map.channels++] = PA_CHANNEL_POSITION_LFE;
58 map.map[
map.channels++] = PA_CHANNEL_POSITION_REAR_LEFT;
60 map.map[
map.channels++] = PA_CHANNEL_POSITION_REAR_RIGHT;
62 map.map[
map.channels++] = PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER;
64 map.map[
map.channels++] = PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER;
66 map.map[
map.channels++] = PA_CHANNEL_POSITION_REAR_CENTER;
68 map.map[
map.channels++] = PA_CHANNEL_POSITION_LFE;
70 map.map[
map.channels++] = PA_CHANNEL_POSITION_SIDE_LEFT;
72 map.map[
map.channels++] = PA_CHANNEL_POSITION_SIDE_RIGHT;
74 map.map[
map.channels++] = PA_CHANNEL_POSITION_TOP_FRONT_LEFT;
76 map.map[
map.channels++] = PA_CHANNEL_POSITION_TOP_FRONT_RIGHT;
78 map.map[
map.channels++] = PA_CHANNEL_POSITION_TOP_FRONT_CENTER;
80 map.map[
map.channels++] = PA_CHANNEL_POSITION_TOP_CENTER;
82 map.map[
map.channels++] = PA_CHANNEL_POSITION_TOP_REAR_LEFT;
84 map.map[
map.channels++] = PA_CHANNEL_POSITION_TOP_REAR_RIGHT;
86 map.map[
map.channels++] = PA_CHANNEL_POSITION_AUX0;
88 map.map[
map.channels++] = PA_CHANNEL_POSITION_AUX1;
90 map.map[
map.channels++] = PA_CHANNEL_POSITION_TOP_REAR_CENTER;
92 map.map[
map.channels++] = PA_CHANNEL_POSITION_AUX2;
94 map.map[
map.channels++] = PA_CHANNEL_POSITION_AUX3;
96 map.map[
map.channels++] = PA_CHANNEL_POSITION_AUX4;
106 for (
int i = 0;
i <
map.channels; ++
i) {
107 switch (
map.map[
i]) {
108 case PA_CHANNEL_POSITION_MONO:
109 case PA_CHANNEL_POSITION_FRONT_CENTER:
112 case PA_CHANNEL_POSITION_FRONT_LEFT:
115 case PA_CHANNEL_POSITION_FRONT_RIGHT:
118 case PA_CHANNEL_POSITION_REAR_CENTER:
121 case PA_CHANNEL_POSITION_REAR_LEFT:
124 case PA_CHANNEL_POSITION_REAR_RIGHT:
127 case PA_CHANNEL_POSITION_LFE:
130 case PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER:
133 case PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER:
136 case PA_CHANNEL_POSITION_SIDE_LEFT:
139 case PA_CHANNEL_POSITION_SIDE_RIGHT:
143 case PA_CHANNEL_POSITION_TOP_CENTER:
146 case PA_CHANNEL_POSITION_TOP_FRONT_LEFT:
149 case PA_CHANNEL_POSITION_TOP_FRONT_RIGHT:
152 case PA_CHANNEL_POSITION_TOP_FRONT_CENTER:
155 case PA_CHANNEL_POSITION_TOP_REAR_LEFT:
158 case PA_CHANNEL_POSITION_TOP_REAR_RIGHT:
161 case PA_CHANNEL_POSITION_TOP_REAR_CENTER:
176 format.setChannelCount(spec.channels);
178 switch (spec.format) {
182 case PA_SAMPLE_S16LE:
183 case PA_SAMPLE_S16BE:
186 case PA_SAMPLE_FLOAT32LE:
187 case PA_SAMPLE_FLOAT32BE:
190 case PA_SAMPLE_S32LE:
191 case PA_SAMPLE_S32BE:
198 format.setSampleFormat(sampleFormat);
204 return pa_strerror(pa_context_errno(
context));
219 case PA_STREAM_UNCONNECTED:
return "Unconnected"_L1;
220 case PA_STREAM_CREATING:
return "Creating"_L1;
221 case PA_STREAM_READY:
return "Ready"_L1;
222 case PA_STREAM_FAILED:
return "Failed"_L1;
223 case PA_STREAM_TERMINATED:
return "Terminated"_L1;
224 default: Q_UNREACHABLE_RETURN(
"Unknown stream state"_L1);
233 case PA_SAMPLE_U8:
return "Unsigned 8 Bit PCM."_L1;
234 case PA_SAMPLE_ALAW:
return "8 Bit a-Law "_L1;
235 case PA_SAMPLE_ULAW:
return "8 Bit mu-Law"_L1;
236 case PA_SAMPLE_S16LE:
return "Signed 16 Bit PCM, little endian (PC)."_L1;
237 case PA_SAMPLE_S16BE:
return "Signed 16 Bit PCM, big endian."_L1;
238 case PA_SAMPLE_FLOAT32LE:
return "32 Bit IEEE floating point, little endian (PC), range -1.0 to 1.0"_L1;
239 case PA_SAMPLE_FLOAT32BE:
return "32 Bit IEEE floating point, big endian, range -1.0 to 1.0"_L1;
240 case PA_SAMPLE_S32LE:
return "Signed 32 Bit PCM, little endian (PC)."_L1;
241 case PA_SAMPLE_S32BE:
return "Signed 32 Bit PCM, big endian."_L1;
242 case PA_SAMPLE_S24LE:
return "Signed 24 Bit PCM packed, little endian (PC)."_L1;
243 case PA_SAMPLE_S24BE:
return "Signed 24 Bit PCM packed, big endian."_L1;
244 case PA_SAMPLE_S24_32LE:
return "Signed 24 Bit PCM in LSB of 32 Bit words, little endian (PC)."_L1;
245 case PA_SAMPLE_S24_32BE:
return "Signed 24 Bit PCM in LSB of 32 Bit words, big endian."_L1;
246 case PA_SAMPLE_MAX:
return "Upper limit of valid sample types."_L1;
247 case PA_SAMPLE_INVALID:
return "Invalid sample format"_L1;
248 default: Q_UNREACHABLE_RETURN(
"Unknown sample format"_L1);
257 case PA_CONTEXT_UNCONNECTED:
return "Unconnected"_L1;
258 case PA_CONTEXT_CONNECTING:
return "Connecting"_L1;
259 case PA_CONTEXT_AUTHORIZING:
return "Authorizing"_L1;
260 case PA_CONTEXT_SETTING_NAME:
return "Setting Name"_L1;
261 case PA_CONTEXT_READY:
return "Ready"_L1;
262 case PA_CONTEXT_FAILED:
return "Failed"_L1;
263 case PA_CONTEXT_TERMINATED:
return "Terminated"_L1;
264 default: Q_UNREACHABLE_RETURN(
"Unknown context state"_L1);
QMap< QString, QString > map
[6]
QUtf8StringView currentError(const pa_context *context)
pa_channel_map channelMapForAudioFormat(const QAudioFormat &format)
QAudioFormat::ChannelConfig channelConfigFromMap(const pa_channel_map &map)
QAudioFormat sampleSpecToAudioFormat(const pa_sample_spec &spec)
pa_sample_spec audioFormatToSampleSpec(const QAudioFormat &format)
Combined button and popup list for selecting options.
Q_DECL_CONST_FUNCTION QT_POPCOUNT_CONSTEXPR uint qPopulationCount(quint32 v) noexcept
#define Q_LOGGING_CATEGORY(name,...)
GLint GLsizei GLsizei GLenum format
GLenum GLenum GLenum input
static QLatin1StringView stateToQStringView(pa_stream_state_t state)
static QLatin1StringView sampleFormatToQStringView(pa_sample_format format)
QDebug operator<<(QDebug dbg, pa_stream_state_t state)