diff options
author | Eric Laurent <elaurent@google.com> | 2015-06-18 22:10:17 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-06-18 22:10:23 +0000 |
commit | 91b0018d658a509aacceddf9cde84afca591d014 (patch) | |
tree | 49fe3c6da48e1f110c308aed813ec235c0686e08 /services | |
parent | 46d8eb1aa167c8811554cded6640cb6f153b5021 (diff) | |
parent | 0f17ab7f9fac4327a8772e9199f411af7df912a4 (diff) | |
download | frameworks_av-91b0018d658a509aacceddf9cde84afca591d014.zip frameworks_av-91b0018d658a509aacceddf9cde84afca591d014.tar.gz frameworks_av-91b0018d658a509aacceddf9cde84afca591d014.tar.bz2 |
Merge "Bug fix on Engine Configurable" into mnc-dev
Diffstat (limited to 'services')
4 files changed, 38 insertions, 109 deletions
diff --git a/services/audiopolicy/engineconfigurable/parameter-framework/plugin/PolicySubsystem.cpp b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/PolicySubsystem.cpp index a5dab36..bf3906d 100755 --- a/services/audiopolicy/engineconfigurable/parameter-framework/plugin/PolicySubsystem.cpp +++ b/services/audiopolicy/engineconfigurable/parameter-framework/plugin/PolicySubsystem.cpp @@ -49,17 +49,11 @@ PolicySubsystem::PolicySubsystem(const std::string &name) // Try to connect a Plugin Interface from Audio Policy Engine EngineInstance *engineInstance = EngineInstance::getInstance(); - if (engineInstance == NULL) { - ALOG_ASSERT(engineInstance != NULL, "NULL Plugin Interface"); - return; - } + ALOG_ASSERT(engineInstance != NULL, "NULL Plugin Interface"); + // Retrieve the Route Interface mPluginInterface = engineInstance->queryInterface<android::AudioPolicyPluginInterface>(); - if (mPluginInterface == NULL) { - // bailing out - ALOG_ASSERT(mPluginInterface != NULL, "NULL Plugin Interface"); - return; - } + ALOG_ASSERT(mPluginInterface != NULL, "NULL Plugin Interface"); // Provide mapping keys to the core, necessary when parsing the XML Structure files. addContextMappingKey(mKeyName); diff --git a/services/audiopolicy/engineconfigurable/src/Engine.cpp b/services/audiopolicy/engineconfigurable/src/Engine.cpp index 61fae71..733cdf6 100755 --- a/services/audiopolicy/engineconfigurable/src/Engine.cpp +++ b/services/audiopolicy/engineconfigurable/src/Engine.cpp @@ -87,11 +87,6 @@ Engine::Engine() mPolicyParameterMgr(new ParameterManagerWrapper()), mApmObserver(NULL) { - if (mPolicyParameterMgr->start() != NO_ERROR) { - ALOGE("%s: could not start Policy PFW", __FUNCTION__); - delete mPolicyParameterMgr; - mPolicyParameterMgr = NULL; - } } Engine::~Engine() @@ -111,10 +106,13 @@ void Engine::setObserver(AudioPolicyManagerObserver *observer) status_t Engine::initCheck() { - return (mPolicyParameterMgr != NULL) && - mPolicyParameterMgr->isStarted() && - (mApmObserver != NULL)? - NO_ERROR : NO_INIT; + if (mPolicyParameterMgr != NULL && mPolicyParameterMgr->start() != NO_ERROR) { + ALOGE("%s: could not start Policy PFW", __FUNCTION__); + delete mPolicyParameterMgr; + mPolicyParameterMgr = NULL; + return NO_INIT; + } + return (mApmObserver != NULL)? NO_ERROR : NO_INIT; } bool Engine::setVolumeProfileForStream(const audio_stream_type_t &streamType, @@ -143,19 +141,6 @@ status_t Engine::add(const std::string &name, const Key &key) return collection.add(name, key); } -template <> -routing_strategy Engine::getPropertyForKey<routing_strategy, audio_usage_t>(audio_usage_t usage) const -{ - const SwAudioOutputCollection &outputs = mApmObserver->getOutputs(); - - if (usage == AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY && - (outputs.isStreamActive(AUDIO_STREAM_RING) || - outputs.isStreamActive(AUDIO_STREAM_ALARM))) { - return STRATEGY_SONIFICATION; - } - return getPropertyForKey<routing_strategy, audio_usage_t>(usage); -} - template <typename Property, typename Key> Property Engine::getPropertyForKey(Key key) const { @@ -167,10 +152,21 @@ Property Engine::getPropertyForKey(Key key) const return element->template get<Property>(); } -template <> -audio_devices_t Engine::getPropertyForKey<audio_devices_t, routing_strategy>(routing_strategy strategy) const +routing_strategy Engine::ManagerInterfaceImpl::getStrategyForUsage(audio_usage_t usage) { - const SwAudioOutputCollection &outputs = mApmObserver->getOutputs(); + const SwAudioOutputCollection &outputs = mPolicyEngine->mApmObserver->getOutputs(); + + if (usage == AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY && + (outputs.isStreamActive(AUDIO_STREAM_RING) || + outputs.isStreamActive(AUDIO_STREAM_ALARM))) { + return STRATEGY_SONIFICATION; + } + return mPolicyEngine->getPropertyForKey<routing_strategy, audio_usage_t>(usage); +} + +audio_devices_t Engine::ManagerInterfaceImpl::getDeviceForStrategy(routing_strategy strategy) const +{ + const SwAudioOutputCollection &outputs = mPolicyEngine->mApmObserver->getOutputs(); /** This is the only case handled programmatically because the PFW is unable to know the * activity of streams. @@ -187,19 +183,9 @@ audio_devices_t Engine::getPropertyForKey<audio_devices_t, routing_strategy>(rou !outputs.isStreamActiveRemotely(AUDIO_STREAM_MUSIC, SONIFICATION_RESPECTFUL_AFTER_MUSIC_DELAY) && outputs.isStreamActive(AUDIO_STREAM_MUSIC, SONIFICATION_RESPECTFUL_AFTER_MUSIC_DELAY)) { - return getPropertyForKey<audio_devices_t, routing_strategy>(STRATEGY_MEDIA); + return mPolicyEngine->getPropertyForKey<audio_devices_t, routing_strategy>(STRATEGY_MEDIA); } - return getPropertyForKey<audio_devices_t, routing_strategy>(strategy); -} - -routing_strategy Engine::ManagerInterfaceImpl::getStrategyForUsage(audio_usage_t usage) -{ - return mPolicyEngine->getPropertyForKey<routing_strategy, audio_usage_t>(usage); -} - -audio_devices_t Engine::ManagerInterfaceImpl::getDeviceForStrategy(routing_strategy stategy) const -{ - return mPolicyEngine->getPropertyForKey<audio_devices_t, routing_strategy>(stategy); + return mPolicyEngine->getPropertyForKey<audio_devices_t, routing_strategy>(strategy); } template <typename Property, typename Key> @@ -233,6 +219,9 @@ status_t Engine::initStreamVolume(audio_stream_type_t streamType, ALOGE("%s: Stream Type %d not found", __FUNCTION__, streamType); return BAD_TYPE; } + mApmObserver->getStreamDescriptors().setVolumeIndexMin(streamType, indexMin); + mApmObserver->getStreamDescriptors().setVolumeIndexMax(streamType, indexMax); + return stream->initVolume(indexMin, indexMax); } diff --git a/services/audiopolicy/engineconfigurable/wrapper/ParameterManagerWrapper.cpp b/services/audiopolicy/engineconfigurable/wrapper/ParameterManagerWrapper.cpp index 5b935e8..cfe49d4 100755 --- a/services/audiopolicy/engineconfigurable/wrapper/ParameterManagerWrapper.cpp +++ b/services/audiopolicy/engineconfigurable/wrapper/ParameterManagerWrapper.cpp @@ -145,7 +145,7 @@ void ParameterManagerWrapper::loadCriterionType(cnode *root, bool isInclusive) ALOG_ASSERT(node != NULL, "error in parsing file"); const char *typeName = node->name; - char *valueNames = (char *)node->value; + char *valueNames = strndup(node->value, strlen(node->value)); addCriterionType(typeName, isInclusive); @@ -178,6 +178,7 @@ void ParameterManagerWrapper::loadCriterionType(cnode *root, bool isInclusive) } valueName = strtok_r(NULL, ",", &ctx); } + free(valueNames); } } diff --git a/services/audiopolicy/engineconfigurable/wrapper/config/audio_policy_criteria.conf b/services/audiopolicy/engineconfigurable/wrapper/config/audio_policy_criteria.conf index a4ffdd5..5b046a8 100755 --- a/services/audiopolicy/engineconfigurable/wrapper/config/audio_policy_criteria.conf +++ b/services/audiopolicy/engineconfigurable/wrapper/config/audio_policy_criteria.conf @@ -24,7 +24,7 @@ # * 1 << N -> (N+1)th literal value, # ######################################################### -# Route|Audio { +# Policy { # InclusiveCriterionType|ExclusiveCriterionType { # <Criterion Name> [numerical value 1:]<literal value 1>,[numerical value 2:]<literal value 2>,<literal value 3>,... # } @@ -33,7 +33,7 @@ ######################################################### # Criterion: ######################################################### -# Route|Audio { +# Policy { # Criterion { # <Criterion Name> { # Type <Criterion type name> @@ -43,21 +43,12 @@ # } Policy { - ExclusiveCriterionType { - # - # The values of the mode MUST be aligned with the definition of the audio_mode_t - # from system/audio.h - # - AndroidModeType 0:Normal,1:RingTone,2:InCall,3:InCommunication - } InclusiveCriterionType { # # DO NOT CHANGE ORDER. This definition must be aligned with the definition of # AUDIO_DEVICE_OUT_* within <system/audio.h> file of android. # OutputDevicesMaskType Earpiece,Speaker,WiredHeadset,WiredHeadphone,BluetoothSco,BluetoothScoHeadset,BluetoothScoCarkit,BluetoothA2dp,BluetoothA2dpHeadphones,BluetoothA2dpSpeaker,Hdmi,AnlgDockHeadset,DgtlDockHeadset,UsbAccessory,UsbDevice,RemoteSubmix,TelephonyTx,Line,HdmiArc,Spdif,Fm,AuxLine,SpeakerSafe - } - InclusiveCriterionType { # # DO NOT CHANGE ORDER. This definition must be aligned with the definition of # AUDIO_DEVICE_IN_* within <system/audio.h> file of android. @@ -68,121 +59,75 @@ Policy { } ExclusiveCriterionType { # + # The values of the mode MUST be aligned with the definition of the audio_mode_t + # from system/audio.h + # + AndroidModeType 0:Normal,1:RingTone,2:InCall,3:InCommunication + # # The values of the mode MUST be aligned with the definition of the # audio_policy_forced_config_t from system/audio.h # ForceUseForCommunicationType 0:ForceNone,1:ForceSpeaker,3:ForceBtSco - } - ExclusiveCriterionType { # # The values of the mode MUST be aligned with the definition of the # audio_policy_forced_config_t from system/audio.h # ForceUseForMediaType 0:ForceNone,1:ForceSpeaker,2:ForceHeadphones,4:ForceBtA2dp,5:ForceWiredAccessory,8:ForceAnalogDock,9:ForceDigitalDock,10:ForceNoBtA2dp - } - ExclusiveCriterionType { # # The values of the mode MUST be aligned with the definition of the # audio_policy_forced_config_t from system/audio.h # ForceUseForRecordType 0:ForceNone,3:ForceBtSco,5:ForceWiredAccessory - } - ExclusiveCriterionType { # # The values of the mode MUST be aligned with the definition of the # audio_policy_forced_config_t from system/audio.h # ForceUseForDockType 0:ForceNone,5:ForceWiredAccessory,6:ForceBtCarDock,7:ForceBtDeskDock,8:ForceAnalogDock,9:ForceDigitalDock - } - ExclusiveCriterionType { # # The values of the mode MUST be aligned with the definition of the # audio_policy_forced_config_t from system/audio.h # ForceUseForSystemType 0:ForceNone,11:ForceSystemEnforced - } - ExclusiveCriterionType { # # The values of the mode MUST be aligned with the definition of the # audio_policy_forced_config_t from system/audio.h # ForceUseForHdmiSystemAudioType 0:ForceNone,12:ForceHdmiSystemEnforced } - ExclusiveCriterionType { - Rate 8000,11025,12000,16000,22050,24000,32000,44100,48000,96000,176400,192000 - } - ExclusiveCriterionType { - Format Mp3,AmrNb,AmrWb,Aac,HeAacV1,HeAacV2,Vorbis,Pcm16Bit,Pcm8Bit,Pcm32Bit,Pcm8_24Bit - } - InclusiveCriterionType { - OutputChannelMask FrontLeft,FrontRight,FrontCenter,LowFrequence,BackLeft,BackRight,FromLeftOfCenter,FromRightOfCenter,BackCenter,SideLeft,SideRight,TopCenter,TopFrontLeft,TopFrontCenter,TopFrontRight,TopBackLeft,TopBackCenter,TopBackRight - } - ExclusiveCriterionType { - OutputChannelMasks Mono,Stereo,Quad,QuadBack,QuadSide,5Point1,5Point1Back,5Point1Side,7Point1,All - } - InclusiveCriterionType { - InputChannelMask Left,Right,Front,Back,LeftProcessed,RightProcessed,FrontProcessed,BackProcessed,Pressure,XAxis,YAxis,ZAxis,VoiceUplink,VoiceDnlink - } - ExclusiveCriterionType { - InputChannelMasks Mono,Stereo,FrontBack,VoiceUplinkDnlink,All - } - InclusiveCriterionType { - OutputFlags Direct,Primary,Fast,DeepBuffer,CompressOffload,NonBlocking,HwAvSync - } - ExclusiveCriterionType { - InputSource Default,Mic,VoiceUplink,VoiceDownlink,VoiceCall,Camcorder,VoiceRecognition,VoiceCommunication,RemoteSubmix,Hotword - } - Criterion { AvailableInputDevices { Type InputDevicesMaskType Default none } - } - Criterion { AvailableOutputDevices { Type OutputDevicesMaskType Default none } - } - Criterion { TelephonyMode { Type AndroidModeType Default Normal } - } - Criterion { ForceUseForCommunication { Type ForceUseForCommunicationType Default ForceNone } - } - Criterion { ForceUseForMedia { Type ForceUseForMediaType Default ForceNone } - } - Criterion { ForceUseForRecord { Type ForceUseForRecordType Default ForceNone } - } - Criterion { ForceUseForDock { Type ForceUseForDockType Default ForceNone } - } - Criterion { ForceUseForSystem { Type ForceUseForSystemType Default ForceNone } - } - Criterion { ForceUseForHdmiSystemAudio { Type ForceUseForHdmiSystemAudioType Default ForceNone |