1 | /* AUTOMATICALLY GENERATED, DO NOT MODIFY */ |
2 | |
3 | /* |
4 | * Schema-defined QAPI visitors |
5 | * |
6 | * Copyright IBM, Corp. 2011 |
7 | * Copyright (C) 2014-2018 Red Hat, Inc. |
8 | * |
9 | * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. |
10 | * See the COPYING.LIB file in the top-level directory. |
11 | */ |
12 | |
13 | #include "qemu/osdep.h" |
14 | #include "qapi/error.h" |
15 | #include "qapi/qmp/qerror.h" |
16 | #include "qapi-visit-audio.h" |
17 | |
18 | void visit_type_AudiodevPerDirectionOptions_members(Visitor *v, AudiodevPerDirectionOptions *obj, Error **errp) |
19 | { |
20 | Error *err = NULL; |
21 | |
22 | if (visit_optional(v, "fixed-settings" , &obj->has_fixed_settings)) { |
23 | visit_type_bool(v, "fixed-settings" , &obj->fixed_settings, &err); |
24 | if (err) { |
25 | goto out; |
26 | } |
27 | } |
28 | if (visit_optional(v, "frequency" , &obj->has_frequency)) { |
29 | visit_type_uint32(v, "frequency" , &obj->frequency, &err); |
30 | if (err) { |
31 | goto out; |
32 | } |
33 | } |
34 | if (visit_optional(v, "channels" , &obj->has_channels)) { |
35 | visit_type_uint32(v, "channels" , &obj->channels, &err); |
36 | if (err) { |
37 | goto out; |
38 | } |
39 | } |
40 | if (visit_optional(v, "voices" , &obj->has_voices)) { |
41 | visit_type_uint32(v, "voices" , &obj->voices, &err); |
42 | if (err) { |
43 | goto out; |
44 | } |
45 | } |
46 | if (visit_optional(v, "format" , &obj->has_format)) { |
47 | visit_type_AudioFormat(v, "format" , &obj->format, &err); |
48 | if (err) { |
49 | goto out; |
50 | } |
51 | } |
52 | if (visit_optional(v, "buffer-length" , &obj->has_buffer_length)) { |
53 | visit_type_uint32(v, "buffer-length" , &obj->buffer_length, &err); |
54 | if (err) { |
55 | goto out; |
56 | } |
57 | } |
58 | |
59 | out: |
60 | error_propagate(errp, err); |
61 | } |
62 | |
63 | void visit_type_AudiodevPerDirectionOptions(Visitor *v, const char *name, AudiodevPerDirectionOptions **obj, Error **errp) |
64 | { |
65 | Error *err = NULL; |
66 | |
67 | visit_start_struct(v, name, (void **)obj, sizeof(AudiodevPerDirectionOptions), &err); |
68 | if (err) { |
69 | goto out; |
70 | } |
71 | if (!*obj) { |
72 | goto out_obj; |
73 | } |
74 | visit_type_AudiodevPerDirectionOptions_members(v, *obj, &err); |
75 | if (err) { |
76 | goto out_obj; |
77 | } |
78 | visit_check_struct(v, &err); |
79 | out_obj: |
80 | visit_end_struct(v, (void **)obj); |
81 | if (err && visit_is_input(v)) { |
82 | qapi_free_AudiodevPerDirectionOptions(*obj); |
83 | *obj = NULL; |
84 | } |
85 | out: |
86 | error_propagate(errp, err); |
87 | } |
88 | |
89 | void visit_type_AudiodevGenericOptions_members(Visitor *v, AudiodevGenericOptions *obj, Error **errp) |
90 | { |
91 | Error *err = NULL; |
92 | |
93 | if (visit_optional(v, "in" , &obj->has_in)) { |
94 | visit_type_AudiodevPerDirectionOptions(v, "in" , &obj->in, &err); |
95 | if (err) { |
96 | goto out; |
97 | } |
98 | } |
99 | if (visit_optional(v, "out" , &obj->has_out)) { |
100 | visit_type_AudiodevPerDirectionOptions(v, "out" , &obj->out, &err); |
101 | if (err) { |
102 | goto out; |
103 | } |
104 | } |
105 | |
106 | out: |
107 | error_propagate(errp, err); |
108 | } |
109 | |
110 | void visit_type_AudiodevGenericOptions(Visitor *v, const char *name, AudiodevGenericOptions **obj, Error **errp) |
111 | { |
112 | Error *err = NULL; |
113 | |
114 | visit_start_struct(v, name, (void **)obj, sizeof(AudiodevGenericOptions), &err); |
115 | if (err) { |
116 | goto out; |
117 | } |
118 | if (!*obj) { |
119 | goto out_obj; |
120 | } |
121 | visit_type_AudiodevGenericOptions_members(v, *obj, &err); |
122 | if (err) { |
123 | goto out_obj; |
124 | } |
125 | visit_check_struct(v, &err); |
126 | out_obj: |
127 | visit_end_struct(v, (void **)obj); |
128 | if (err && visit_is_input(v)) { |
129 | qapi_free_AudiodevGenericOptions(*obj); |
130 | *obj = NULL; |
131 | } |
132 | out: |
133 | error_propagate(errp, err); |
134 | } |
135 | |
136 | void visit_type_AudiodevAlsaPerDirectionOptions_members(Visitor *v, AudiodevAlsaPerDirectionOptions *obj, Error **errp) |
137 | { |
138 | Error *err = NULL; |
139 | |
140 | visit_type_AudiodevPerDirectionOptions_members(v, (AudiodevPerDirectionOptions *)obj, &err); |
141 | if (err) { |
142 | goto out; |
143 | } |
144 | if (visit_optional(v, "dev" , &obj->has_dev)) { |
145 | visit_type_str(v, "dev" , &obj->dev, &err); |
146 | if (err) { |
147 | goto out; |
148 | } |
149 | } |
150 | if (visit_optional(v, "period-length" , &obj->has_period_length)) { |
151 | visit_type_uint32(v, "period-length" , &obj->period_length, &err); |
152 | if (err) { |
153 | goto out; |
154 | } |
155 | } |
156 | if (visit_optional(v, "try-poll" , &obj->has_try_poll)) { |
157 | visit_type_bool(v, "try-poll" , &obj->try_poll, &err); |
158 | if (err) { |
159 | goto out; |
160 | } |
161 | } |
162 | |
163 | out: |
164 | error_propagate(errp, err); |
165 | } |
166 | |
167 | void visit_type_AudiodevAlsaPerDirectionOptions(Visitor *v, const char *name, AudiodevAlsaPerDirectionOptions **obj, Error **errp) |
168 | { |
169 | Error *err = NULL; |
170 | |
171 | visit_start_struct(v, name, (void **)obj, sizeof(AudiodevAlsaPerDirectionOptions), &err); |
172 | if (err) { |
173 | goto out; |
174 | } |
175 | if (!*obj) { |
176 | goto out_obj; |
177 | } |
178 | visit_type_AudiodevAlsaPerDirectionOptions_members(v, *obj, &err); |
179 | if (err) { |
180 | goto out_obj; |
181 | } |
182 | visit_check_struct(v, &err); |
183 | out_obj: |
184 | visit_end_struct(v, (void **)obj); |
185 | if (err && visit_is_input(v)) { |
186 | qapi_free_AudiodevAlsaPerDirectionOptions(*obj); |
187 | *obj = NULL; |
188 | } |
189 | out: |
190 | error_propagate(errp, err); |
191 | } |
192 | |
193 | void visit_type_AudiodevAlsaOptions_members(Visitor *v, AudiodevAlsaOptions *obj, Error **errp) |
194 | { |
195 | Error *err = NULL; |
196 | |
197 | if (visit_optional(v, "in" , &obj->has_in)) { |
198 | visit_type_AudiodevAlsaPerDirectionOptions(v, "in" , &obj->in, &err); |
199 | if (err) { |
200 | goto out; |
201 | } |
202 | } |
203 | if (visit_optional(v, "out" , &obj->has_out)) { |
204 | visit_type_AudiodevAlsaPerDirectionOptions(v, "out" , &obj->out, &err); |
205 | if (err) { |
206 | goto out; |
207 | } |
208 | } |
209 | if (visit_optional(v, "threshold" , &obj->has_threshold)) { |
210 | visit_type_uint32(v, "threshold" , &obj->threshold, &err); |
211 | if (err) { |
212 | goto out; |
213 | } |
214 | } |
215 | |
216 | out: |
217 | error_propagate(errp, err); |
218 | } |
219 | |
220 | void visit_type_AudiodevAlsaOptions(Visitor *v, const char *name, AudiodevAlsaOptions **obj, Error **errp) |
221 | { |
222 | Error *err = NULL; |
223 | |
224 | visit_start_struct(v, name, (void **)obj, sizeof(AudiodevAlsaOptions), &err); |
225 | if (err) { |
226 | goto out; |
227 | } |
228 | if (!*obj) { |
229 | goto out_obj; |
230 | } |
231 | visit_type_AudiodevAlsaOptions_members(v, *obj, &err); |
232 | if (err) { |
233 | goto out_obj; |
234 | } |
235 | visit_check_struct(v, &err); |
236 | out_obj: |
237 | visit_end_struct(v, (void **)obj); |
238 | if (err && visit_is_input(v)) { |
239 | qapi_free_AudiodevAlsaOptions(*obj); |
240 | *obj = NULL; |
241 | } |
242 | out: |
243 | error_propagate(errp, err); |
244 | } |
245 | |
246 | void visit_type_AudiodevCoreaudioPerDirectionOptions_members(Visitor *v, AudiodevCoreaudioPerDirectionOptions *obj, Error **errp) |
247 | { |
248 | Error *err = NULL; |
249 | |
250 | visit_type_AudiodevPerDirectionOptions_members(v, (AudiodevPerDirectionOptions *)obj, &err); |
251 | if (err) { |
252 | goto out; |
253 | } |
254 | if (visit_optional(v, "buffer-count" , &obj->has_buffer_count)) { |
255 | visit_type_uint32(v, "buffer-count" , &obj->buffer_count, &err); |
256 | if (err) { |
257 | goto out; |
258 | } |
259 | } |
260 | |
261 | out: |
262 | error_propagate(errp, err); |
263 | } |
264 | |
265 | void visit_type_AudiodevCoreaudioPerDirectionOptions(Visitor *v, const char *name, AudiodevCoreaudioPerDirectionOptions **obj, Error **errp) |
266 | { |
267 | Error *err = NULL; |
268 | |
269 | visit_start_struct(v, name, (void **)obj, sizeof(AudiodevCoreaudioPerDirectionOptions), &err); |
270 | if (err) { |
271 | goto out; |
272 | } |
273 | if (!*obj) { |
274 | goto out_obj; |
275 | } |
276 | visit_type_AudiodevCoreaudioPerDirectionOptions_members(v, *obj, &err); |
277 | if (err) { |
278 | goto out_obj; |
279 | } |
280 | visit_check_struct(v, &err); |
281 | out_obj: |
282 | visit_end_struct(v, (void **)obj); |
283 | if (err && visit_is_input(v)) { |
284 | qapi_free_AudiodevCoreaudioPerDirectionOptions(*obj); |
285 | *obj = NULL; |
286 | } |
287 | out: |
288 | error_propagate(errp, err); |
289 | } |
290 | |
291 | void visit_type_AudiodevCoreaudioOptions_members(Visitor *v, AudiodevCoreaudioOptions *obj, Error **errp) |
292 | { |
293 | Error *err = NULL; |
294 | |
295 | if (visit_optional(v, "in" , &obj->has_in)) { |
296 | visit_type_AudiodevCoreaudioPerDirectionOptions(v, "in" , &obj->in, &err); |
297 | if (err) { |
298 | goto out; |
299 | } |
300 | } |
301 | if (visit_optional(v, "out" , &obj->has_out)) { |
302 | visit_type_AudiodevCoreaudioPerDirectionOptions(v, "out" , &obj->out, &err); |
303 | if (err) { |
304 | goto out; |
305 | } |
306 | } |
307 | |
308 | out: |
309 | error_propagate(errp, err); |
310 | } |
311 | |
312 | void visit_type_AudiodevCoreaudioOptions(Visitor *v, const char *name, AudiodevCoreaudioOptions **obj, Error **errp) |
313 | { |
314 | Error *err = NULL; |
315 | |
316 | visit_start_struct(v, name, (void **)obj, sizeof(AudiodevCoreaudioOptions), &err); |
317 | if (err) { |
318 | goto out; |
319 | } |
320 | if (!*obj) { |
321 | goto out_obj; |
322 | } |
323 | visit_type_AudiodevCoreaudioOptions_members(v, *obj, &err); |
324 | if (err) { |
325 | goto out_obj; |
326 | } |
327 | visit_check_struct(v, &err); |
328 | out_obj: |
329 | visit_end_struct(v, (void **)obj); |
330 | if (err && visit_is_input(v)) { |
331 | qapi_free_AudiodevCoreaudioOptions(*obj); |
332 | *obj = NULL; |
333 | } |
334 | out: |
335 | error_propagate(errp, err); |
336 | } |
337 | |
338 | void visit_type_AudiodevDsoundOptions_members(Visitor *v, AudiodevDsoundOptions *obj, Error **errp) |
339 | { |
340 | Error *err = NULL; |
341 | |
342 | if (visit_optional(v, "in" , &obj->has_in)) { |
343 | visit_type_AudiodevPerDirectionOptions(v, "in" , &obj->in, &err); |
344 | if (err) { |
345 | goto out; |
346 | } |
347 | } |
348 | if (visit_optional(v, "out" , &obj->has_out)) { |
349 | visit_type_AudiodevPerDirectionOptions(v, "out" , &obj->out, &err); |
350 | if (err) { |
351 | goto out; |
352 | } |
353 | } |
354 | if (visit_optional(v, "latency" , &obj->has_latency)) { |
355 | visit_type_uint32(v, "latency" , &obj->latency, &err); |
356 | if (err) { |
357 | goto out; |
358 | } |
359 | } |
360 | |
361 | out: |
362 | error_propagate(errp, err); |
363 | } |
364 | |
365 | void visit_type_AudiodevDsoundOptions(Visitor *v, const char *name, AudiodevDsoundOptions **obj, Error **errp) |
366 | { |
367 | Error *err = NULL; |
368 | |
369 | visit_start_struct(v, name, (void **)obj, sizeof(AudiodevDsoundOptions), &err); |
370 | if (err) { |
371 | goto out; |
372 | } |
373 | if (!*obj) { |
374 | goto out_obj; |
375 | } |
376 | visit_type_AudiodevDsoundOptions_members(v, *obj, &err); |
377 | if (err) { |
378 | goto out_obj; |
379 | } |
380 | visit_check_struct(v, &err); |
381 | out_obj: |
382 | visit_end_struct(v, (void **)obj); |
383 | if (err && visit_is_input(v)) { |
384 | qapi_free_AudiodevDsoundOptions(*obj); |
385 | *obj = NULL; |
386 | } |
387 | out: |
388 | error_propagate(errp, err); |
389 | } |
390 | |
391 | void visit_type_AudiodevOssPerDirectionOptions_members(Visitor *v, AudiodevOssPerDirectionOptions *obj, Error **errp) |
392 | { |
393 | Error *err = NULL; |
394 | |
395 | visit_type_AudiodevPerDirectionOptions_members(v, (AudiodevPerDirectionOptions *)obj, &err); |
396 | if (err) { |
397 | goto out; |
398 | } |
399 | if (visit_optional(v, "dev" , &obj->has_dev)) { |
400 | visit_type_str(v, "dev" , &obj->dev, &err); |
401 | if (err) { |
402 | goto out; |
403 | } |
404 | } |
405 | if (visit_optional(v, "buffer-count" , &obj->has_buffer_count)) { |
406 | visit_type_uint32(v, "buffer-count" , &obj->buffer_count, &err); |
407 | if (err) { |
408 | goto out; |
409 | } |
410 | } |
411 | if (visit_optional(v, "try-poll" , &obj->has_try_poll)) { |
412 | visit_type_bool(v, "try-poll" , &obj->try_poll, &err); |
413 | if (err) { |
414 | goto out; |
415 | } |
416 | } |
417 | |
418 | out: |
419 | error_propagate(errp, err); |
420 | } |
421 | |
422 | void visit_type_AudiodevOssPerDirectionOptions(Visitor *v, const char *name, AudiodevOssPerDirectionOptions **obj, Error **errp) |
423 | { |
424 | Error *err = NULL; |
425 | |
426 | visit_start_struct(v, name, (void **)obj, sizeof(AudiodevOssPerDirectionOptions), &err); |
427 | if (err) { |
428 | goto out; |
429 | } |
430 | if (!*obj) { |
431 | goto out_obj; |
432 | } |
433 | visit_type_AudiodevOssPerDirectionOptions_members(v, *obj, &err); |
434 | if (err) { |
435 | goto out_obj; |
436 | } |
437 | visit_check_struct(v, &err); |
438 | out_obj: |
439 | visit_end_struct(v, (void **)obj); |
440 | if (err && visit_is_input(v)) { |
441 | qapi_free_AudiodevOssPerDirectionOptions(*obj); |
442 | *obj = NULL; |
443 | } |
444 | out: |
445 | error_propagate(errp, err); |
446 | } |
447 | |
448 | void visit_type_AudiodevOssOptions_members(Visitor *v, AudiodevOssOptions *obj, Error **errp) |
449 | { |
450 | Error *err = NULL; |
451 | |
452 | if (visit_optional(v, "in" , &obj->has_in)) { |
453 | visit_type_AudiodevOssPerDirectionOptions(v, "in" , &obj->in, &err); |
454 | if (err) { |
455 | goto out; |
456 | } |
457 | } |
458 | if (visit_optional(v, "out" , &obj->has_out)) { |
459 | visit_type_AudiodevOssPerDirectionOptions(v, "out" , &obj->out, &err); |
460 | if (err) { |
461 | goto out; |
462 | } |
463 | } |
464 | if (visit_optional(v, "try-mmap" , &obj->has_try_mmap)) { |
465 | visit_type_bool(v, "try-mmap" , &obj->try_mmap, &err); |
466 | if (err) { |
467 | goto out; |
468 | } |
469 | } |
470 | if (visit_optional(v, "exclusive" , &obj->has_exclusive)) { |
471 | visit_type_bool(v, "exclusive" , &obj->exclusive, &err); |
472 | if (err) { |
473 | goto out; |
474 | } |
475 | } |
476 | if (visit_optional(v, "dsp-policy" , &obj->has_dsp_policy)) { |
477 | visit_type_uint32(v, "dsp-policy" , &obj->dsp_policy, &err); |
478 | if (err) { |
479 | goto out; |
480 | } |
481 | } |
482 | |
483 | out: |
484 | error_propagate(errp, err); |
485 | } |
486 | |
487 | void visit_type_AudiodevOssOptions(Visitor *v, const char *name, AudiodevOssOptions **obj, Error **errp) |
488 | { |
489 | Error *err = NULL; |
490 | |
491 | visit_start_struct(v, name, (void **)obj, sizeof(AudiodevOssOptions), &err); |
492 | if (err) { |
493 | goto out; |
494 | } |
495 | if (!*obj) { |
496 | goto out_obj; |
497 | } |
498 | visit_type_AudiodevOssOptions_members(v, *obj, &err); |
499 | if (err) { |
500 | goto out_obj; |
501 | } |
502 | visit_check_struct(v, &err); |
503 | out_obj: |
504 | visit_end_struct(v, (void **)obj); |
505 | if (err && visit_is_input(v)) { |
506 | qapi_free_AudiodevOssOptions(*obj); |
507 | *obj = NULL; |
508 | } |
509 | out: |
510 | error_propagate(errp, err); |
511 | } |
512 | |
513 | void visit_type_AudiodevPaPerDirectionOptions_members(Visitor *v, AudiodevPaPerDirectionOptions *obj, Error **errp) |
514 | { |
515 | Error *err = NULL; |
516 | |
517 | visit_type_AudiodevPerDirectionOptions_members(v, (AudiodevPerDirectionOptions *)obj, &err); |
518 | if (err) { |
519 | goto out; |
520 | } |
521 | if (visit_optional(v, "name" , &obj->has_name)) { |
522 | visit_type_str(v, "name" , &obj->name, &err); |
523 | if (err) { |
524 | goto out; |
525 | } |
526 | } |
527 | if (visit_optional(v, "latency" , &obj->has_latency)) { |
528 | visit_type_uint32(v, "latency" , &obj->latency, &err); |
529 | if (err) { |
530 | goto out; |
531 | } |
532 | } |
533 | |
534 | out: |
535 | error_propagate(errp, err); |
536 | } |
537 | |
538 | void visit_type_AudiodevPaPerDirectionOptions(Visitor *v, const char *name, AudiodevPaPerDirectionOptions **obj, Error **errp) |
539 | { |
540 | Error *err = NULL; |
541 | |
542 | visit_start_struct(v, name, (void **)obj, sizeof(AudiodevPaPerDirectionOptions), &err); |
543 | if (err) { |
544 | goto out; |
545 | } |
546 | if (!*obj) { |
547 | goto out_obj; |
548 | } |
549 | visit_type_AudiodevPaPerDirectionOptions_members(v, *obj, &err); |
550 | if (err) { |
551 | goto out_obj; |
552 | } |
553 | visit_check_struct(v, &err); |
554 | out_obj: |
555 | visit_end_struct(v, (void **)obj); |
556 | if (err && visit_is_input(v)) { |
557 | qapi_free_AudiodevPaPerDirectionOptions(*obj); |
558 | *obj = NULL; |
559 | } |
560 | out: |
561 | error_propagate(errp, err); |
562 | } |
563 | |
564 | void visit_type_AudiodevPaOptions_members(Visitor *v, AudiodevPaOptions *obj, Error **errp) |
565 | { |
566 | Error *err = NULL; |
567 | |
568 | if (visit_optional(v, "in" , &obj->has_in)) { |
569 | visit_type_AudiodevPaPerDirectionOptions(v, "in" , &obj->in, &err); |
570 | if (err) { |
571 | goto out; |
572 | } |
573 | } |
574 | if (visit_optional(v, "out" , &obj->has_out)) { |
575 | visit_type_AudiodevPaPerDirectionOptions(v, "out" , &obj->out, &err); |
576 | if (err) { |
577 | goto out; |
578 | } |
579 | } |
580 | if (visit_optional(v, "server" , &obj->has_server)) { |
581 | visit_type_str(v, "server" , &obj->server, &err); |
582 | if (err) { |
583 | goto out; |
584 | } |
585 | } |
586 | |
587 | out: |
588 | error_propagate(errp, err); |
589 | } |
590 | |
591 | void visit_type_AudiodevPaOptions(Visitor *v, const char *name, AudiodevPaOptions **obj, Error **errp) |
592 | { |
593 | Error *err = NULL; |
594 | |
595 | visit_start_struct(v, name, (void **)obj, sizeof(AudiodevPaOptions), &err); |
596 | if (err) { |
597 | goto out; |
598 | } |
599 | if (!*obj) { |
600 | goto out_obj; |
601 | } |
602 | visit_type_AudiodevPaOptions_members(v, *obj, &err); |
603 | if (err) { |
604 | goto out_obj; |
605 | } |
606 | visit_check_struct(v, &err); |
607 | out_obj: |
608 | visit_end_struct(v, (void **)obj); |
609 | if (err && visit_is_input(v)) { |
610 | qapi_free_AudiodevPaOptions(*obj); |
611 | *obj = NULL; |
612 | } |
613 | out: |
614 | error_propagate(errp, err); |
615 | } |
616 | |
617 | void visit_type_AudiodevWavOptions_members(Visitor *v, AudiodevWavOptions *obj, Error **errp) |
618 | { |
619 | Error *err = NULL; |
620 | |
621 | if (visit_optional(v, "in" , &obj->has_in)) { |
622 | visit_type_AudiodevPerDirectionOptions(v, "in" , &obj->in, &err); |
623 | if (err) { |
624 | goto out; |
625 | } |
626 | } |
627 | if (visit_optional(v, "out" , &obj->has_out)) { |
628 | visit_type_AudiodevPerDirectionOptions(v, "out" , &obj->out, &err); |
629 | if (err) { |
630 | goto out; |
631 | } |
632 | } |
633 | if (visit_optional(v, "path" , &obj->has_path)) { |
634 | visit_type_str(v, "path" , &obj->path, &err); |
635 | if (err) { |
636 | goto out; |
637 | } |
638 | } |
639 | |
640 | out: |
641 | error_propagate(errp, err); |
642 | } |
643 | |
644 | void visit_type_AudiodevWavOptions(Visitor *v, const char *name, AudiodevWavOptions **obj, Error **errp) |
645 | { |
646 | Error *err = NULL; |
647 | |
648 | visit_start_struct(v, name, (void **)obj, sizeof(AudiodevWavOptions), &err); |
649 | if (err) { |
650 | goto out; |
651 | } |
652 | if (!*obj) { |
653 | goto out_obj; |
654 | } |
655 | visit_type_AudiodevWavOptions_members(v, *obj, &err); |
656 | if (err) { |
657 | goto out_obj; |
658 | } |
659 | visit_check_struct(v, &err); |
660 | out_obj: |
661 | visit_end_struct(v, (void **)obj); |
662 | if (err && visit_is_input(v)) { |
663 | qapi_free_AudiodevWavOptions(*obj); |
664 | *obj = NULL; |
665 | } |
666 | out: |
667 | error_propagate(errp, err); |
668 | } |
669 | |
670 | void visit_type_AudioFormat(Visitor *v, const char *name, AudioFormat *obj, Error **errp) |
671 | { |
672 | int value = *obj; |
673 | visit_type_enum(v, name, &value, &AudioFormat_lookup, errp); |
674 | *obj = value; |
675 | } |
676 | |
677 | void visit_type_AudiodevDriver(Visitor *v, const char *name, AudiodevDriver *obj, Error **errp) |
678 | { |
679 | int value = *obj; |
680 | visit_type_enum(v, name, &value, &AudiodevDriver_lookup, errp); |
681 | *obj = value; |
682 | } |
683 | |
684 | void visit_type_q_obj_Audiodev_base_members(Visitor *v, q_obj_Audiodev_base *obj, Error **errp) |
685 | { |
686 | Error *err = NULL; |
687 | |
688 | visit_type_str(v, "id" , &obj->id, &err); |
689 | if (err) { |
690 | goto out; |
691 | } |
692 | visit_type_AudiodevDriver(v, "driver" , &obj->driver, &err); |
693 | if (err) { |
694 | goto out; |
695 | } |
696 | if (visit_optional(v, "timer-period" , &obj->has_timer_period)) { |
697 | visit_type_uint32(v, "timer-period" , &obj->timer_period, &err); |
698 | if (err) { |
699 | goto out; |
700 | } |
701 | } |
702 | |
703 | out: |
704 | error_propagate(errp, err); |
705 | } |
706 | |
707 | void visit_type_Audiodev_members(Visitor *v, Audiodev *obj, Error **errp) |
708 | { |
709 | Error *err = NULL; |
710 | |
711 | visit_type_q_obj_Audiodev_base_members(v, (q_obj_Audiodev_base *)obj, &err); |
712 | if (err) { |
713 | goto out; |
714 | } |
715 | switch (obj->driver) { |
716 | case AUDIODEV_DRIVER_NONE: |
717 | visit_type_AudiodevGenericOptions_members(v, &obj->u.none, &err); |
718 | break; |
719 | case AUDIODEV_DRIVER_ALSA: |
720 | visit_type_AudiodevAlsaOptions_members(v, &obj->u.alsa, &err); |
721 | break; |
722 | case AUDIODEV_DRIVER_COREAUDIO: |
723 | visit_type_AudiodevCoreaudioOptions_members(v, &obj->u.coreaudio, &err); |
724 | break; |
725 | case AUDIODEV_DRIVER_DSOUND: |
726 | visit_type_AudiodevDsoundOptions_members(v, &obj->u.dsound, &err); |
727 | break; |
728 | case AUDIODEV_DRIVER_OSS: |
729 | visit_type_AudiodevOssOptions_members(v, &obj->u.oss, &err); |
730 | break; |
731 | case AUDIODEV_DRIVER_PA: |
732 | visit_type_AudiodevPaOptions_members(v, &obj->u.pa, &err); |
733 | break; |
734 | case AUDIODEV_DRIVER_SDL: |
735 | visit_type_AudiodevGenericOptions_members(v, &obj->u.sdl, &err); |
736 | break; |
737 | case AUDIODEV_DRIVER_SPICE: |
738 | visit_type_AudiodevGenericOptions_members(v, &obj->u.spice, &err); |
739 | break; |
740 | case AUDIODEV_DRIVER_WAV: |
741 | visit_type_AudiodevWavOptions_members(v, &obj->u.wav, &err); |
742 | break; |
743 | default: |
744 | abort(); |
745 | } |
746 | |
747 | out: |
748 | error_propagate(errp, err); |
749 | } |
750 | |
751 | void visit_type_Audiodev(Visitor *v, const char *name, Audiodev **obj, Error **errp) |
752 | { |
753 | Error *err = NULL; |
754 | |
755 | visit_start_struct(v, name, (void **)obj, sizeof(Audiodev), &err); |
756 | if (err) { |
757 | goto out; |
758 | } |
759 | if (!*obj) { |
760 | goto out_obj; |
761 | } |
762 | visit_type_Audiodev_members(v, *obj, &err); |
763 | if (err) { |
764 | goto out_obj; |
765 | } |
766 | visit_check_struct(v, &err); |
767 | out_obj: |
768 | visit_end_struct(v, (void **)obj); |
769 | if (err && visit_is_input(v)) { |
770 | qapi_free_Audiodev(*obj); |
771 | *obj = NULL; |
772 | } |
773 | out: |
774 | error_propagate(errp, err); |
775 | } |
776 | |
777 | /* Dummy declaration to prevent empty .o file */ |
778 | char qapi_dummy_qapi_visit_audio_c; |
779 | |