@samitouri / QOSamiQemu / commits / b701ae4c91

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