From ad3183e2d4cecd02f6261270a7ea1c68be0efa0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Gaffie?= Date: Wed, 18 Mar 2015 16:55:35 +0100 Subject: Audio Policy Refactor: reorganise headers inclusion MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch reoganises the headers inclusion in order to prepare the split of managerdefault into a manager and a separated lib of pillar policy elements. It also moves back the isStrategyActive to the manager to avoid any dependancies from this pillars to the manager. Change-Id: I1a35c45d86db7a3878a40dc7d6858dfea37c5ac9 Signed-off-by: François Gaffie --- .../managerdefault/ApmImplDefinitions.h | 2 + .../managerdefault/AudioInputDescriptor.cpp | 6 ++- .../managerdefault/AudioInputDescriptor.h | 10 ++++ .../managerdefault/AudioOutputDescriptor.cpp | 20 +++---- .../managerdefault/AudioOutputDescriptor.h | 12 +++-- .../managerdefault/AudioPolicyManager.cpp | 61 +++++++++++++++------- .../managerdefault/AudioPolicyManager.h | 7 +-- .../managerdefault/ConfigParsingUtils.cpp | 3 +- .../managerdefault/ConfigParsingUtils.h | 5 ++ services/audiopolicy/managerdefault/Devices.cpp | 5 +- services/audiopolicy/managerdefault/Devices.h | 12 +++-- services/audiopolicy/managerdefault/Gains.cpp | 4 +- services/audiopolicy/managerdefault/Gains.h | 7 +++ services/audiopolicy/managerdefault/HwModule.cpp | 5 +- services/audiopolicy/managerdefault/HwModule.h | 12 +++++ services/audiopolicy/managerdefault/IOProfile.cpp | 4 +- services/audiopolicy/managerdefault/IOProfile.h | 7 +++ services/audiopolicy/managerdefault/Ports.cpp | 10 ++-- services/audiopolicy/managerdefault/Ports.h | 16 ++++++ .../audiopolicy/managerdefault/audio_policy_conf.h | 9 +--- 20 files changed, 159 insertions(+), 58 deletions(-) (limited to 'services') diff --git a/services/audiopolicy/managerdefault/ApmImplDefinitions.h b/services/audiopolicy/managerdefault/ApmImplDefinitions.h index 620979b..62927da 100644 --- a/services/audiopolicy/managerdefault/ApmImplDefinitions.h +++ b/services/audiopolicy/managerdefault/ApmImplDefinitions.h @@ -14,6 +14,8 @@ * limitations under the License. */ +#pragma once + namespace android { enum routing_strategy { diff --git a/services/audiopolicy/managerdefault/AudioInputDescriptor.cpp b/services/audiopolicy/managerdefault/AudioInputDescriptor.cpp index f4054c8..ce6b1e7 100644 --- a/services/audiopolicy/managerdefault/AudioInputDescriptor.cpp +++ b/services/audiopolicy/managerdefault/AudioInputDescriptor.cpp @@ -17,7 +17,11 @@ #define LOG_TAG "APM::AudioInputDescriptor" //#define LOG_NDEBUG 0 -#include "AudioPolicyManager.h" +#include "AudioInputDescriptor.h" +#include "IOProfile.h" +#include "Gains.h" +#include "HwModule.h" +#include namespace android { diff --git a/services/audiopolicy/managerdefault/AudioInputDescriptor.h b/services/audiopolicy/managerdefault/AudioInputDescriptor.h index 02579e6..ce96228 100644 --- a/services/audiopolicy/managerdefault/AudioInputDescriptor.h +++ b/services/audiopolicy/managerdefault/AudioInputDescriptor.h @@ -14,8 +14,18 @@ * limitations under the License. */ +#pragma once + +#include "Ports.h" +#include +#include +#include + namespace android { +class IOProfile; +class AudioMix; + // descriptor for audio inputs. Used to maintain current configuration of each opened audio input // and keep track of the usage of this input. class AudioInputDescriptor: public AudioPortConfig diff --git a/services/audiopolicy/managerdefault/AudioOutputDescriptor.cpp b/services/audiopolicy/managerdefault/AudioOutputDescriptor.cpp index 4b85972..4dd9316 100644 --- a/services/audiopolicy/managerdefault/AudioOutputDescriptor.cpp +++ b/services/audiopolicy/managerdefault/AudioOutputDescriptor.cpp @@ -17,7 +17,11 @@ #define LOG_TAG "APM::AudioOutputDescriptor" //#define LOG_NDEBUG 0 -#include "AudioPolicyManager.h" +#include "AudioOutputDescriptor.h" +#include "IOProfile.h" +#include "Gains.h" +#include "HwModule.h" +#include namespace android { @@ -108,23 +112,15 @@ audio_devices_t AudioOutputDescriptor::supportedDevices() bool AudioOutputDescriptor::isActive(uint32_t inPastMs) const { - return isStrategyActive(NUM_STRATEGIES, inPastMs); -} - -bool AudioOutputDescriptor::isStrategyActive(routing_strategy strategy, - uint32_t inPastMs, - nsecs_t sysTime) const -{ - if ((sysTime == 0) && (inPastMs != 0)) { + nsecs_t sysTime = 0; + if (inPastMs != 0) { sysTime = systemTime(); } for (int i = 0; i < (int)AUDIO_STREAM_CNT; i++) { if (i == AUDIO_STREAM_PATCH) { continue; } - if (((AudioPolicyManager::getStrategy((audio_stream_type_t)i) == strategy) || - (NUM_STRATEGIES == strategy)) && - isStreamActive((audio_stream_type_t)i, inPastMs, sysTime)) { + if (isStreamActive((audio_stream_type_t)i, inPastMs, sysTime)) { return true; } } diff --git a/services/audiopolicy/managerdefault/AudioOutputDescriptor.h b/services/audiopolicy/managerdefault/AudioOutputDescriptor.h index 32f46e4..f7a06ee 100644 --- a/services/audiopolicy/managerdefault/AudioOutputDescriptor.h +++ b/services/audiopolicy/managerdefault/AudioOutputDescriptor.h @@ -14,10 +14,19 @@ * limitations under the License. */ +#pragma once + +#include "Ports.h" #include "ApmImplDefinitions.h" +#include +#include +#include namespace android { +class IOProfile; +class AudioMix; + // descriptor for audio outputs. Used to maintain current configuration of each opened audio output // and keep track of the usage of this output by each audio stream type. class AudioOutputDescriptor: public AudioPortConfig @@ -38,9 +47,6 @@ public: bool isStreamActive(audio_stream_type_t stream, uint32_t inPastMs = 0, nsecs_t sysTime = 0) const; - bool isStrategyActive(routing_strategy strategy, - uint32_t inPastMs = 0, - nsecs_t sysTime = 0) const; virtual void toAudioPortConfig(struct audio_port_config *dstConfig, const struct audio_port_config *srcConfig = NULL) const; diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp index 53ec0f6..730d32f 100644 --- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp +++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp @@ -518,12 +518,12 @@ void AudioPolicyManager::setPhoneState(audio_mode_t state) // mute media and sonification strategies and delay device switch by the largest // latency of any output where either strategy is active. // This avoid sending the ring tone or music tail into the earpiece or headset. - if ((desc->isStrategyActive(STRATEGY_MEDIA, - SONIFICATION_HEADSET_MUSIC_DELAY, - sysTime) || - desc->isStrategyActive(STRATEGY_SONIFICATION, - SONIFICATION_HEADSET_MUSIC_DELAY, - sysTime)) && + if ((isStrategyActive(desc, STRATEGY_MEDIA, + SONIFICATION_HEADSET_MUSIC_DELAY, + sysTime) || + isStrategyActive(desc, STRATEGY_SONIFICATION, + SONIFICATION_HEADSET_MUSIC_DELAY, + sysTime)) && (delayMs < (int)desc->mLatency*2)) { delayMs = desc->mLatency*2; } @@ -3971,7 +3971,7 @@ void AudioPolicyManager::checkOutputForStrategy(routing_strategy strategy) // mute strategy while moving tracks from one output to another for (size_t i = 0; i < srcOutputs.size(); i++) { sp desc = mOutputs.valueFor(srcOutputs[i]); - if (desc->isStrategyActive(strategy)) { + if (isStrategyActive(desc, strategy)) { setStrategyMute(strategy, true, srcOutputs[i]); setStrategyMute(strategy, false, srcOutputs[i], MUTE_TIME_MS, newDevice); } @@ -4117,27 +4117,27 @@ audio_devices_t AudioPolicyManager::getNewOutputDevice(audio_io_handle_t output, // use device for strategy DTMF // 9: the strategy for beacon, a.k.a. "transmitted through speaker" is active on the output: // use device for strategy t-t-s - if (outputDesc->isStrategyActive(STRATEGY_ENFORCED_AUDIBLE) && + if (isStrategyActive(outputDesc, STRATEGY_ENFORCED_AUDIBLE) && mForceUse[AUDIO_POLICY_FORCE_FOR_SYSTEM] == AUDIO_POLICY_FORCE_SYSTEM_ENFORCED) { device = getDeviceForStrategy(STRATEGY_ENFORCED_AUDIBLE, fromCache); } else if (isInCall() || - outputDesc->isStrategyActive(STRATEGY_PHONE)) { + isStrategyActive(outputDesc, STRATEGY_PHONE)) { device = getDeviceForStrategy(STRATEGY_PHONE, fromCache); - } else if (outputDesc->isStrategyActive(STRATEGY_ENFORCED_AUDIBLE)) { + } else if (isStrategyActive(outputDesc, STRATEGY_ENFORCED_AUDIBLE)) { device = getDeviceForStrategy(STRATEGY_ENFORCED_AUDIBLE, fromCache); - } else if (outputDesc->isStrategyActive(STRATEGY_SONIFICATION)) { + } else if (isStrategyActive(outputDesc, STRATEGY_SONIFICATION)) { device = getDeviceForStrategy(STRATEGY_SONIFICATION, fromCache); - } else if (outputDesc->isStrategyActive(STRATEGY_SONIFICATION_RESPECTFUL)) { + } else if (isStrategyActive(outputDesc, STRATEGY_SONIFICATION_RESPECTFUL)) { device = getDeviceForStrategy(STRATEGY_SONIFICATION_RESPECTFUL, fromCache); - } else if (outputDesc->isStrategyActive(STRATEGY_ACCESSIBILITY)) { + } else if (isStrategyActive(outputDesc, STRATEGY_ACCESSIBILITY)) { device = getDeviceForStrategy(STRATEGY_ACCESSIBILITY, fromCache); - } else if (outputDesc->isStrategyActive(STRATEGY_MEDIA)) { + } else if (isStrategyActive(outputDesc, STRATEGY_MEDIA)) { device = getDeviceForStrategy(STRATEGY_MEDIA, fromCache); - } else if (outputDesc->isStrategyActive(STRATEGY_DTMF)) { + } else if (isStrategyActive(outputDesc, STRATEGY_DTMF)) { device = getDeviceForStrategy(STRATEGY_DTMF, fromCache); - } else if (outputDesc->isStrategyActive(STRATEGY_TRANSMITTED_THROUGH_SPEAKER)) { + } else if (isStrategyActive(outputDesc, STRATEGY_TRANSMITTED_THROUGH_SPEAKER)) { device = getDeviceForStrategy(STRATEGY_TRANSMITTED_THROUGH_SPEAKER, fromCache); - } else if (outputDesc->isStrategyActive(STRATEGY_REROUTING)) { + } else if (isStrategyActive(outputDesc, STRATEGY_REROUTING)) { device = getDeviceForStrategy(STRATEGY_REROUTING, fromCache); } @@ -4182,7 +4182,7 @@ audio_devices_t AudioPolicyManager::getDevicesForStream(audio_stream_type_t stre SortedVector outputs = getOutputsForDevice(devices, mOutputs); for (size_t i = 0; i < outputs.size(); i++) { sp outputDesc = mOutputs.valueFor(outputs[i]); - if (outputDesc->isStrategyActive(strategy)) { + if (isStrategyActive(outputDesc, strategy)) { devices = outputDesc->device(); break; } @@ -4698,7 +4698,7 @@ uint32_t AudioPolicyManager::checkDeviceMuteStrategies(sp ALOGVV("checkDeviceMuteStrategies() %s strategy %d (curDevice %04x) on output %d", mute ? "muting" : "unmuting", i, curDevice, curOutput); setStrategyMute((routing_strategy)i, mute, curOutput, mute ? 0 : delayMs); - if (desc->isStrategyActive((routing_strategy)i)) { + if (isStrategyActive(desc, (routing_strategy)i)) { if (mute) { // FIXME: should not need to double latency if volume could be applied // immediately by the audioflinger mixer. We must account for the delay @@ -4721,7 +4721,7 @@ uint32_t AudioPolicyManager::checkDeviceMuteStrategies(sp muteWaitMs = outputDesc->latency() * 2; } for (size_t i = 0; i < NUM_STRATEGIES; i++) { - if (outputDesc->isStrategyActive((routing_strategy)i)) { + if (isStrategyActive(outputDesc, (routing_strategy)i)) { setStrategyMute((routing_strategy)i, true, outputDesc->mIoHandle); // do tempMute unmute after twice the mute wait time setStrategyMute((routing_strategy)i, false, outputDesc->mIoHandle, @@ -5763,4 +5763,25 @@ bool AudioPolicyManager::isValidAttributes(const audio_attributes_t *paa) { return true; } + +bool AudioPolicyManager::isStrategyActive(const sp outputDesc, + routing_strategy strategy, uint32_t inPastMs, + nsecs_t sysTime) const +{ + if ((sysTime == 0) && (inPastMs != 0)) { + sysTime = systemTime(); + } + for (int i = 0; i < (int)AUDIO_STREAM_CNT; i++) { + if (i == AUDIO_STREAM_PATCH) { + continue; + } + if (((getStrategy((audio_stream_type_t)i) == strategy) || + (NUM_STRATEGIES == strategy)) && + outputDesc->isStreamActive((audio_stream_type_t)i, inPastMs, sysTime)) { + return true; + } + } + return false; +} + }; // namespace android diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.h b/services/audiopolicy/managerdefault/AudioPolicyManager.h index 61ea6f2..8308d54 100644 --- a/services/audiopolicy/managerdefault/AudioPolicyManager.h +++ b/services/audiopolicy/managerdefault/AudioPolicyManager.h @@ -14,6 +14,7 @@ * limitations under the License. */ +#pragma once #include #include @@ -61,9 +62,6 @@ namespace android { // Can be overridden by the audio.offload.min.duration.secs property #define OFFLOAD_DEFAULT_MIN_DURATION_SECS 60 -#define MAX_MIXER_SAMPLING_RATE 48000 -#define MAX_MIXER_CHANNEL_COUNT 8 - // ---------------------------------------------------------------------------- // AudioPolicyManager implements audio policy manager behavior common to all platforms. // ---------------------------------------------------------------------------- @@ -555,6 +553,9 @@ private: sp getDeviceDescriptor(const audio_devices_t device, const char *device_address, const char *device_name); + + bool isStrategyActive(const sp outputDesc, routing_strategy strategy, + uint32_t inPastMs = 0, nsecs_t sysTime = 0) const; }; }; diff --git a/services/audiopolicy/managerdefault/ConfigParsingUtils.cpp b/services/audiopolicy/managerdefault/ConfigParsingUtils.cpp index 1afd487..300f35a 100644 --- a/services/audiopolicy/managerdefault/ConfigParsingUtils.cpp +++ b/services/audiopolicy/managerdefault/ConfigParsingUtils.cpp @@ -17,7 +17,8 @@ #define LOG_TAG "APM::ConfigParsingUtils" //#define LOG_NDEBUG 0 -#include "AudioPolicyManager.h" +#include "ConfigParsingUtils.h" +#include namespace android { diff --git a/services/audiopolicy/managerdefault/ConfigParsingUtils.h b/services/audiopolicy/managerdefault/ConfigParsingUtils.h index b2d9763..45e96d9 100644 --- a/services/audiopolicy/managerdefault/ConfigParsingUtils.h +++ b/services/audiopolicy/managerdefault/ConfigParsingUtils.h @@ -14,6 +14,11 @@ * limitations under the License. */ +#pragma once + +#include +#include + namespace android { // ---------------------------------------------------------------------------- diff --git a/services/audiopolicy/managerdefault/Devices.cpp b/services/audiopolicy/managerdefault/Devices.cpp index 5b1401e..574cff5 100644 --- a/services/audiopolicy/managerdefault/Devices.cpp +++ b/services/audiopolicy/managerdefault/Devices.cpp @@ -17,7 +17,10 @@ #define LOG_TAG "APM::Devices" //#define LOG_NDEBUG 0 -#include "AudioPolicyManager.h" +#include "Devices.h" +#include "Gains.h" +#include "HwModule.h" +#include "ConfigParsingUtils.h" namespace android { diff --git a/services/audiopolicy/managerdefault/Devices.h b/services/audiopolicy/managerdefault/Devices.h index af2fbda..7ccf559 100644 --- a/services/audiopolicy/managerdefault/Devices.h +++ b/services/audiopolicy/managerdefault/Devices.h @@ -14,10 +14,16 @@ * limitations under the License. */ -namespace android { +#pragma once + +#include "Ports.h" +#include +#include +#include +#include +#include -class AudioPort; -class AudioPortConfig; +namespace android { class DeviceDescriptor: public AudioPort, public AudioPortConfig { diff --git a/services/audiopolicy/managerdefault/Gains.cpp b/services/audiopolicy/managerdefault/Gains.cpp index 4aca26d..98a8d1c 100644 --- a/services/audiopolicy/managerdefault/Gains.cpp +++ b/services/audiopolicy/managerdefault/Gains.cpp @@ -24,7 +24,9 @@ #define ALOGVV(a...) do { } while(0) #endif -#include "AudioPolicyManager.h" +#include "Gains.h" +#include +#include #include diff --git a/services/audiopolicy/managerdefault/Gains.h b/services/audiopolicy/managerdefault/Gains.h index b4ab129..f638c8e 100644 --- a/services/audiopolicy/managerdefault/Gains.h +++ b/services/audiopolicy/managerdefault/Gains.h @@ -14,6 +14,13 @@ * limitations under the License. */ +#pragma once + +#include +#include +#include +#include + namespace android { class VolumeCurvePoint diff --git a/services/audiopolicy/managerdefault/HwModule.cpp b/services/audiopolicy/managerdefault/HwModule.cpp index a04bdc8..39dc889 100644 --- a/services/audiopolicy/managerdefault/HwModule.cpp +++ b/services/audiopolicy/managerdefault/HwModule.cpp @@ -17,7 +17,10 @@ #define LOG_TAG "APM::HwModule" //#define LOG_NDEBUG 0 -#include "AudioPolicyManager.h" +#include "HwModule.h" +#include "IOProfile.h" +#include "Gains.h" +#include "ConfigParsingUtils.h" #include "audio_policy_conf.h" #include diff --git a/services/audiopolicy/managerdefault/HwModule.h b/services/audiopolicy/managerdefault/HwModule.h index f814dd9..d9e6cdf 100644 --- a/services/audiopolicy/managerdefault/HwModule.h +++ b/services/audiopolicy/managerdefault/HwModule.h @@ -14,8 +14,20 @@ * limitations under the License. */ +#pragma once + +#include "Devices.h" +#include +#include +#include +#include +#include +#include + namespace android { +class IOProfile; + class HwModule : public RefBase { public: diff --git a/services/audiopolicy/managerdefault/IOProfile.cpp b/services/audiopolicy/managerdefault/IOProfile.cpp index 8000914..f82ff92 100644 --- a/services/audiopolicy/managerdefault/IOProfile.cpp +++ b/services/audiopolicy/managerdefault/IOProfile.cpp @@ -17,7 +17,9 @@ #define LOG_TAG "APM::IOProfile" //#define LOG_NDEBUG 0 -#include "AudioPolicyManager.h" +#include "IOProfile.h" +#include "HwModule.h" +#include "Gains.h" namespace android { diff --git a/services/audiopolicy/managerdefault/IOProfile.h b/services/audiopolicy/managerdefault/IOProfile.h index 3317969..a9d93d1 100644 --- a/services/audiopolicy/managerdefault/IOProfile.h +++ b/services/audiopolicy/managerdefault/IOProfile.h @@ -14,6 +14,13 @@ * limitations under the License. */ +#pragma once + +#include "Ports.h" +#include "Devices.h" +#include +#include + namespace android { class HwModule; diff --git a/services/audiopolicy/managerdefault/Ports.cpp b/services/audiopolicy/managerdefault/Ports.cpp index 3e55cee..326f9c5 100644 --- a/services/audiopolicy/managerdefault/Ports.cpp +++ b/services/audiopolicy/managerdefault/Ports.cpp @@ -17,12 +17,16 @@ #define LOG_TAG "APM::Ports" //#define LOG_NDEBUG 0 -#include "AudioPolicyManager.h" - +#include "Ports.h" +#include "HwModule.h" +#include "Gains.h" +#include "ConfigParsingUtils.h" #include "audio_policy_conf.h" namespace android { +int32_t volatile AudioPort::mNextUniqueId = 1; + // --- AudioPort class implementation AudioPort::AudioPort(const String8& name, audio_port_type_t type, @@ -34,7 +38,7 @@ AudioPort::AudioPort(const String8& name, audio_port_type_t type, } void AudioPort::attach(const sp& module) { - mId = AudioPolicyManager::nextUniqueId(); + mId = android_atomic_inc(&mNextUniqueId); mModule = module; } diff --git a/services/audiopolicy/managerdefault/Ports.h b/services/audiopolicy/managerdefault/Ports.h index f6e0e93..6e0e2fe 100644 --- a/services/audiopolicy/managerdefault/Ports.h +++ b/services/audiopolicy/managerdefault/Ports.h @@ -14,9 +14,22 @@ * limitations under the License. */ +#pragma once + +#include +#include +#include +#include +#include +#include + +#define MAX_MIXER_SAMPLING_RATE 48000 +#define MAX_MIXER_CHANNEL_COUNT 8 + namespace android { class HwModule; +class AudioGain; class AudioPort: public virtual RefBase { @@ -86,6 +99,9 @@ protected: // and a unique ID for identifying a port to the (upcoming) selection API, // and its relationship to the mId in AudioOutputDescriptor and AudioInputDescriptor. audio_port_handle_t mId; + +private: + static volatile int32_t mNextUniqueId; }; class AudioPortConfig: public virtual RefBase diff --git a/services/audiopolicy/managerdefault/audio_policy_conf.h b/services/audiopolicy/managerdefault/audio_policy_conf.h index 2535a67..441bf7b 100644 --- a/services/audiopolicy/managerdefault/audio_policy_conf.h +++ b/services/audiopolicy/managerdefault/audio_policy_conf.h @@ -14,10 +14,7 @@ * limitations under the License. */ - -#ifndef ANDROID_AUDIO_POLICY_CONF_H -#define ANDROID_AUDIO_POLICY_CONF_H - +#pragma once ///////////////////////////////////////////////// // Definitions for audio policy configuration file (audio_policy.conf) @@ -71,7 +68,3 @@ #define GAIN_STEP_VALUE "step_value_mB" #define GAIN_MIN_RAMP_MS "min_ramp_ms" #define GAIN_MAX_RAMP_MS "max_ramp_ms" - - - -#endif // ANDROID_AUDIO_POLICY_CONF_H -- cgit v1.1