120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie/* 220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * Copyright (C) 2015 The Android Open Source Project 320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * 420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * Licensed under the Apache License, Version 2.0 (the "License"); 520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * you may not use this file except in compliance with the License. 620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * You may obtain a copy of the License at 720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * 820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * http://www.apache.org/licenses/LICENSE-2.0 920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * 1020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * Unless required by applicable law or agreed to in writing, software 1120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * distributed under the License is distributed on an "AS IS" BASIS, 1220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * See the License for the specific language governing permissions and 1420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * limitations under the License. 1520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie */ 1620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 1720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie#pragma once 1820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 1920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 2020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie#include <AudioPolicyManagerInterface.h> 2120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie#include <AudioPolicyPluginInterface.h> 2220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie#include "Collection.h" 2320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 2420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffienamespace android 2520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie{ 2620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffieclass AudioPolicyManagerObserver; 2720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 2820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffienamespace audio_policy 2920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie{ 3020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 3120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffieclass ParameterManagerWrapper; 3220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffieclass VolumeProfile; 3320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 3420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffieclass Engine 3520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie{ 3620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffiepublic: 3720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie Engine(); 3820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie virtual ~Engine(); 3920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 4020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie template <class RequestedInterface> 4120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie RequestedInterface *queryInterface(); 4220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 4320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffieprivate: 4420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie /// Interface members 4520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie class ManagerInterfaceImpl : public AudioPolicyManagerInterface 4620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie { 4720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie public: 4820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie ManagerInterfaceImpl(Engine *policyEngine) 4920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie : mPolicyEngine(policyEngine) {} 5020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 5120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie virtual android::status_t initCheck() 5220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie { 5320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie return mPolicyEngine->initCheck(); 5420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie } 5520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie virtual void setObserver(AudioPolicyManagerObserver *observer) 5620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie { 5720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie mPolicyEngine->setObserver(observer); 5820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie } 5920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie virtual audio_devices_t getDeviceForInputSource(audio_source_t inputSource) const 6020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie { 6120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie return mPolicyEngine->getPropertyForKey<audio_devices_t, audio_source_t>(inputSource); 6220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie } 6320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie virtual audio_devices_t getDeviceForStrategy(routing_strategy stategy) const; 6420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie virtual routing_strategy getStrategyForStream(audio_stream_type_t stream) 6520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie { 6620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie return mPolicyEngine->getPropertyForKey<routing_strategy, audio_stream_type_t>(stream); 6720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie } 6820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie virtual routing_strategy getStrategyForUsage(audio_usage_t usage); 6920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie virtual status_t setPhoneState(audio_mode_t mode) 7020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie { 7120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie return mPolicyEngine->setPhoneState(mode); 7220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie } 7320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie virtual audio_mode_t getPhoneState() const 7420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie { 7520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie return mPolicyEngine->getPhoneState(); 7620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie } 7720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie virtual status_t setForceUse(audio_policy_force_use_t usage, 7820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie audio_policy_forced_cfg_t config) 7920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie { 8020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie return mPolicyEngine->setForceUse(usage, config); 8120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie } 8220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie virtual audio_policy_forced_cfg_t getForceUse(audio_policy_force_use_t usage) const 8320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie { 8420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie return mPolicyEngine->getForceUse(usage); 8520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie } 8620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie virtual android::status_t setDeviceConnectionState(const sp<DeviceDescriptor> devDesc, 8720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie audio_policy_dev_state_t state) 8820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie { 8920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie return mPolicyEngine->setDeviceConnectionState(devDesc->type(), state, 9020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie devDesc->mAddress); 9120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie } 9220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie virtual status_t initStreamVolume(audio_stream_type_t stream, 9320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie int indexMin, int indexMax) 9420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie { 9520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie return mPolicyEngine->initStreamVolume(stream, indexMin, indexMax); 9620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie } 9720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 9820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie virtual void initializeVolumeCurves(bool /*isSpeakerDrcEnabled*/) {} 9920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 10020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie virtual float volIndexToDb(Volume::device_category deviceCategory, 10120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie audio_stream_type_t stream, 10220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie int indexInUi) 10320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie { 10420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie return mPolicyEngine->volIndexToDb(deviceCategory, stream, indexInUi); 10520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie } 10620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 10720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie private: 10820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie Engine *mPolicyEngine; 10920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie } mManagerInterface; 11020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 11120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie class PluginInterfaceImpl : public AudioPolicyPluginInterface 11220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie { 11320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie public: 11420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie PluginInterfaceImpl(Engine *policyEngine) 11520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie : mPolicyEngine(policyEngine) {} 11620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 11720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie virtual status_t addStrategy(const std::string &name, routing_strategy strategy) 11820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie { 11920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie return mPolicyEngine->add<routing_strategy>(name, strategy); 12020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie } 12120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie virtual status_t addStream(const std::string &name, audio_stream_type_t stream) 12220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie { 12320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie return mPolicyEngine->add<audio_stream_type_t>(name, stream); 12420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie } 12520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie virtual status_t addUsage(const std::string &name, audio_usage_t usage) 12620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie { 12720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie return mPolicyEngine->add<audio_usage_t>(name, usage); 12820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie } 12920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie virtual status_t addInputSource(const std::string &name, audio_source_t source) 13020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie { 13120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie return mPolicyEngine->add<audio_source_t>(name, source); 13220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie } 13320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie virtual bool setDeviceForStrategy(const routing_strategy &strategy, audio_devices_t devices) 13420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie { 13520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie return mPolicyEngine->setPropertyForKey<audio_devices_t, routing_strategy>(devices, 13620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie strategy); 13720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie } 13820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie virtual bool setStrategyForStream(const audio_stream_type_t &stream, 13920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie routing_strategy strategy) 14020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie { 14120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie return mPolicyEngine->setPropertyForKey<routing_strategy, audio_stream_type_t>(strategy, 14220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie stream); 14320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie } 14420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie virtual bool setVolumeProfileForStream(const audio_stream_type_t &stream, 14520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie Volume::device_category deviceCategory, 14620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie const VolumeCurvePoints &points) 14720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie { 14820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie return mPolicyEngine->setVolumeProfileForStream(stream, deviceCategory, points); 14920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie } 15020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 15120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie virtual bool setStrategyForUsage(const audio_usage_t &usage, routing_strategy strategy) 15220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie { 15320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie return mPolicyEngine->setPropertyForKey<routing_strategy, audio_usage_t>(strategy, 15420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie usage); 15520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie } 15620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie virtual bool setDeviceForInputSource(const audio_source_t &inputSource, 15720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie audio_devices_t device) 15820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie { 15920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie return mPolicyEngine->setPropertyForKey<audio_devices_t, audio_source_t>(device, 16020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie inputSource); 16120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie } 16220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 16320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie private: 16420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie Engine *mPolicyEngine; 16520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie } mPluginInterface; 16620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 16720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffieprivate: 16820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie /* Copy facilities are put private to disable copy. */ 16920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie Engine(const Engine &object); 17020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie Engine &operator=(const Engine &object); 17120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 17220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie void setObserver(AudioPolicyManagerObserver *observer); 17320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 17420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie bool setVolumeProfileForStream(const audio_stream_type_t &stream, 17520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie Volume::device_category deviceCategory, 17620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie const VolumeCurvePoints &points); 17720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 17820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie status_t initCheck(); 17920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie status_t setPhoneState(audio_mode_t mode); 18020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie audio_mode_t getPhoneState() const; 18120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie status_t setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config); 18220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie audio_policy_forced_cfg_t getForceUse(audio_policy_force_use_t usage) const; 18320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie status_t setDeviceConnectionState(audio_devices_t devices, audio_policy_dev_state_t state, 18420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie const char *deviceAddress); 18520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 18620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie float volIndexToDb(Volume::device_category category, 18720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie audio_stream_type_t stream, 18820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie int indexInUi); 18920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie status_t initStreamVolume(audio_stream_type_t stream, int indexMin, int indexMax); 19020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 19120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie StrategyCollection mStrategyCollection; /**< Strategies indexed by their enum id. */ 19220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie StreamCollection mStreamCollection; /**< Streams indexed by their enum id. */ 19320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie UsageCollection mUsageCollection; /**< Usages indexed by their enum id. */ 19420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie InputSourceCollection mInputSourceCollection; /**< Input sources indexed by their enum id. */ 19520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 19620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie template <typename Key> 19720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie status_t add(const std::string &name, const Key &key); 19820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 19920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie template <typename Key> 20020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie Element<Key> *getFromCollection(const Key &key) const; 20120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 20220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie template <typename Key> 20320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie const Collection<Key> &getCollection() const; 20420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 20520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie template <typename Key> 20620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie Collection<Key> &getCollection(); 20720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 20820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie template <typename Property, typename Key> 20920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie Property getPropertyForKey(Key key) const; 21020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 21120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie template <typename Property, typename Key> 21220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie bool setPropertyForKey(const Property &property, const Key &key); 21320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 21420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie /** 21520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * Policy Parameter Manager hidden through a wrapper. 21620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie */ 21720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie ParameterManagerWrapper *mPolicyParameterMgr; 21820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 21920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie AudioPolicyManagerObserver *mApmObserver; 22020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie}; 22120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 22220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie}; // namespace audio_policy 22320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 22420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie}; // namespace android 22520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie 226