bool CCoreAudioDevice::SetMixingSupport(UInt32 mix) { if (!m_DeviceId) return false; if (!GetMixingSupport()) return false; int restore = -1; if (m_MixerRestore == -1) { // This is our first change to this setting. Store the original setting for restore restore = (GetMixingSupport() ? 1 : 0); } AudioObjectPropertyAddress propertyAddress; propertyAddress.mScope = kAudioDevicePropertyScopeOutput; propertyAddress.mElement = 0; propertyAddress.mSelector = kAudioDevicePropertySupportsMixing; UInt32 mixEnable = mix ? 1 : 0; OSStatus ret = AudioObjectSetPropertyData(m_DeviceId, &propertyAddress, 0, NULL, sizeof(mixEnable), &mixEnable); if (ret != noErr) { CLog::Log(LOGERROR, "CCoreAudioDevice::SetMixingSupport: " "Unable to set MixingSupport to %s. Error = %s", mix ? "'On'" : "'Off'", GetError(ret).c_str()); return false; } if (m_MixerRestore == -1) m_MixerRestore = restore; return true; }
bool CCoreAudioDevice::SetMixingSupport(bool mix) { if (!m_DeviceId) return false; int restore = -1; if (m_MixerRestore == -1) // This is our first change to this setting. Store the original setting for restore restore = (GetMixingSupport() ? 1 : 0); UInt32 mixEnable = mix ? 1 : 0; CLog::Log(LOGDEBUG, "CCoreAudioDevice::SetMixingSupport: %sabling mixing for device 0x%04x",mix ? "En" : "Dis", m_DeviceId); OSStatus ret = AudioDeviceSetProperty(m_DeviceId, NULL, 0, false, kAudioDevicePropertySupportsMixing, sizeof(mixEnable), &mixEnable); if (ret) { CLog::Log(LOGERROR, "CCoreAudioDevice::SetMixingSupport: Unable to set MixingSupport to %s. Error = 0x%08x (%4.4s)", mix ? "'On'" : "'Off'", ret, CONVERT_OSSTATUS(ret)); return false; } if (m_MixerRestore == -1) m_MixerRestore = restore; return true; }