]>
Commit | Line | Data |
---|---|---|
8c3a7d00 | 1 | # -*- mode: python -*- |
7e7237cd | 2 | # vim: filetype=python |
8c3a7d00 KZ |
3 | # |
4 | # Copyright (C) 2015-2019 Zoltán Kővágó <DirtY.iCE.hu@gmail.com> | |
5 | # | |
6 | # This work is licensed under the terms of the GNU GPL, version 2 or later. | |
7 | # See the COPYING file in the top-level directory. | |
8 | ||
a1d12a21 MA |
9 | ## |
10 | # = Audio | |
11 | ## | |
12 | ||
8c3a7d00 KZ |
13 | ## |
14 | # @AudiodevPerDirectionOptions: | |
15 | # | |
16 | # General audio backend options that are used for both playback and | |
17 | # recording. | |
18 | # | |
a937b6aa MA |
19 | # @mixing-engine: use QEMU's mixing engine to mix all streams inside |
20 | # QEMU and convert audio formats when not supported by the | |
21 | # backend. When set to off, fixed-settings must be also off | |
22 | # (default on, since 4.2) | |
8efac073 | 23 | # |
a937b6aa MA |
24 | # @fixed-settings: use fixed settings for host input/output. When |
25 | # off, frequency, channels and format must not be specified | |
26 | # (default true) | |
8c3a7d00 | 27 | # |
a937b6aa MA |
28 | # @frequency: frequency to use when using fixed settings (default |
29 | # 44100) | |
8c3a7d00 KZ |
30 | # |
31 | # @channels: number of channels when using fixed settings (default 2) | |
32 | # | |
33 | # @voices: number of voices to use (default 1) | |
34 | # | |
a937b6aa MA |
35 | # @format: sample format to use when using fixed settings (default |
36 | # s16) | |
8c3a7d00 KZ |
37 | # |
38 | # @buffer-length: the buffer length in microseconds | |
39 | # | |
40 | # Since: 4.0 | |
41 | ## | |
42 | { 'struct': 'AudiodevPerDirectionOptions', | |
43 | 'data': { | |
8efac073 | 44 | '*mixing-engine': 'bool', |
8c3a7d00 KZ |
45 | '*fixed-settings': 'bool', |
46 | '*frequency': 'uint32', | |
47 | '*channels': 'uint32', | |
48 | '*voices': 'uint32', | |
49 | '*format': 'AudioFormat', | |
50 | '*buffer-length': 'uint32' } } | |
51 | ||
52 | ## | |
53 | # @AudiodevGenericOptions: | |
54 | # | |
55 | # Generic driver-specific options. | |
56 | # | |
57 | # @in: options of the capture stream | |
58 | # | |
59 | # @out: options of the playback stream | |
60 | # | |
61 | # Since: 4.0 | |
62 | ## | |
63 | { 'struct': 'AudiodevGenericOptions', | |
64 | 'data': { | |
65 | '*in': 'AudiodevPerDirectionOptions', | |
66 | '*out': 'AudiodevPerDirectionOptions' } } | |
67 | ||
68 | ## | |
69 | # @AudiodevAlsaPerDirectionOptions: | |
70 | # | |
71 | # Options of the ALSA backend that are used for both playback and | |
72 | # recording. | |
73 | # | |
74 | # @dev: the name of the ALSA device to use (default 'default') | |
75 | # | |
76 | # @period-length: the period length in microseconds | |
77 | # | |
78 | # @try-poll: attempt to use poll mode, falling back to non-polling | |
a937b6aa | 79 | # access on failure (default true) |
8c3a7d00 KZ |
80 | # |
81 | # Since: 4.0 | |
82 | ## | |
83 | { 'struct': 'AudiodevAlsaPerDirectionOptions', | |
84 | 'base': 'AudiodevPerDirectionOptions', | |
85 | 'data': { | |
86 | '*dev': 'str', | |
87 | '*period-length': 'uint32', | |
88 | '*try-poll': 'bool' } } | |
89 | ||
90 | ## | |
91 | # @AudiodevAlsaOptions: | |
92 | # | |
93 | # Options of the ALSA audio backend. | |
94 | # | |
95 | # @in: options of the capture stream | |
96 | # | |
97 | # @out: options of the playback stream | |
98 | # | |
99 | # @threshold: set the threshold (in microseconds) when playback starts | |
100 | # | |
101 | # Since: 4.0 | |
102 | ## | |
103 | { 'struct': 'AudiodevAlsaOptions', | |
104 | 'data': { | |
105 | '*in': 'AudiodevAlsaPerDirectionOptions', | |
106 | '*out': 'AudiodevAlsaPerDirectionOptions', | |
107 | '*threshold': 'uint32' } } | |
108 | ||
663df1cc AR |
109 | ## |
110 | # @AudiodevSndioOptions: | |
111 | # | |
112 | # Options of the sndio audio backend. | |
113 | # | |
114 | # @in: options of the capture stream | |
115 | # | |
116 | # @out: options of the playback stream | |
117 | # | |
118 | # @dev: the name of the sndio device to use (default 'default') | |
119 | # | |
120 | # @latency: play buffer size (in microseconds) | |
121 | # | |
122 | # Since: 7.2 | |
123 | ## | |
124 | { 'struct': 'AudiodevSndioOptions', | |
125 | 'data': { | |
126 | '*in': 'AudiodevPerDirectionOptions', | |
127 | '*out': 'AudiodevPerDirectionOptions', | |
128 | '*dev': 'str', | |
129 | '*latency': 'uint32'} } | |
130 | ||
8c3a7d00 KZ |
131 | ## |
132 | # @AudiodevCoreaudioPerDirectionOptions: | |
133 | # | |
a937b6aa MA |
134 | # Options of the Core Audio backend that are used for both playback |
135 | # and recording. | |
8c3a7d00 KZ |
136 | # |
137 | # @buffer-count: number of buffers | |
138 | # | |
139 | # Since: 4.0 | |
140 | ## | |
141 | { 'struct': 'AudiodevCoreaudioPerDirectionOptions', | |
142 | 'base': 'AudiodevPerDirectionOptions', | |
143 | 'data': { | |
144 | '*buffer-count': 'uint32' } } | |
145 | ||
146 | ## | |
147 | # @AudiodevCoreaudioOptions: | |
148 | # | |
149 | # Options of the coreaudio audio backend. | |
150 | # | |
151 | # @in: options of the capture stream | |
152 | # | |
153 | # @out: options of the playback stream | |
154 | # | |
155 | # Since: 4.0 | |
156 | ## | |
157 | { 'struct': 'AudiodevCoreaudioOptions', | |
158 | 'data': { | |
159 | '*in': 'AudiodevCoreaudioPerDirectionOptions', | |
160 | '*out': 'AudiodevCoreaudioPerDirectionOptions' } } | |
161 | ||
162 | ## | |
163 | # @AudiodevDsoundOptions: | |
164 | # | |
165 | # Options of the DirectSound audio backend. | |
166 | # | |
167 | # @in: options of the capture stream | |
168 | # | |
169 | # @out: options of the playback stream | |
170 | # | |
a937b6aa MA |
171 | # @latency: add extra latency to playback in microseconds (default |
172 | # 10000) | |
8c3a7d00 KZ |
173 | # |
174 | # Since: 4.0 | |
175 | ## | |
176 | { 'struct': 'AudiodevDsoundOptions', | |
177 | 'data': { | |
178 | '*in': 'AudiodevPerDirectionOptions', | |
179 | '*out': 'AudiodevPerDirectionOptions', | |
180 | '*latency': 'uint32' } } | |
181 | ||
2e445703 GM |
182 | ## |
183 | # @AudiodevJackPerDirectionOptions: | |
184 | # | |
185 | # Options of the JACK backend that are used for both playback and | |
186 | # recording. | |
187 | # | |
a937b6aa MA |
188 | # @server-name: select from among several possible concurrent server |
189 | # instances (default: environment variable $JACK_DEFAULT_SERVER if | |
190 | # set, else "default") | |
2e445703 | 191 | # |
a937b6aa MA |
192 | # @client-name: the client name to use. The server will modify this |
193 | # name to create a unique variant, if needed unless @exact-name is | |
194 | # true (default: the guest's name) | |
2e445703 | 195 | # |
a937b6aa MA |
196 | # @connect-ports: if set, a regular expression of JACK client port |
197 | # name(s) to monitor for and automatically connect to | |
2e445703 | 198 | # |
a937b6aa MA |
199 | # @start-server: start a jack server process if one is not already |
200 | # present (default: false) | |
2e445703 | 201 | # |
a937b6aa MA |
202 | # @exact-name: use the exact name requested otherwise JACK |
203 | # automatically generates a unique one, if needed (default: false) | |
2e445703 GM |
204 | # |
205 | # Since: 5.1 | |
206 | ## | |
207 | { 'struct': 'AudiodevJackPerDirectionOptions', | |
208 | 'base': 'AudiodevPerDirectionOptions', | |
209 | 'data': { | |
210 | '*server-name': 'str', | |
211 | '*client-name': 'str', | |
212 | '*connect-ports': 'str', | |
213 | '*start-server': 'bool', | |
214 | '*exact-name': 'bool' } } | |
215 | ||
216 | ## | |
217 | # @AudiodevJackOptions: | |
218 | # | |
219 | # Options of the JACK audio backend. | |
220 | # | |
221 | # @in: options of the capture stream | |
222 | # | |
223 | # @out: options of the playback stream | |
224 | # | |
225 | # Since: 5.1 | |
226 | ## | |
227 | { 'struct': 'AudiodevJackOptions', | |
228 | 'data': { | |
229 | '*in': 'AudiodevJackPerDirectionOptions', | |
230 | '*out': 'AudiodevJackPerDirectionOptions' } } | |
231 | ||
8c3a7d00 KZ |
232 | ## |
233 | # @AudiodevOssPerDirectionOptions: | |
234 | # | |
235 | # Options of the OSS backend that are used for both playback and | |
236 | # recording. | |
237 | # | |
238 | # @dev: file name of the OSS device (default '/dev/dsp') | |
239 | # | |
240 | # @buffer-count: number of buffers | |
241 | # | |
242 | # @try-poll: attempt to use poll mode, falling back to non-polling | |
a937b6aa | 243 | # access on failure (default true) |
8c3a7d00 KZ |
244 | # |
245 | # Since: 4.0 | |
246 | ## | |
247 | { 'struct': 'AudiodevOssPerDirectionOptions', | |
248 | 'base': 'AudiodevPerDirectionOptions', | |
249 | 'data': { | |
250 | '*dev': 'str', | |
251 | '*buffer-count': 'uint32', | |
252 | '*try-poll': 'bool' } } | |
253 | ||
254 | ## | |
255 | # @AudiodevOssOptions: | |
256 | # | |
257 | # Options of the OSS audio backend. | |
258 | # | |
259 | # @in: options of the capture stream | |
260 | # | |
261 | # @out: options of the playback stream | |
262 | # | |
263 | # @try-mmap: try using memory-mapped access, falling back to | |
a937b6aa | 264 | # non-memory-mapped access on failure (default true) |
8c3a7d00 | 265 | # |
a937b6aa MA |
266 | # @exclusive: open device in exclusive mode (vmix won't work) (default |
267 | # false) | |
8c3a7d00 KZ |
268 | # |
269 | # @dsp-policy: set the timing policy of the device (between 0 and 10, | |
a937b6aa MA |
270 | # where smaller number means smaller latency but higher CPU usage) |
271 | # or -1 to use fragment mode (option ignored on some platforms) | |
272 | # (default 5) | |
8c3a7d00 KZ |
273 | # |
274 | # Since: 4.0 | |
275 | ## | |
276 | { 'struct': 'AudiodevOssOptions', | |
277 | 'data': { | |
278 | '*in': 'AudiodevOssPerDirectionOptions', | |
279 | '*out': 'AudiodevOssPerDirectionOptions', | |
280 | '*try-mmap': 'bool', | |
281 | '*exclusive': 'bool', | |
282 | '*dsp-policy': 'uint32' } } | |
283 | ||
284 | ## | |
285 | # @AudiodevPaPerDirectionOptions: | |
286 | # | |
a937b6aa MA |
287 | # Options of the Pulseaudio backend that are used for both playback |
288 | # and recording. | |
8c3a7d00 KZ |
289 | # |
290 | # @name: name of the sink/source to use | |
291 | # | |
f47dffe8 | 292 | # @stream-name: name of the PulseAudio stream created by qemu. Can be |
a937b6aa MA |
293 | # used to identify the stream in PulseAudio when you create |
294 | # multiple PulseAudio devices or run multiple qemu instances | |
295 | # (default: audiodev's id, since 4.2) | |
f47dffe8 | 296 | # |
f6142777 | 297 | # @latency: latency you want PulseAudio to achieve in microseconds |
a937b6aa | 298 | # (default 15000) |
f6142777 | 299 | # |
8c3a7d00 KZ |
300 | # Since: 4.0 |
301 | ## | |
302 | { 'struct': 'AudiodevPaPerDirectionOptions', | |
303 | 'base': 'AudiodevPerDirectionOptions', | |
304 | 'data': { | |
f6142777 | 305 | '*name': 'str', |
f47dffe8 | 306 | '*stream-name': 'str', |
f6142777 | 307 | '*latency': 'uint32' } } |
8c3a7d00 KZ |
308 | |
309 | ## | |
310 | # @AudiodevPaOptions: | |
311 | # | |
312 | # Options of the PulseAudio audio backend. | |
313 | # | |
314 | # @in: options of the capture stream | |
315 | # | |
316 | # @out: options of the playback stream | |
317 | # | |
318 | # @server: PulseAudio server address (default: let PulseAudio choose) | |
319 | # | |
320 | # Since: 4.0 | |
321 | ## | |
322 | { 'struct': 'AudiodevPaOptions', | |
323 | 'data': { | |
324 | '*in': 'AudiodevPaPerDirectionOptions', | |
325 | '*out': 'AudiodevPaPerDirectionOptions', | |
326 | '*server': 'str' } } | |
327 | ||
c2d3d1c2 DB |
328 | ## |
329 | # @AudiodevPipewirePerDirectionOptions: | |
330 | # | |
331 | # Options of the Pipewire backend that are used for both playback and | |
332 | # recording. | |
333 | # | |
334 | # @name: name of the sink/source to use | |
335 | # | |
336 | # @stream-name: name of the Pipewire stream created by qemu. Can be | |
a937b6aa MA |
337 | # used to identify the stream in Pipewire when you create multiple |
338 | # Pipewire devices or run multiple qemu instances (default: | |
339 | # audiodev's id) | |
c2d3d1c2 DB |
340 | # |
341 | # @latency: latency you want Pipewire to achieve in microseconds | |
a937b6aa | 342 | # (default 46000) |
c2d3d1c2 DB |
343 | # |
344 | # Since: 8.1 | |
345 | ## | |
346 | { 'struct': 'AudiodevPipewirePerDirectionOptions', | |
347 | 'base': 'AudiodevPerDirectionOptions', | |
348 | 'data': { | |
349 | '*name': 'str', | |
350 | '*stream-name': 'str', | |
351 | '*latency': 'uint32' } } | |
352 | ||
353 | ## | |
354 | # @AudiodevPipewireOptions: | |
355 | # | |
356 | # Options of the Pipewire audio backend. | |
357 | # | |
358 | # @in: options of the capture stream | |
359 | # | |
360 | # @out: options of the playback stream | |
361 | # | |
362 | # Since: 8.1 | |
363 | ## | |
364 | { 'struct': 'AudiodevPipewireOptions', | |
365 | 'data': { | |
366 | '*in': 'AudiodevPipewirePerDirectionOptions', | |
367 | '*out': 'AudiodevPipewirePerDirectionOptions' } } | |
368 | ||
5a0926c2 VR |
369 | ## |
370 | # @AudiodevSdlPerDirectionOptions: | |
371 | # | |
372 | # Options of the SDL audio backend that are used for both playback and | |
373 | # recording. | |
374 | # | |
375 | # @buffer-count: number of buffers (default 4) | |
376 | # | |
377 | # Since: 6.0 | |
378 | ## | |
379 | { 'struct': 'AudiodevSdlPerDirectionOptions', | |
380 | 'base': 'AudiodevPerDirectionOptions', | |
381 | 'data': { | |
382 | '*buffer-count': 'uint32' } } | |
383 | ||
384 | ## | |
385 | # @AudiodevSdlOptions: | |
386 | # | |
387 | # Options of the SDL audio backend. | |
388 | # | |
389 | # @in: options of the recording stream | |
390 | # | |
391 | # @out: options of the playback stream | |
392 | # | |
393 | # Since: 6.0 | |
394 | ## | |
395 | { 'struct': 'AudiodevSdlOptions', | |
396 | 'data': { | |
397 | '*in': 'AudiodevSdlPerDirectionOptions', | |
398 | '*out': 'AudiodevSdlPerDirectionOptions' } } | |
399 | ||
8c3a7d00 KZ |
400 | ## |
401 | # @AudiodevWavOptions: | |
402 | # | |
403 | # Options of the wav audio backend. | |
404 | # | |
405 | # @in: options of the capture stream | |
406 | # | |
407 | # @out: options of the playback stream | |
408 | # | |
409 | # @path: name of the wav file to record (default 'qemu.wav') | |
410 | # | |
411 | # Since: 4.0 | |
412 | ## | |
413 | { 'struct': 'AudiodevWavOptions', | |
414 | 'data': { | |
415 | '*in': 'AudiodevPerDirectionOptions', | |
416 | '*out': 'AudiodevPerDirectionOptions', | |
417 | '*path': 'str' } } | |
418 | ||
8c3a7d00 KZ |
419 | ## |
420 | # @AudioFormat: | |
421 | # | |
422 | # An enumeration of possible audio formats. | |
423 | # | |
019b5ba7 VR |
424 | # @u8: unsigned 8 bit integer |
425 | # | |
426 | # @s8: signed 8 bit integer | |
427 | # | |
428 | # @u16: unsigned 16 bit integer | |
429 | # | |
430 | # @s16: signed 16 bit integer | |
431 | # | |
432 | # @u32: unsigned 32 bit integer | |
433 | # | |
434 | # @s32: signed 32 bit integer | |
435 | # | |
436 | # @f32: single precision floating-point (since 5.0) | |
437 | # | |
8c3a7d00 KZ |
438 | # Since: 4.0 |
439 | ## | |
440 | { 'enum': 'AudioFormat', | |
ed2a4a79 | 441 | 'data': [ 'u8', 's8', 'u16', 's16', 'u32', 's32', 'f32' ] } |
8c3a7d00 KZ |
442 | |
443 | ## | |
444 | # @AudiodevDriver: | |
445 | # | |
446 | # An enumeration of possible audio backend drivers. | |
447 | # | |
2e445703 GM |
448 | # @jack: JACK audio backend (since 5.1) |
449 | # | |
8c3a7d00 KZ |
450 | # Since: 4.0 |
451 | ## | |
452 | { 'enum': 'AudiodevDriver', | |
7a92a857 DB |
453 | 'data': [ 'none', |
454 | { 'name': 'alsa', 'if': 'CONFIG_AUDIO_ALSA' }, | |
455 | { 'name': 'coreaudio', 'if': 'CONFIG_AUDIO_COREAUDIO' }, | |
456 | { 'name': 'dbus', 'if': 'CONFIG_DBUS_DISPLAY' }, | |
457 | { 'name': 'dsound', 'if': 'CONFIG_AUDIO_DSOUND' }, | |
458 | { 'name': 'jack', 'if': 'CONFIG_AUDIO_JACK' }, | |
459 | { 'name': 'oss', 'if': 'CONFIG_AUDIO_OSS' }, | |
460 | { 'name': 'pa', 'if': 'CONFIG_AUDIO_PA' }, | |
c2d3d1c2 | 461 | { 'name': 'pipewire', 'if': 'CONFIG_AUDIO_PIPEWIRE' }, |
7a92a857 DB |
462 | { 'name': 'sdl', 'if': 'CONFIG_AUDIO_SDL' }, |
463 | { 'name': 'sndio', 'if': 'CONFIG_AUDIO_SNDIO' }, | |
464 | { 'name': 'spice', 'if': 'CONFIG_SPICE' }, | |
465 | 'wav' ] } | |
8c3a7d00 KZ |
466 | |
467 | ## | |
468 | # @Audiodev: | |
469 | # | |
470 | # Options of an audio backend. | |
471 | # | |
472 | # @id: identifier of the backend | |
473 | # | |
474 | # @driver: the backend driver to use | |
475 | # | |
a937b6aa MA |
476 | # @timer-period: timer period (in microseconds, 0: use lowest |
477 | # possible) | |
8c3a7d00 KZ |
478 | # |
479 | # Since: 4.0 | |
480 | ## | |
481 | { 'union': 'Audiodev', | |
482 | 'base': { | |
483 | 'id': 'str', | |
484 | 'driver': 'AudiodevDriver', | |
485 | '*timer-period': 'uint32' }, | |
486 | 'discriminator': 'driver', | |
487 | 'data': { | |
488 | 'none': 'AudiodevGenericOptions', | |
7a92a857 DB |
489 | 'alsa': { 'type': 'AudiodevAlsaOptions', |
490 | 'if': 'CONFIG_AUDIO_ALSA' }, | |
491 | 'coreaudio': { 'type': 'AudiodevCoreaudioOptions', | |
492 | 'if': 'CONFIG_AUDIO_COREAUDIO' }, | |
493 | 'dbus': { 'type': 'AudiodevGenericOptions', | |
494 | 'if': 'CONFIG_DBUS_DISPLAY' }, | |
495 | 'dsound': { 'type': 'AudiodevDsoundOptions', | |
496 | 'if': 'CONFIG_AUDIO_DSOUND' }, | |
497 | 'jack': { 'type': 'AudiodevJackOptions', | |
498 | 'if': 'CONFIG_AUDIO_JACK' }, | |
499 | 'oss': { 'type': 'AudiodevOssOptions', | |
500 | 'if': 'CONFIG_AUDIO_OSS' }, | |
501 | 'pa': { 'type': 'AudiodevPaOptions', | |
502 | 'if': 'CONFIG_AUDIO_PA' }, | |
c2d3d1c2 DB |
503 | 'pipewire': { 'type': 'AudiodevPipewireOptions', |
504 | 'if': 'CONFIG_AUDIO_PIPEWIRE' }, | |
7a92a857 DB |
505 | 'sdl': { 'type': 'AudiodevSdlOptions', |
506 | 'if': 'CONFIG_AUDIO_SDL' }, | |
507 | 'sndio': { 'type': 'AudiodevSndioOptions', | |
508 | 'if': 'CONFIG_AUDIO_SNDIO' }, | |
509 | 'spice': { 'type': 'AudiodevGenericOptions', | |
510 | 'if': 'CONFIG_SPICE' }, | |
8c3a7d00 | 511 | 'wav': 'AudiodevWavOptions' } } |
637d1809 DB |
512 | |
513 | ## | |
514 | # @query-audiodevs: | |
515 | # | |
516 | # Returns information about audiodev configuration | |
517 | # | |
518 | # Returns: array of @Audiodev | |
519 | # | |
520 | # Since: 8.0 | |
637d1809 DB |
521 | ## |
522 | { 'command': 'query-audiodevs', | |
523 | 'returns': ['Audiodev'] } |