Loading media/libaudioclient/AudioSystem.cpp +26 −4 Original line number Diff line number Diff line Loading @@ -1839,8 +1839,7 @@ status_t AudioSystem::setAudioHalPids(const std::vector<pid_t>& pids) { status_t AudioSystem::getSurroundFormats(unsigned int* numSurroundFormats, audio_format_t* surroundFormats, bool* surroundFormatsEnabled, bool reported) { bool* surroundFormatsEnabled) { if (numSurroundFormats == nullptr || (*numSurroundFormats != 0 && (surroundFormats == nullptr || surroundFormatsEnabled == nullptr))) { Loading @@ -1855,8 +1854,8 @@ status_t AudioSystem::getSurroundFormats(unsigned int* numSurroundFormats, std::vector<media::audio::common::AudioFormat> surroundFormatsAidl; std::vector<bool> surroundFormatsEnabledAidl; RETURN_STATUS_IF_ERROR(statusTFromBinderStatus( aps->getSurroundFormats(reported, &numSurroundFormatsAidl, &surroundFormatsAidl, &surroundFormatsEnabledAidl))); aps->getSurroundFormats(&numSurroundFormatsAidl, &surroundFormatsAidl, &surroundFormatsEnabledAidl))); *numSurroundFormats = VALUE_OR_RETURN_STATUS( convertIntegral<unsigned int>(numSurroundFormatsAidl.value)); Loading @@ -1868,6 +1867,29 @@ status_t AudioSystem::getSurroundFormats(unsigned int* numSurroundFormats, return OK; } status_t AudioSystem::getReportedSurroundFormats(unsigned int* numSurroundFormats, audio_format_t* surroundFormats) { if (numSurroundFormats == nullptr || (*numSurroundFormats != 0 && surroundFormats == nullptr)) { return BAD_VALUE; } const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) return PERMISSION_DENIED; media::Int numSurroundFormatsAidl; numSurroundFormatsAidl.value = VALUE_OR_RETURN_STATUS(convertIntegral<int32_t>(*numSurroundFormats)); std::vector<media::audio::common::AudioFormat> surroundFormatsAidl; RETURN_STATUS_IF_ERROR(statusTFromBinderStatus( aps->getReportedSurroundFormats(&numSurroundFormatsAidl, &surroundFormatsAidl))); *numSurroundFormats = VALUE_OR_RETURN_STATUS( convertIntegral<unsigned int>(numSurroundFormatsAidl.value)); RETURN_STATUS_IF_ERROR( convertRange(surroundFormatsAidl.begin(), surroundFormatsAidl.end(), surroundFormats, aidl2legacy_AudioFormat_audio_format_t)); return OK; } status_t AudioSystem::setSurroundFormatEnabled(audio_format_t audioFormat, bool enabled) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) return PERMISSION_DENIED; Loading media/libaudioclient/aidl/android/media/IAudioPolicyService.aidl +12 −2 Original line number Diff line number Diff line Loading @@ -279,11 +279,21 @@ interface IAudioPolicyService { * Passing '0' on input and inspecting the value on output is a common way of determining the * number of elements without actually retrieving them. */ void getSurroundFormats(boolean reported, inout Int count, void getSurroundFormats(inout Int count, out AudioFormat[] formats, out boolean[] formatsEnabled); /** * Populates the surround formats reported by the HDMI devices in formats. * * On input, count represents the maximum length of the returned array. * On output, count is the total number of elements, which may be larger than the array size. * Passing '0' on input and inspecting the value on output is a common way of determining the * number of elements without actually retrieving them. */ void getReportedSurroundFormats(inout Int count, out AudioFormat[] formats); AudioFormat[] getHwOffloadEncodingFormatsSupportedForA2DP(); void setSurroundFormatEnabled(AudioFormat audioFormat, boolean enabled); Loading media/libaudioclient/include/media/AudioSystem.h +3 −2 Original line number Diff line number Diff line Loading @@ -417,8 +417,9 @@ public: // populated. The actual number of surround formats should be returned at numSurroundFormats. static status_t getSurroundFormats(unsigned int *numSurroundFormats, audio_format_t *surroundFormats, bool *surroundFormatsEnabled, bool reported); bool *surroundFormatsEnabled); static status_t getReportedSurroundFormats(unsigned int *numSurroundFormats, audio_format_t *surroundFormats); static status_t setSurroundFormatEnabled(audio_format_t audioFormat, bool enabled); static status_t setAssistantUid(uid_t uid); Loading services/audiopolicy/AudioPolicyInterface.h +5 −2 Original line number Diff line number Diff line Loading @@ -272,8 +272,11 @@ public: virtual status_t getSurroundFormats(unsigned int *numSurroundFormats, audio_format_t *surroundFormats, bool *surroundFormatsEnabled, bool reported) = 0; bool *surroundFormatsEnabled) = 0; virtual status_t getReportedSurroundFormats(unsigned int *numSurroundFormats, audio_format_t *surroundFormats) = 0; virtual status_t setSurroundFormatEnabled(audio_format_t audioFormat, bool enabled) = 0; virtual bool isHapticPlaybackSupported() = 0; Loading services/audiopolicy/managerdefault/AudioPolicyManager.cpp +63 −49 Original line number Diff line number Diff line Loading @@ -4524,20 +4524,53 @@ float AudioPolicyManager::getStreamVolumeDB( status_t AudioPolicyManager::getSurroundFormats(unsigned int *numSurroundFormats, audio_format_t *surroundFormats, bool *surroundFormatsEnabled, bool reported) bool *surroundFormatsEnabled) { if (numSurroundFormats == NULL || (*numSurroundFormats != 0 && (surroundFormats == NULL || surroundFormatsEnabled == NULL))) { if (numSurroundFormats == nullptr || (*numSurroundFormats != 0 && (surroundFormats == nullptr || surroundFormatsEnabled == nullptr))) { return BAD_VALUE; } ALOGV("%s() numSurroundFormats %d surroundFormats %p surroundFormatsEnabled %p reported %d", __func__, *numSurroundFormats, surroundFormats, surroundFormatsEnabled, reported); ALOGV("%s() numSurroundFormats %d surroundFormats %p surroundFormatsEnabled %p", __func__, *numSurroundFormats, surroundFormats, surroundFormatsEnabled); size_t formatsWritten = 0; size_t formatsMax = *numSurroundFormats; *numSurroundFormats = mConfig.getSurroundFormats().size(); audio_policy_forced_cfg_t forceUse = mEngine->getForceUse( AUDIO_POLICY_FORCE_FOR_ENCODED_SURROUND); for (const auto& format: mConfig.getSurroundFormats()) { if (formatsWritten < formatsMax) { surroundFormats[formatsWritten] = format.first; bool formatEnabled = true; switch (forceUse) { case AUDIO_POLICY_FORCE_ENCODED_SURROUND_MANUAL: formatEnabled = mManualSurroundFormats.count(format.first) != 0; break; case AUDIO_POLICY_FORCE_ENCODED_SURROUND_NEVER: formatEnabled = false; break; default: // AUTO or ALWAYS => true break; } surroundFormatsEnabled[formatsWritten++] = formatEnabled; } } return NO_ERROR; } status_t AudioPolicyManager::getReportedSurroundFormats(unsigned int *numSurroundFormats, audio_format_t *surroundFormats) { if (numSurroundFormats == nullptr || (*numSurroundFormats != 0 && surroundFormats == nullptr)) { return BAD_VALUE; } ALOGV("%s() numSurroundFormats %d surroundFormats %p", __func__, *numSurroundFormats, surroundFormats); size_t formatsWritten = 0; size_t formatsMax = *numSurroundFormats; std::unordered_set<audio_format_t> formats; // Uses primary surround formats only if (reported) { // Return formats from all device profiles that have already been resolved by // checkOutputsForDevice(). for (size_t i = 0; i < mAvailableOutputDevices.size(); i++) { Loading Loading @@ -4571,29 +4604,10 @@ status_t AudioPolicyManager::getSurroundFormats(unsigned int *numSurroundFormats } } } } else { for (const auto& pair : mConfig.getSurroundFormats()) { formats.insert(pair.first); } } *numSurroundFormats = formats.size(); audio_policy_forced_cfg_t forceUse = mEngine->getForceUse( AUDIO_POLICY_FORCE_FOR_ENCODED_SURROUND); for (const auto& format: formats) { if (formatsWritten < formatsMax) { surroundFormats[formatsWritten] = format; bool formatEnabled = true; switch (forceUse) { case AUDIO_POLICY_FORCE_ENCODED_SURROUND_MANUAL: formatEnabled = mManualSurroundFormats.count(format) != 0; break; case AUDIO_POLICY_FORCE_ENCODED_SURROUND_NEVER: formatEnabled = false; break; default: // AUTO or ALWAYS => true break; } surroundFormatsEnabled[formatsWritten++] = formatEnabled; surroundFormats[formatsWritten++] = format; } } return NO_ERROR; Loading Loading
media/libaudioclient/AudioSystem.cpp +26 −4 Original line number Diff line number Diff line Loading @@ -1839,8 +1839,7 @@ status_t AudioSystem::setAudioHalPids(const std::vector<pid_t>& pids) { status_t AudioSystem::getSurroundFormats(unsigned int* numSurroundFormats, audio_format_t* surroundFormats, bool* surroundFormatsEnabled, bool reported) { bool* surroundFormatsEnabled) { if (numSurroundFormats == nullptr || (*numSurroundFormats != 0 && (surroundFormats == nullptr || surroundFormatsEnabled == nullptr))) { Loading @@ -1855,8 +1854,8 @@ status_t AudioSystem::getSurroundFormats(unsigned int* numSurroundFormats, std::vector<media::audio::common::AudioFormat> surroundFormatsAidl; std::vector<bool> surroundFormatsEnabledAidl; RETURN_STATUS_IF_ERROR(statusTFromBinderStatus( aps->getSurroundFormats(reported, &numSurroundFormatsAidl, &surroundFormatsAidl, &surroundFormatsEnabledAidl))); aps->getSurroundFormats(&numSurroundFormatsAidl, &surroundFormatsAidl, &surroundFormatsEnabledAidl))); *numSurroundFormats = VALUE_OR_RETURN_STATUS( convertIntegral<unsigned int>(numSurroundFormatsAidl.value)); Loading @@ -1868,6 +1867,29 @@ status_t AudioSystem::getSurroundFormats(unsigned int* numSurroundFormats, return OK; } status_t AudioSystem::getReportedSurroundFormats(unsigned int* numSurroundFormats, audio_format_t* surroundFormats) { if (numSurroundFormats == nullptr || (*numSurroundFormats != 0 && surroundFormats == nullptr)) { return BAD_VALUE; } const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) return PERMISSION_DENIED; media::Int numSurroundFormatsAidl; numSurroundFormatsAidl.value = VALUE_OR_RETURN_STATUS(convertIntegral<int32_t>(*numSurroundFormats)); std::vector<media::audio::common::AudioFormat> surroundFormatsAidl; RETURN_STATUS_IF_ERROR(statusTFromBinderStatus( aps->getReportedSurroundFormats(&numSurroundFormatsAidl, &surroundFormatsAidl))); *numSurroundFormats = VALUE_OR_RETURN_STATUS( convertIntegral<unsigned int>(numSurroundFormatsAidl.value)); RETURN_STATUS_IF_ERROR( convertRange(surroundFormatsAidl.begin(), surroundFormatsAidl.end(), surroundFormats, aidl2legacy_AudioFormat_audio_format_t)); return OK; } status_t AudioSystem::setSurroundFormatEnabled(audio_format_t audioFormat, bool enabled) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) return PERMISSION_DENIED; Loading
media/libaudioclient/aidl/android/media/IAudioPolicyService.aidl +12 −2 Original line number Diff line number Diff line Loading @@ -279,11 +279,21 @@ interface IAudioPolicyService { * Passing '0' on input and inspecting the value on output is a common way of determining the * number of elements without actually retrieving them. */ void getSurroundFormats(boolean reported, inout Int count, void getSurroundFormats(inout Int count, out AudioFormat[] formats, out boolean[] formatsEnabled); /** * Populates the surround formats reported by the HDMI devices in formats. * * On input, count represents the maximum length of the returned array. * On output, count is the total number of elements, which may be larger than the array size. * Passing '0' on input and inspecting the value on output is a common way of determining the * number of elements without actually retrieving them. */ void getReportedSurroundFormats(inout Int count, out AudioFormat[] formats); AudioFormat[] getHwOffloadEncodingFormatsSupportedForA2DP(); void setSurroundFormatEnabled(AudioFormat audioFormat, boolean enabled); Loading
media/libaudioclient/include/media/AudioSystem.h +3 −2 Original line number Diff line number Diff line Loading @@ -417,8 +417,9 @@ public: // populated. The actual number of surround formats should be returned at numSurroundFormats. static status_t getSurroundFormats(unsigned int *numSurroundFormats, audio_format_t *surroundFormats, bool *surroundFormatsEnabled, bool reported); bool *surroundFormatsEnabled); static status_t getReportedSurroundFormats(unsigned int *numSurroundFormats, audio_format_t *surroundFormats); static status_t setSurroundFormatEnabled(audio_format_t audioFormat, bool enabled); static status_t setAssistantUid(uid_t uid); Loading
services/audiopolicy/AudioPolicyInterface.h +5 −2 Original line number Diff line number Diff line Loading @@ -272,8 +272,11 @@ public: virtual status_t getSurroundFormats(unsigned int *numSurroundFormats, audio_format_t *surroundFormats, bool *surroundFormatsEnabled, bool reported) = 0; bool *surroundFormatsEnabled) = 0; virtual status_t getReportedSurroundFormats(unsigned int *numSurroundFormats, audio_format_t *surroundFormats) = 0; virtual status_t setSurroundFormatEnabled(audio_format_t audioFormat, bool enabled) = 0; virtual bool isHapticPlaybackSupported() = 0; Loading
services/audiopolicy/managerdefault/AudioPolicyManager.cpp +63 −49 Original line number Diff line number Diff line Loading @@ -4524,20 +4524,53 @@ float AudioPolicyManager::getStreamVolumeDB( status_t AudioPolicyManager::getSurroundFormats(unsigned int *numSurroundFormats, audio_format_t *surroundFormats, bool *surroundFormatsEnabled, bool reported) bool *surroundFormatsEnabled) { if (numSurroundFormats == NULL || (*numSurroundFormats != 0 && (surroundFormats == NULL || surroundFormatsEnabled == NULL))) { if (numSurroundFormats == nullptr || (*numSurroundFormats != 0 && (surroundFormats == nullptr || surroundFormatsEnabled == nullptr))) { return BAD_VALUE; } ALOGV("%s() numSurroundFormats %d surroundFormats %p surroundFormatsEnabled %p reported %d", __func__, *numSurroundFormats, surroundFormats, surroundFormatsEnabled, reported); ALOGV("%s() numSurroundFormats %d surroundFormats %p surroundFormatsEnabled %p", __func__, *numSurroundFormats, surroundFormats, surroundFormatsEnabled); size_t formatsWritten = 0; size_t formatsMax = *numSurroundFormats; *numSurroundFormats = mConfig.getSurroundFormats().size(); audio_policy_forced_cfg_t forceUse = mEngine->getForceUse( AUDIO_POLICY_FORCE_FOR_ENCODED_SURROUND); for (const auto& format: mConfig.getSurroundFormats()) { if (formatsWritten < formatsMax) { surroundFormats[formatsWritten] = format.first; bool formatEnabled = true; switch (forceUse) { case AUDIO_POLICY_FORCE_ENCODED_SURROUND_MANUAL: formatEnabled = mManualSurroundFormats.count(format.first) != 0; break; case AUDIO_POLICY_FORCE_ENCODED_SURROUND_NEVER: formatEnabled = false; break; default: // AUTO or ALWAYS => true break; } surroundFormatsEnabled[formatsWritten++] = formatEnabled; } } return NO_ERROR; } status_t AudioPolicyManager::getReportedSurroundFormats(unsigned int *numSurroundFormats, audio_format_t *surroundFormats) { if (numSurroundFormats == nullptr || (*numSurroundFormats != 0 && surroundFormats == nullptr)) { return BAD_VALUE; } ALOGV("%s() numSurroundFormats %d surroundFormats %p", __func__, *numSurroundFormats, surroundFormats); size_t formatsWritten = 0; size_t formatsMax = *numSurroundFormats; std::unordered_set<audio_format_t> formats; // Uses primary surround formats only if (reported) { // Return formats from all device profiles that have already been resolved by // checkOutputsForDevice(). for (size_t i = 0; i < mAvailableOutputDevices.size(); i++) { Loading Loading @@ -4571,29 +4604,10 @@ status_t AudioPolicyManager::getSurroundFormats(unsigned int *numSurroundFormats } } } } else { for (const auto& pair : mConfig.getSurroundFormats()) { formats.insert(pair.first); } } *numSurroundFormats = formats.size(); audio_policy_forced_cfg_t forceUse = mEngine->getForceUse( AUDIO_POLICY_FORCE_FOR_ENCODED_SURROUND); for (const auto& format: formats) { if (formatsWritten < formatsMax) { surroundFormats[formatsWritten] = format; bool formatEnabled = true; switch (forceUse) { case AUDIO_POLICY_FORCE_ENCODED_SURROUND_MANUAL: formatEnabled = mManualSurroundFormats.count(format) != 0; break; case AUDIO_POLICY_FORCE_ENCODED_SURROUND_NEVER: formatEnabled = false; break; default: // AUTO or ALWAYS => true break; } surroundFormatsEnabled[formatsWritten++] = formatEnabled; surroundFormats[formatsWritten++] = format; } } return NO_ERROR; Loading