Engine.h revision 2110e04cdfbf9ad85ce154ce5f778ee5ccfc95eb
12110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie/* 22110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie * Copyright (C) 2015 The Android Open Source Project 32110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie * 42110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie * Licensed under the Apache License, Version 2.0 (the "License"); 52110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie * you may not use this file except in compliance with the License. 62110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie * You may obtain a copy of the License at 72110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie * 82110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie * http://www.apache.org/licenses/LICENSE-2.0 92110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie * 102110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie * Unless required by applicable law or agreed to in writing, software 112110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie * distributed under the License is distributed on an "AS IS" BASIS, 122110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie * See the License for the specific language governing permissions and 142110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie * limitations under the License. 152110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie */ 162110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 172110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie#pragma once 182110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 192110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 202110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie#include "AudioPolicyManagerInterface.h" 212110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie#include "Gains.h" 222110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie#include <AudioGain.h> 232110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie#include <policy.h> 242110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 252110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffienamespace android 262110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie{ 272110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 282110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffieclass AudioPolicyManagerObserver; 292110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 302110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffienamespace audio_policy 312110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie{ 322110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 332110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffieclass Engine 342110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie{ 352110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffiepublic: 362110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie Engine(); 372110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie virtual ~Engine(); 382110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 392110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie template <class RequestedInterface> 402110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie RequestedInterface *queryInterface(); 412110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 422110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffieprivate: 432110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie /// Interface members 442110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie class ManagerInterfaceImpl : public AudioPolicyManagerInterface 452110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 462110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie public: 472110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie ManagerInterfaceImpl(Engine *policyEngine) 482110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie : mPolicyEngine(policyEngine) {} 492110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 502110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie virtual void setObserver(AudioPolicyManagerObserver *observer) 512110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 522110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie mPolicyEngine->setObserver(observer); 532110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 542110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie virtual status_t initCheck() 552110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 562110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return mPolicyEngine->initCheck(); 572110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 582110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie virtual audio_devices_t getDeviceForInputSource(audio_source_t inputSource) const 592110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 602110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return mPolicyEngine->getDeviceForInputSource(inputSource); 612110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 622110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie virtual audio_devices_t getDeviceForStrategy(routing_strategy strategy) const 632110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 642110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return mPolicyEngine->getDeviceForStrategy(strategy); 652110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 662110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie virtual routing_strategy getStrategyForStream(audio_stream_type_t stream) 672110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 682110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return mPolicyEngine->getStrategyForStream(stream); 692110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 702110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie virtual routing_strategy getStrategyForUsage(audio_usage_t usage) 712110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 722110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return mPolicyEngine->getStrategyForUsage(usage); 732110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 742110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie virtual status_t setPhoneState(audio_mode_t mode) 752110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 762110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return mPolicyEngine->setPhoneState(mode); 772110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 782110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie virtual audio_mode_t getPhoneState() const 792110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 802110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return mPolicyEngine->getPhoneState(); 812110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 822110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie virtual status_t setForceUse(audio_policy_force_use_t usage, 832110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie audio_policy_forced_cfg_t config) 842110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 852110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return mPolicyEngine->setForceUse(usage, config); 862110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 872110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie virtual audio_policy_forced_cfg_t getForceUse(audio_policy_force_use_t usage) const 882110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 892110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return mPolicyEngine->getForceUse(usage); 902110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 912110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie virtual status_t setDeviceConnectionState(const sp<DeviceDescriptor> /*devDesc*/, 922110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie audio_policy_dev_state_t /*state*/) 932110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 942110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return NO_ERROR; 952110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 962110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie virtual status_t initStreamVolume(audio_stream_type_t stream, int indexMin, int indexMax) 972110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 982110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return mPolicyEngine->initStreamVolume(stream, indexMin, indexMax); 992110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 1002110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie virtual void initializeVolumeCurves(bool isSpeakerDrcEnabled) 1012110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 1022110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return mPolicyEngine->initializeVolumeCurves(isSpeakerDrcEnabled); 1032110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 1042110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie virtual float volIndexToAmpl(Volume::device_category deviceCategory, 1052110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie audio_stream_type_t stream,int indexInUi) 1062110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 1072110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return mPolicyEngine->volIndexToAmpl(deviceCategory, stream, indexInUi); 1082110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 1092110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie private: 1102110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie Engine *mPolicyEngine; 1112110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } mManagerInterface; 1122110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 1132110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffieprivate: 1142110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie /* Copy facilities are put private to disable copy. */ 1152110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie Engine(const Engine &object); 1162110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie Engine &operator=(const Engine &object); 1172110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 1182110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie void setObserver(AudioPolicyManagerObserver *observer); 1192110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 1202110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie status_t initCheck(); 1212110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 1222110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie inline bool isInCall() const 1232110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 1242110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return is_state_in_call(mPhoneState); 1252110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 1262110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 1272110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie status_t setPhoneState(audio_mode_t mode); 1282110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie audio_mode_t getPhoneState() const 1292110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 1302110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return mPhoneState; 1312110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 1322110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie status_t setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config); 1332110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie audio_policy_forced_cfg_t getForceUse(audio_policy_force_use_t usage) const 1342110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie { 1352110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie return mForceUse[usage]; 1362110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie } 1372110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie status_t setDefaultDevice(audio_devices_t device); 1382110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 1392110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie routing_strategy getStrategyForStream(audio_stream_type_t stream); 1402110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie routing_strategy getStrategyForUsage(audio_usage_t usage); 1412110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie audio_devices_t getDeviceForStrategy(routing_strategy strategy) const; 1422110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie audio_devices_t getDeviceForInputSource(audio_source_t inputSource) const; 1432110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 1442110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie float volIndexToAmpl(Volume::device_category category, 1452110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie audio_stream_type_t stream, int indexInUi); 1462110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie status_t initStreamVolume(audio_stream_type_t stream, int indexMin, int indexMax); 1472110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie void initializeVolumeCurves(bool isSpeakerDrcEnabled); 1482110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 1492110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie audio_mode_t mPhoneState; /**< current phone state. */ 1502110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 1512110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie /** current forced use configuration. */ 1522110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie audio_policy_forced_cfg_t mForceUse[AUDIO_POLICY_FORCE_USE_CNT]; 1532110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 1542110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie AudioPolicyManagerObserver *mApmObserver; 1552110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie}; 1562110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie} // namespace audio_policy 1572110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie} // namespace android 1582110e04cdfbf9ad85ce154ce5f778ee5ccfc95ebFrançois Gaffie 159