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