static OSStatus notification_callback( AudioObjectID id, UInt32 num_addresses, const AudioObjectPropertyAddress addresses[], void *data) { struct coreaudio_data *ca = data; coreaudio_stop(ca); coreaudio_uninit(ca); if (addresses[0].mSelector == PROPERTY_DEFAULT_DEVICE) ca->retry_time = 300; else ca->retry_time = 2000; blog(LOG_INFO, "coreaudio: device '%s' disconnected or changed. " "attempting to reconnect", ca->device_name); coreaudio_begin_reconnect(ca); UNUSED_PARAMETER(id); UNUSED_PARAMETER(num_addresses); return noErr; }
static int coreaudio_setformat (ddb_waveformat_t *fmt) { trace ("coreaudio_setformat\n"); memcpy (&plugin.fmt, fmt, sizeof (ddb_waveformat_t)); switch (state) { case OUTPUT_STATE_STOPPED: return coreaudio_stop (); case OUTPUT_STATE_PLAYING: return coreaudio_play (); case OUTPUT_STATE_PAUSED: if (0 != coreaudio_play ()) { return -1; } if (0 != coreaudio_pause ()) { return -1; } break; } return 0; }