audio/coreaudio: replace custom logging with error_report
The CoreAudio backend uses its own logging infrastructure (AUD_log, AUD_vlog, dolog) and the AUDIO_CAP macro. This approach is inconsistent with the rest of QEMU and makes the output harder to filter and configure. Replace the custom logging with standard QEMU error reporting: - Use error_report() / error_printf() for errors - Use warn_report() for non-fatal warnings (buffer frame size adjustments) Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Mark Cave-Ayland <mark.caveayland@nutanix.com> Reviewed-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>
Marc-André Lureau committed
Jan 20, 2026 at 18:24 UTC
b701ae4c918c6c0057803b07732efb86cbdce817
1 file changed
+60
-64
audio/coreaudio.m
+60
-64
@@ -28,10 +28,9 @@
28
29
#include "qemu/main-loop.h"
30
#include "qemu/module.h"
31
+#include "qemu/error-report.h"
32
#include "qemu/audio.h"
33
#include "qom/object.h"
33
-
34
-#define AUDIO_CAP "coreaudio"
34
#include "audio_int.h"
35
36
#define TYPE_AUDIO_COREAUDIO "audio-coreaudio"
@@ -157,7 +156,7 @@ static OSStatus coreaudio_get_isrunning(AudioDeviceID id, UInt32 *result)
156
result);
157
}
158
160
-static void coreaudio_logstatus (OSStatus status)
159
+static void coreaudio_logstatus(OSStatus status)
160
{
161
const char *str = "BUG";
162
@@ -207,70 +206,64 @@ static void coreaudio_logstatus (OSStatus status)
206
break;
207
208
default:
210
- AUD_log (AUDIO_CAP, "Reason: status code %" PRId32 "\n", (int32_t)status);
209
+ error_printf(" Reason: status code %" PRId32, (int32_t)status);
210
return;
211
}
212
214
- AUD_log (AUDIO_CAP, "Reason: %s\n", str);
213
+ error_printf(" Reason: %s", str);
214
}
215
217
-static void G_GNUC_PRINTF (2, 3) coreaudio_logerr (
218
- OSStatus status,
219
- const char *fmt,
220
- ...
221
- )
216
+static void G_GNUC_PRINTF(2, 3) coreaudio_logerr(OSStatus status,
217
+ const char *fmt, ...)
218
{
219
va_list ap;
220
225
- va_start (ap, fmt);
226
- AUD_log (AUDIO_CAP, fmt, ap);
227
- va_end (ap);
228
-
229
- coreaudio_logstatus (status);
221
+ error_printf("coreaudio: ");
222
+ va_start(ap, fmt);
223
+ error_vprintf(fmt, ap);
224
+ va_end(ap);
225
+ coreaudio_logstatus(status);
226
+ error_printf("\n");
227
}
228
232
-static void G_GNUC_PRINTF (3, 4) coreaudio_logerr2 (
233
- OSStatus status,
234
- const char *typ,
235
- const char *fmt,
236
- ...
237
- )
229
+static void G_GNUC_PRINTF(3, 4) coreaudio_logerr2(OSStatus status,
230
+ const char *typ,
231
+ const char *fmt, ...)
232
{
233
va_list ap;
234
241
- AUD_log (AUDIO_CAP, "Could not initialize %s\n", typ);
242
-
243
- va_start (ap, fmt);
244
- AUD_vlog (AUDIO_CAP, fmt, ap);
245
- va_end (ap);
246
-
247
- coreaudio_logstatus (status);
235
+ error_printf("coreaudio: Could not initialize %s: ", typ);
236
+ va_start(ap, fmt);
237
+ error_vprintf(fmt, ap);
238
+ va_end(ap);
239
+ coreaudio_logstatus(status);
240
+ error_printf("\n");
241
}
242
243
#define coreaudio_playback_logerr(status, ...) \
244
coreaudio_logerr2(status, "playback", __VA_ARGS__)
245
253
-static int coreaudio_buf_lock (coreaudioVoiceOut *core, const char *fn_name)
246
+static int coreaudio_buf_lock(coreaudioVoiceOut *core, const char *fn_name)
247
{
248
int err;
249
257
- err = pthread_mutex_lock (&core->buf_mutex);
250
+ err = pthread_mutex_lock(&core->buf_mutex);
251
if (err) {
259
- dolog ("Could not lock voice for %s\nReason: %s\n",
260
- fn_name, strerror (err));
252
+ error_report("coreaudio: Could not lock voice for %s: %s",
253
+ fn_name, strerror(err));
254
return -1;
255
}
256
return 0;
257
}
258
266
-static int coreaudio_buf_unlock (coreaudioVoiceOut *core, const char *fn_name)
259
+static int coreaudio_buf_unlock(coreaudioVoiceOut *core, const char *fn_name)
260
{
261
int err;
262
270
- err = pthread_mutex_unlock (&core->buf_mutex);
263
+ err = pthread_mutex_unlock(&core->buf_mutex);
264
if (err) {
272
- dolog ("Could not unlock voice for %s\nReason: %s\n",
273
- fn_name, strerror (err));
265
+ error_report("coreaudio: Could not unlock voice for %s: %s",
266
+ fn_name, strerror(err));
267
return -1;
268
}
269
return 0;
@@ -378,12 +371,13 @@ static OSStatus init_out_device(coreaudioVoiceOut *core)
371
372
status = coreaudio_get_voice(&core->outputDeviceID);
373
if (status != kAudioHardwareNoError) {
381
- coreaudio_playback_logerr (status,
382
- "Could not get default output Device\n");
374
+ coreaudio_playback_logerr(status,
375
+ "Could not get default output device");
376
return status;
377
}
378
if (core->outputDeviceID == kAudioDeviceUnknown) {
386
- dolog ("Could not initialize playback - Unknown Audiodevice\n");
379
+ error_report("coreaudio: Could not initialize playback: "
380
+ "Unknown audio device");
381
return status;
382
}
383
@@ -394,17 +388,19 @@ static OSStatus init_out_device(coreaudioVoiceOut *core)
388
return 0;
389
}
390
if (status != kAudioHardwareNoError) {
397
- coreaudio_playback_logerr (status,
398
- "Could not get device buffer frame range\n");
391
+ coreaudio_playback_logerr(status,
392
+ "Could not get device buffer frame range");
393
return status;
394
}
395
396
if (frameRange.mMinimum > core->frameSizeSetting) {
397
core->audioDevicePropertyBufferFrameSize = (UInt32) frameRange.mMinimum;
404
- dolog ("warning: Upsizing Buffer Frames to %f\n", frameRange.mMinimum);
398
+ warn_report("coreaudio: Upsizing buffer frames to %f",
399
+ frameRange.mMinimum);
400
} else if (frameRange.mMaximum < core->frameSizeSetting) {
401
core->audioDevicePropertyBufferFrameSize = (UInt32) frameRange.mMaximum;
407
- dolog ("warning: Downsizing Buffer Frames to %f\n", frameRange.mMaximum);
402
+ warn_report("coreaudio: Downsizing buffer frames to %f",
403
+ frameRange.mMaximum);
404
} else {
405
core->audioDevicePropertyBufferFrameSize = core->frameSizeSetting;
406
}
@@ -416,9 +412,9 @@ static OSStatus init_out_device(coreaudioVoiceOut *core)
412
return 0;
413
}
414
if (status != kAudioHardwareNoError) {
419
- coreaudio_playback_logerr (status,
420
- "Could not set device buffer frame size %" PRIu32 "\n",
421
- (uint32_t)core->audioDevicePropertyBufferFrameSize);
415
+ coreaudio_playback_logerr(status,
416
+ "Could not set device buffer frame size %" PRIu32,
417
+ (uint32_t)core->audioDevicePropertyBufferFrameSize);
418
return status;
419
}
420
@@ -429,8 +425,8 @@ static OSStatus init_out_device(coreaudioVoiceOut *core)
425
return 0;
426
}
427
if (status != kAudioHardwareNoError) {
432
- coreaudio_playback_logerr (status,
433
- "Could not get device buffer frame size\n");
428
+ coreaudio_playback_logerr(status,
429
+ "Could not get device buffer frame size");
430
return status;
431
}
432
core->hw.samples = core->bufferCount * core->audioDevicePropertyBufferFrameSize;
@@ -442,9 +438,9 @@ static OSStatus init_out_device(coreaudioVoiceOut *core)
438
return 0;
439
}
440
if (status != kAudioHardwareNoError) {
445
- coreaudio_playback_logerr (status,
446
- "Could not set samplerate %lf\n",
447
- streamBasicDescription.mSampleRate);
441
+ coreaudio_playback_logerr(status,
442
+ "Could not set samplerate %lf",
443
+ streamBasicDescription.mSampleRate);
444
core->outputDeviceID = kAudioDeviceUnknown;
445
return status;
446
}
@@ -468,7 +464,7 @@ static OSStatus init_out_device(coreaudioVoiceOut *core)
464
return 0;
465
}
466
if (status != kAudioHardwareNoError || core->ioprocid == NULL) {
471
- coreaudio_playback_logerr (status, "Could not set IOProc\n");
467
+ coreaudio_playback_logerr(status, "Could not set IOProc");
468
core->outputDeviceID = kAudioDeviceUnknown;
469
return status;
470
}
@@ -486,13 +482,13 @@ static void fini_out_device(coreaudioVoiceOut *core)
482
if (status != kAudioHardwareBadObjectError) {
483
if (status != kAudioHardwareNoError) {
484
coreaudio_logerr(status,
489
- "Could not determine whether Device is playing\n");
485
+ "Could not determine whether device is playing");
486
}
487
488
if (isrunning) {
489
status = AudioDeviceStop(core->outputDeviceID, core->ioprocid);
490
if (status != kAudioHardwareBadDeviceError && status != kAudioHardwareNoError) {
495
- coreaudio_logerr(status, "Could not stop playback\n");
491
+ coreaudio_logerr(status, "Could not stop playback");
492
}
493
}
494
}
@@ -501,7 +497,7 @@ static void fini_out_device(coreaudioVoiceOut *core)
497
status = AudioDeviceDestroyIOProcID(core->outputDeviceID,
498
core->ioprocid);
499
if (status != kAudioHardwareBadDeviceError && status != kAudioHardwareNoError) {
504
- coreaudio_logerr(status, "Could not remove IOProc\n");
500
+ coreaudio_logerr(status, "Could not remove IOProc");
501
}
502
core->outputDeviceID = kAudioDeviceUnknown;
503
}
@@ -515,7 +511,7 @@ static void update_device_playback_state(coreaudioVoiceOut *core)
511
if (status != kAudioHardwareNoError) {
512
if (status != kAudioHardwareBadObjectError) {
513
coreaudio_logerr(status,
518
- "Could not determine whether Device is playing\n");
514
+ "Could not determine whether device is playing");
515
}
516
517
return;
@@ -526,7 +522,7 @@ static void update_device_playback_state(coreaudioVoiceOut *core)
522
if (!isrunning) {
523
status = AudioDeviceStart(core->outputDeviceID, core->ioprocid);
524
if (status != kAudioHardwareBadDeviceError && status != kAudioHardwareNoError) {
529
- coreaudio_logerr (status, "Could not resume playback\n");
525
+ coreaudio_logerr(status, "Could not resume playback");
526
}
527
}
528
} else {
@@ -535,7 +531,7 @@ static void update_device_playback_state(coreaudioVoiceOut *core)
531
status = AudioDeviceStop(core->outputDeviceID,
532
core->ioprocid);
533
if (status != kAudioHardwareBadDeviceError && status != kAudioHardwareNoError) {
538
- coreaudio_logerr(status, "Could not pause playback\n");
534
+ coreaudio_logerr(status, "Could not pause playback");
535
}
536
}
537
}
@@ -576,7 +572,7 @@ static int coreaudio_init_out(HWVoiceOut *hw, struct audsettings *as)
572
/* create mutex */
573
err = pthread_mutex_init(&core->buf_mutex, NULL);
574
if (err) {
579
- dolog("Could not create mutex\nReason: %s\n", strerror (err));
575
+ error_report("coreaudio: Could not create mutex: %s", strerror(err));
576
return -1;
577
}
578
@@ -594,8 +590,8 @@ static int coreaudio_init_out(HWVoiceOut *hw, struct audsettings *as)
590
&voice_addr, handle_voice_change,
591
core);
592
if (status != kAudioHardwareNoError) {
597
- coreaudio_playback_logerr (status,
598
- "Could not listen to voice property change\n");
593
+ coreaudio_playback_logerr(status,
594
+ "Could not listen to voice property change");
595
return -1;
596
}
597
@@ -606,7 +602,7 @@ static int coreaudio_init_out(HWVoiceOut *hw, struct audsettings *as)
602
core);
603
if (status != kAudioHardwareNoError) {
604
coreaudio_playback_logerr(status,
609
- "Could not remove voice property change listener\n");
605
+ "Could not remove voice property change listener");
606
}
607
608
return -1;
@@ -626,7 +622,7 @@ static void coreaudio_fini_out (HWVoiceOut *hw)
622
handle_voice_change,
623
core);
624
if (status != kAudioHardwareNoError) {
629
- coreaudio_logerr(status, "Could not remove voice property change listener\n");
625
+ coreaudio_logerr(status, "Could not remove voice property change listener");
626
}
627
628
fini_out_device(core);
@@ -634,7 +630,7 @@ static void coreaudio_fini_out (HWVoiceOut *hw)
630
/* destroy mutex */
631
err = pthread_mutex_destroy(&core->buf_mutex);
632
if (err) {
637
- dolog("Could not destroy mutex\nReason: %s\n", strerror (err));
633
+ error_report("coreaudio: Could not destroy mutex: %s", strerror(err));
634
}
635
}
636