Home | History | Annotate | Download | only in include
      1 /*
      2  * Copyright (C) 2009 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #pragma once
     18 
     19 #include <AudioGain.h>
     20 #include <VolumeCurve.h>
     21 #include <AudioPort.h>
     22 #include <AudioPatch.h>
     23 #include <DeviceDescriptor.h>
     24 #include <IOProfile.h>
     25 #include <HwModule.h>
     26 #include <AudioInputDescriptor.h>
     27 #include <AudioOutputDescriptor.h>
     28 #include <AudioPolicyMix.h>
     29 #include <EffectDescriptor.h>
     30 #include <SoundTriggerSession.h>
     31 #include <SessionRoute.h>
     32 
     33 namespace android {
     34 
     35 class AudioPolicyConfig
     36 {
     37 public:
     38     AudioPolicyConfig(HwModuleCollection &hwModules,
     39                       DeviceVector &availableOutputDevices,
     40                       DeviceVector &availableInputDevices,
     41                       sp<DeviceDescriptor> &defaultOutputDevices,
     42                       VolumeCurvesCollection *volumes = nullptr)
     43         : mHwModules(hwModules),
     44           mAvailableOutputDevices(availableOutputDevices),
     45           mAvailableInputDevices(availableInputDevices),
     46           mDefaultOutputDevices(defaultOutputDevices),
     47           mVolumeCurves(volumes),
     48           mIsSpeakerDrcEnabled(false)
     49     {}
     50 
     51     void setVolumes(const VolumeCurvesCollection &volumes)
     52     {
     53         if (mVolumeCurves != nullptr) {
     54             *mVolumeCurves = volumes;
     55         }
     56     }
     57 
     58     void setHwModules(const HwModuleCollection &hwModules)
     59     {
     60         mHwModules = hwModules;
     61     }
     62 
     63     void addAvailableDevice(const sp<DeviceDescriptor> &availableDevice)
     64     {
     65         if (audio_is_output_device(availableDevice->type())) {
     66             mAvailableOutputDevices.add(availableDevice);
     67         } else if (audio_is_input_device(availableDevice->type())) {
     68             mAvailableInputDevices.add(availableDevice);
     69         }
     70     }
     71 
     72     void addAvailableInputDevices(const DeviceVector &availableInputDevices)
     73     {
     74         mAvailableInputDevices.add(availableInputDevices);
     75     }
     76 
     77     void addAvailableOutputDevices(const DeviceVector &availableOutputDevices)
     78     {
     79         mAvailableOutputDevices.add(availableOutputDevices);
     80     }
     81 
     82     bool isSpeakerDrcEnabled() const { return mIsSpeakerDrcEnabled; }
     83 
     84     void setSpeakerDrcEnabled(bool isSpeakerDrcEnabled)
     85     {
     86         mIsSpeakerDrcEnabled = isSpeakerDrcEnabled;
     87     }
     88 
     89     const HwModuleCollection getHwModules() const { return mHwModules; }
     90 
     91     const DeviceVector &getAvailableInputDevices() const
     92     {
     93         return mAvailableInputDevices;
     94     }
     95 
     96     const DeviceVector &getAvailableOutputDevices() const
     97     {
     98         return mAvailableOutputDevices;
     99     }
    100 
    101     void setDefaultOutputDevice(const sp<DeviceDescriptor> &defaultDevice)
    102     {
    103         mDefaultOutputDevices = defaultDevice;
    104     }
    105 
    106     const sp<DeviceDescriptor> &getDefaultOutputDevice() const { return mDefaultOutputDevices; }
    107 
    108     void setDefault(void)
    109     {
    110         mDefaultOutputDevices = new DeviceDescriptor(AUDIO_DEVICE_OUT_SPEAKER);
    111         sp<HwModule> module;
    112         sp<DeviceDescriptor> defaultInputDevice = new DeviceDescriptor(AUDIO_DEVICE_IN_BUILTIN_MIC);
    113         mAvailableOutputDevices.add(mDefaultOutputDevices);
    114         mAvailableInputDevices.add(defaultInputDevice);
    115 
    116         module = new HwModule(AUDIO_HARDWARE_MODULE_ID_PRIMARY);
    117 
    118         sp<OutputProfile> outProfile;
    119         outProfile = new OutputProfile(String8("primary"));
    120         outProfile->attach(module);
    121         outProfile->addAudioProfile(
    122                 new AudioProfile(AUDIO_FORMAT_PCM_16_BIT, AUDIO_CHANNEL_OUT_STEREO, 44100));
    123         outProfile->addSupportedDevice(mDefaultOutputDevices);
    124         outProfile->setFlags(AUDIO_OUTPUT_FLAG_PRIMARY);
    125         module->addOutputProfile(outProfile);
    126 
    127         sp<InputProfile> inProfile;
    128         inProfile = new InputProfile(String8("primary"));
    129         inProfile->attach(module);
    130         inProfile->addAudioProfile(
    131                 new AudioProfile(AUDIO_FORMAT_PCM_16_BIT, AUDIO_CHANNEL_IN_MONO, 8000));
    132         inProfile->addSupportedDevice(defaultInputDevice);
    133         module->addInputProfile(inProfile);
    134 
    135         mHwModules.add(module);
    136     }
    137 
    138 private:
    139     HwModuleCollection &mHwModules; /**< Collection of Module, with Profiles, i.e. Mix Ports. */
    140     DeviceVector &mAvailableOutputDevices;
    141     DeviceVector &mAvailableInputDevices;
    142     sp<DeviceDescriptor> &mDefaultOutputDevices;
    143     VolumeCurvesCollection *mVolumeCurves;
    144     // TODO: remove when legacy conf file is removed. true on devices that use DRC on the
    145     // DEVICE_CATEGORY_SPEAKER path to boost soft sounds, used to adjust volume curves accordingly.
    146     // Note: remove also speaker_drc_enabled from global configuration of XML config file.
    147     bool mIsSpeakerDrcEnabled;
    148 };
    149 
    150 } // namespace android
    151