1*ec779b8eSAndroid Build Coastguard Worker /* 2*ec779b8eSAndroid Build Coastguard Worker * Copyright (C) 2009 The Android Open Source Project 3*ec779b8eSAndroid Build Coastguard Worker * 4*ec779b8eSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*ec779b8eSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*ec779b8eSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*ec779b8eSAndroid Build Coastguard Worker * 8*ec779b8eSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*ec779b8eSAndroid Build Coastguard Worker * 10*ec779b8eSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*ec779b8eSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*ec779b8eSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*ec779b8eSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*ec779b8eSAndroid Build Coastguard Worker * limitations under the License. 15*ec779b8eSAndroid Build Coastguard Worker */ 16*ec779b8eSAndroid Build Coastguard Worker 17*ec779b8eSAndroid Build Coastguard Worker #ifndef ANDROID_AUDIOPOLICY_INTERFACE_H 18*ec779b8eSAndroid Build Coastguard Worker #define ANDROID_AUDIOPOLICY_INTERFACE_H 19*ec779b8eSAndroid Build Coastguard Worker 20*ec779b8eSAndroid Build Coastguard Worker #include <android/media/DeviceConnectedState.h> 21*ec779b8eSAndroid Build Coastguard Worker #include <android/media/TrackInternalMuteInfo.h> 22*ec779b8eSAndroid Build Coastguard Worker #include <android/media/audio/common/AudioConfigBase.h> 23*ec779b8eSAndroid Build Coastguard Worker #include <android/media/audio/common/AudioMMapPolicyInfo.h> 24*ec779b8eSAndroid Build Coastguard Worker #include <android/media/audio/common/AudioMMapPolicyType.h> 25*ec779b8eSAndroid Build Coastguard Worker #include <android/media/GetInputForAttrResponse.h> 26*ec779b8eSAndroid Build Coastguard Worker #include <android/content/AttributionSourceState.h> 27*ec779b8eSAndroid Build Coastguard Worker #include <error/BinderResult.h> 28*ec779b8eSAndroid Build Coastguard Worker #include <media/AudioCommonTypes.h> 29*ec779b8eSAndroid Build Coastguard Worker #include <media/AudioContainers.h> 30*ec779b8eSAndroid Build Coastguard Worker #include <media/AudioDeviceTypeAddr.h> 31*ec779b8eSAndroid Build Coastguard Worker #include <media/AudioPolicy.h> 32*ec779b8eSAndroid Build Coastguard Worker #include <media/AudioSystem.h> 33*ec779b8eSAndroid Build Coastguard Worker #include <media/DeviceDescriptorBase.h> 34*ec779b8eSAndroid Build Coastguard Worker #include <utils/String8.h> 35*ec779b8eSAndroid Build Coastguard Worker 36*ec779b8eSAndroid Build Coastguard Worker namespace android { 37*ec779b8eSAndroid Build Coastguard Worker 38*ec779b8eSAndroid Build Coastguard Worker using content::AttributionSourceState; 39*ec779b8eSAndroid Build Coastguard Worker 40*ec779b8eSAndroid Build Coastguard Worker // ---------------------------------------------------------------------------- 41*ec779b8eSAndroid Build Coastguard Worker 42*ec779b8eSAndroid Build Coastguard Worker // The AudioPolicyInterface and AudioPolicyClientInterface classes define the communication 43*ec779b8eSAndroid Build Coastguard Worker // interfaces between the platform specific audio policy manager and Android generic audio policy 44*ec779b8eSAndroid Build Coastguard Worker // manager. 45*ec779b8eSAndroid Build Coastguard Worker // The platform specific audio policy manager must implement methods of the AudioPolicyInterface 46*ec779b8eSAndroid Build Coastguard Worker // class. 47*ec779b8eSAndroid Build Coastguard Worker // This implementation makes use of the AudioPolicyClientInterface to control the activity and 48*ec779b8eSAndroid Build Coastguard Worker // configuration of audio input and output streams. 49*ec779b8eSAndroid Build Coastguard Worker // 50*ec779b8eSAndroid Build Coastguard Worker // The platform specific audio policy manager is in charge of the audio routing and volume control 51*ec779b8eSAndroid Build Coastguard Worker // policies for a given platform. 52*ec779b8eSAndroid Build Coastguard Worker // The main roles of this module are: 53*ec779b8eSAndroid Build Coastguard Worker // - keep track of current system state (removable device connections, phone state, 54*ec779b8eSAndroid Build Coastguard Worker // user requests...). 55*ec779b8eSAndroid Build Coastguard Worker // System state changes and user actions are notified to audio policy manager with methods of the 56*ec779b8eSAndroid Build Coastguard Worker // AudioPolicyInterface. 57*ec779b8eSAndroid Build Coastguard Worker // - process getOutput() queries received when AudioTrack objects are created: Those queries 58*ec779b8eSAndroid Build Coastguard Worker // return a handler on an output that has been selected, configured and opened by the audio 59*ec779b8eSAndroid Build Coastguard Worker // policy manager and that must be used by the AudioTrack when registering to the AudioFlinger 60*ec779b8eSAndroid Build Coastguard Worker // with the createTrack() method. 61*ec779b8eSAndroid Build Coastguard Worker // When the AudioTrack object is released, a putOutput() query is received and the audio policy 62*ec779b8eSAndroid Build Coastguard Worker // manager can decide to close or reconfigure the output depending on other streams using this 63*ec779b8eSAndroid Build Coastguard Worker // output and current system state. 64*ec779b8eSAndroid Build Coastguard Worker // - similarly process getInput() and putInput() queries received from AudioRecord objects and 65*ec779b8eSAndroid Build Coastguard Worker // configure audio inputs. 66*ec779b8eSAndroid Build Coastguard Worker // - process volume control requests: the stream volume is converted from an index value 67*ec779b8eSAndroid Build Coastguard Worker // (received from UI) to a float value applicable to each output as a function of platform 68*ec779b8eSAndroid Build Coastguard Worker // specificsettings and current output route (destination device). It also make sure that streams 69*ec779b8eSAndroid Build Coastguard Worker // are not muted if not allowed (e.g. camera shutter sound in some countries). 70*ec779b8eSAndroid Build Coastguard Worker // 71*ec779b8eSAndroid Build Coastguard Worker // The platform specific audio policy manager is provided as a shared library by platform vendors 72*ec779b8eSAndroid Build Coastguard Worker // (as for libaudio.so) and is linked with libaudioflinger.so 73*ec779b8eSAndroid Build Coastguard Worker // 74*ec779b8eSAndroid Build Coastguard Worker // NOTE: by convention, the implementation of the AudioPolicyInterface in AudioPolicyManager does 75*ec779b8eSAndroid Build Coastguard Worker // not have to perform any nullptr check on input arguments: The caller of this API is 76*ec779b8eSAndroid Build Coastguard Worker // AudioPolicyService running in the same process and in charge of validating arguments received 77*ec779b8eSAndroid Build Coastguard Worker // from incoming binder calls before calling AudioPolicyManager. 78*ec779b8eSAndroid Build Coastguard Worker 79*ec779b8eSAndroid Build Coastguard Worker // Audio Policy Manager Interface 80*ec779b8eSAndroid Build Coastguard Worker class AudioPolicyInterface 81*ec779b8eSAndroid Build Coastguard Worker { 82*ec779b8eSAndroid Build Coastguard Worker 83*ec779b8eSAndroid Build Coastguard Worker public: 84*ec779b8eSAndroid Build Coastguard Worker typedef enum { 85*ec779b8eSAndroid Build Coastguard Worker API_INPUT_INVALID = -1, 86*ec779b8eSAndroid Build Coastguard Worker API_INPUT_LEGACY = 0,// e.g. audio recording from a microphone 87*ec779b8eSAndroid Build Coastguard Worker API_INPUT_MIX_CAPTURE,// used for "remote submix" legacy mode (no DAP), 88*ec779b8eSAndroid Build Coastguard Worker // capture of the media to play it remotely 89*ec779b8eSAndroid Build Coastguard Worker API_INPUT_MIX_EXT_POLICY_REROUTE,// used for platform audio rerouting, where mixes are 90*ec779b8eSAndroid Build Coastguard Worker // handled by external and dynamically installed 91*ec779b8eSAndroid Build Coastguard Worker // policies which reroute audio mixes 92*ec779b8eSAndroid Build Coastguard Worker API_INPUT_MIX_PUBLIC_CAPTURE_PLAYBACK, // used for playback capture with a MediaProjection 93*ec779b8eSAndroid Build Coastguard Worker API_INPUT_TELEPHONY_RX, // used for capture from telephony RX path 94*ec779b8eSAndroid Build Coastguard Worker } input_type_t; 95*ec779b8eSAndroid Build Coastguard Worker 96*ec779b8eSAndroid Build Coastguard Worker typedef enum { 97*ec779b8eSAndroid Build Coastguard Worker API_OUTPUT_INVALID = -1, 98*ec779b8eSAndroid Build Coastguard Worker API_OUTPUT_LEGACY = 0,// e.g. audio playing to speaker 99*ec779b8eSAndroid Build Coastguard Worker API_OUT_MIX_PLAYBACK, // used for "remote submix" playback of audio from remote source 100*ec779b8eSAndroid Build Coastguard Worker // to local capture 101*ec779b8eSAndroid Build Coastguard Worker API_OUTPUT_TELEPHONY_TX, // used for playback to telephony TX path 102*ec779b8eSAndroid Build Coastguard Worker } output_type_t; 103*ec779b8eSAndroid Build Coastguard Worker 104*ec779b8eSAndroid Build Coastguard Worker public: ~AudioPolicyInterface()105*ec779b8eSAndroid Build Coastguard Worker virtual ~AudioPolicyInterface() {} 106*ec779b8eSAndroid Build Coastguard Worker // 107*ec779b8eSAndroid Build Coastguard Worker // configuration functions 108*ec779b8eSAndroid Build Coastguard Worker // 109*ec779b8eSAndroid Build Coastguard Worker 110*ec779b8eSAndroid Build Coastguard Worker // Informs APM that new HAL modules are available. This typically happens 111*ec779b8eSAndroid Build Coastguard Worker // due to registration of an audio HAL service. 112*ec779b8eSAndroid Build Coastguard Worker virtual void onNewAudioModulesAvailable() = 0; 113*ec779b8eSAndroid Build Coastguard Worker 114*ec779b8eSAndroid Build Coastguard Worker // indicate a change in device connection status 115*ec779b8eSAndroid Build Coastguard Worker virtual status_t setDeviceConnectionState(audio_policy_dev_state_t state, 116*ec779b8eSAndroid Build Coastguard Worker const android::media::audio::common::AudioPort& port, 117*ec779b8eSAndroid Build Coastguard Worker audio_format_t encodedFormat) = 0; 118*ec779b8eSAndroid Build Coastguard Worker // retrieve a device connection status 119*ec779b8eSAndroid Build Coastguard Worker virtual audio_policy_dev_state_t getDeviceConnectionState(audio_devices_t device, 120*ec779b8eSAndroid Build Coastguard Worker const char *device_address) = 0; 121*ec779b8eSAndroid Build Coastguard Worker // indicate a change in device configuration 122*ec779b8eSAndroid Build Coastguard Worker virtual status_t handleDeviceConfigChange(audio_devices_t device, 123*ec779b8eSAndroid Build Coastguard Worker const char *device_address, 124*ec779b8eSAndroid Build Coastguard Worker const char *device_name, 125*ec779b8eSAndroid Build Coastguard Worker audio_format_t encodedFormat) = 0; 126*ec779b8eSAndroid Build Coastguard Worker // indicate a change in phone state. Valid phones states are defined by audio_mode_t 127*ec779b8eSAndroid Build Coastguard Worker virtual void setPhoneState(audio_mode_t state) = 0; 128*ec779b8eSAndroid Build Coastguard Worker // force using a specific device category for the specified usage 129*ec779b8eSAndroid Build Coastguard Worker virtual void setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config) = 0; 130*ec779b8eSAndroid Build Coastguard Worker // retrieve current device category forced for a given usage 131*ec779b8eSAndroid Build Coastguard Worker virtual audio_policy_forced_cfg_t getForceUse(audio_policy_force_use_t usage) = 0; 132*ec779b8eSAndroid Build Coastguard Worker // set a system property (e.g. camera sound always audible) 133*ec779b8eSAndroid Build Coastguard Worker virtual void setSystemProperty(const char* property, const char* value) = 0; 134*ec779b8eSAndroid Build Coastguard Worker // check proper initialization 135*ec779b8eSAndroid Build Coastguard Worker virtual status_t initCheck() = 0; 136*ec779b8eSAndroid Build Coastguard Worker 137*ec779b8eSAndroid Build Coastguard Worker // 138*ec779b8eSAndroid Build Coastguard Worker // Audio routing query functions 139*ec779b8eSAndroid Build Coastguard Worker // 140*ec779b8eSAndroid Build Coastguard Worker 141*ec779b8eSAndroid Build Coastguard Worker // request an output appropriate for playback of the supplied stream type and parameters 142*ec779b8eSAndroid Build Coastguard Worker virtual audio_io_handle_t getOutput(audio_stream_type_t stream) = 0; 143*ec779b8eSAndroid Build Coastguard Worker virtual status_t getOutputForAttr(const audio_attributes_t *attr, 144*ec779b8eSAndroid Build Coastguard Worker audio_io_handle_t *output, 145*ec779b8eSAndroid Build Coastguard Worker audio_session_t session, 146*ec779b8eSAndroid Build Coastguard Worker audio_stream_type_t *stream, 147*ec779b8eSAndroid Build Coastguard Worker const AttributionSourceState& attributionSource, 148*ec779b8eSAndroid Build Coastguard Worker audio_config_t *config, 149*ec779b8eSAndroid Build Coastguard Worker audio_output_flags_t *flags, 150*ec779b8eSAndroid Build Coastguard Worker DeviceIdVector *selectedDeviceIds, 151*ec779b8eSAndroid Build Coastguard Worker audio_port_handle_t *portId, 152*ec779b8eSAndroid Build Coastguard Worker std::vector<audio_io_handle_t> *secondaryOutputs, 153*ec779b8eSAndroid Build Coastguard Worker output_type_t *outputType, 154*ec779b8eSAndroid Build Coastguard Worker bool *isSpatialized, 155*ec779b8eSAndroid Build Coastguard Worker bool *isBitPerfect, 156*ec779b8eSAndroid Build Coastguard Worker float *volume, 157*ec779b8eSAndroid Build Coastguard Worker bool *muted) = 0; 158*ec779b8eSAndroid Build Coastguard Worker // indicates to the audio policy manager that the output starts being used by corresponding 159*ec779b8eSAndroid Build Coastguard Worker // stream. 160*ec779b8eSAndroid Build Coastguard Worker virtual status_t startOutput(audio_port_handle_t portId) = 0; 161*ec779b8eSAndroid Build Coastguard Worker // indicates to the audio policy manager that the output stops being used by corresponding 162*ec779b8eSAndroid Build Coastguard Worker // stream. 163*ec779b8eSAndroid Build Coastguard Worker virtual status_t stopOutput(audio_port_handle_t portId) = 0; 164*ec779b8eSAndroid Build Coastguard Worker // releases the output, return true if the output descriptor is reopened. 165*ec779b8eSAndroid Build Coastguard Worker virtual bool releaseOutput(audio_port_handle_t portId) = 0; 166*ec779b8eSAndroid Build Coastguard Worker 167*ec779b8eSAndroid Build Coastguard Worker // Request an input appropriate for record from the supplied device with supplied parameters. 168*ec779b8eSAndroid Build Coastguard Worker // attr -- attributes for the requested record 169*ec779b8eSAndroid Build Coastguard Worker // requestedInput -- input only for MMAP mode where an input is re-used, otherwise output param 170*ec779b8eSAndroid Build Coastguard Worker // requestedDeviceId, config, flags -- additional params for matching 171*ec779b8eSAndroid Build Coastguard Worker // riid, session, attributionSource -- params which encapsulate client info to associate with 172*ec779b8eSAndroid Build Coastguard Worker // this input 173*ec779b8eSAndroid Build Coastguard Worker // 174*ec779b8eSAndroid Build Coastguard Worker // On most errors, return a Status describing the error in the error object. 175*ec779b8eSAndroid Build Coastguard Worker // However, in cases where an appropriate device cannot be found for a config, the error side of 176*ec779b8eSAndroid Build Coastguard Worker // the unexpected will contain a suggested config. 177*ec779b8eSAndroid Build Coastguard Worker virtual base::expected<media::GetInputForAttrResponse, 178*ec779b8eSAndroid Build Coastguard Worker std::variant<binder::Status, media::audio::common::AudioConfigBase>> 179*ec779b8eSAndroid Build Coastguard Worker getInputForAttr(audio_attributes_t attributes, 180*ec779b8eSAndroid Build Coastguard Worker audio_io_handle_t requestedInput, 181*ec779b8eSAndroid Build Coastguard Worker audio_port_handle_t requestedDeviceId, 182*ec779b8eSAndroid Build Coastguard Worker audio_config_base_t config, 183*ec779b8eSAndroid Build Coastguard Worker audio_input_flags_t flags, 184*ec779b8eSAndroid Build Coastguard Worker audio_unique_id_t riid, 185*ec779b8eSAndroid Build Coastguard Worker audio_session_t session, 186*ec779b8eSAndroid Build Coastguard Worker const AttributionSourceState& attributionSource) = 0; 187*ec779b8eSAndroid Build Coastguard Worker // indicates to the audio policy manager that the input starts being used. 188*ec779b8eSAndroid Build Coastguard Worker virtual status_t startInput(audio_port_handle_t portId) = 0; 189*ec779b8eSAndroid Build Coastguard Worker // indicates to the audio policy manager that the input stops being used. 190*ec779b8eSAndroid Build Coastguard Worker virtual status_t stopInput(audio_port_handle_t portId) = 0; 191*ec779b8eSAndroid Build Coastguard Worker // releases the input. 192*ec779b8eSAndroid Build Coastguard Worker virtual void releaseInput(audio_port_handle_t portId) = 0; 193*ec779b8eSAndroid Build Coastguard Worker 194*ec779b8eSAndroid Build Coastguard Worker // 195*ec779b8eSAndroid Build Coastguard Worker // volume control functions 196*ec779b8eSAndroid Build Coastguard Worker // 197*ec779b8eSAndroid Build Coastguard Worker 198*ec779b8eSAndroid Build Coastguard Worker // notifies the audio policy manager that the absolute volume mode is enabled/disabled on 199*ec779b8eSAndroid Build Coastguard Worker // the passed device. Also specifies the stream that is controlling the absolute volume. 200*ec779b8eSAndroid Build Coastguard Worker virtual status_t setDeviceAbsoluteVolumeEnabled(audio_devices_t device, 201*ec779b8eSAndroid Build Coastguard Worker const char *address, 202*ec779b8eSAndroid Build Coastguard Worker bool enabled, 203*ec779b8eSAndroid Build Coastguard Worker audio_stream_type_t streamToDriveAbs) = 0; 204*ec779b8eSAndroid Build Coastguard Worker // initialises stream volume conversion parameters by specifying volume index range. 205*ec779b8eSAndroid Build Coastguard Worker virtual void initStreamVolume(audio_stream_type_t stream, 206*ec779b8eSAndroid Build Coastguard Worker int indexMin, 207*ec779b8eSAndroid Build Coastguard Worker int indexMax) = 0; 208*ec779b8eSAndroid Build Coastguard Worker 209*ec779b8eSAndroid Build Coastguard Worker // sets the new stream volume at a level corresponding to the supplied index for the 210*ec779b8eSAndroid Build Coastguard Worker // supplied device. By convention, specifying AUDIO_DEVICE_OUT_DEFAULT_FOR_VOLUME means 211*ec779b8eSAndroid Build Coastguard Worker // setting volume for all devices 212*ec779b8eSAndroid Build Coastguard Worker virtual status_t setStreamVolumeIndex(audio_stream_type_t stream, 213*ec779b8eSAndroid Build Coastguard Worker int index, 214*ec779b8eSAndroid Build Coastguard Worker bool muted, 215*ec779b8eSAndroid Build Coastguard Worker audio_devices_t device) = 0; 216*ec779b8eSAndroid Build Coastguard Worker 217*ec779b8eSAndroid Build Coastguard Worker // retrieve current volume index for the specified stream and the 218*ec779b8eSAndroid Build Coastguard Worker // specified device. By convention, specifying AUDIO_DEVICE_OUT_DEFAULT_FOR_VOLUME means 219*ec779b8eSAndroid Build Coastguard Worker // querying the volume of the active device. 220*ec779b8eSAndroid Build Coastguard Worker virtual status_t getStreamVolumeIndex(audio_stream_type_t stream, 221*ec779b8eSAndroid Build Coastguard Worker int *index, 222*ec779b8eSAndroid Build Coastguard Worker audio_devices_t device) = 0; 223*ec779b8eSAndroid Build Coastguard Worker 224*ec779b8eSAndroid Build Coastguard Worker virtual status_t setVolumeIndexForAttributes(const audio_attributes_t &attr, 225*ec779b8eSAndroid Build Coastguard Worker int index, 226*ec779b8eSAndroid Build Coastguard Worker bool muted, 227*ec779b8eSAndroid Build Coastguard Worker audio_devices_t device) = 0; 228*ec779b8eSAndroid Build Coastguard Worker virtual status_t getVolumeIndexForAttributes(const audio_attributes_t &attr, 229*ec779b8eSAndroid Build Coastguard Worker int &index, 230*ec779b8eSAndroid Build Coastguard Worker audio_devices_t device) = 0; 231*ec779b8eSAndroid Build Coastguard Worker 232*ec779b8eSAndroid Build Coastguard Worker virtual status_t getMaxVolumeIndexForAttributes(const audio_attributes_t &attr, 233*ec779b8eSAndroid Build Coastguard Worker int &index) = 0; 234*ec779b8eSAndroid Build Coastguard Worker 235*ec779b8eSAndroid Build Coastguard Worker virtual status_t getMinVolumeIndexForAttributes(const audio_attributes_t &attr, 236*ec779b8eSAndroid Build Coastguard Worker int &index) = 0; 237*ec779b8eSAndroid Build Coastguard Worker 238*ec779b8eSAndroid Build Coastguard Worker // return the strategy corresponding to a given stream type 239*ec779b8eSAndroid Build Coastguard Worker virtual product_strategy_t getStrategyForStream(audio_stream_type_t stream) = 0; 240*ec779b8eSAndroid Build Coastguard Worker 241*ec779b8eSAndroid Build Coastguard Worker // retrieves the list of enabled output devices for the given audio attributes 242*ec779b8eSAndroid Build Coastguard Worker virtual status_t getDevicesForAttributes(const audio_attributes_t &attr, 243*ec779b8eSAndroid Build Coastguard Worker AudioDeviceTypeAddrVector *devices, 244*ec779b8eSAndroid Build Coastguard Worker bool forVolume) = 0; 245*ec779b8eSAndroid Build Coastguard Worker 246*ec779b8eSAndroid Build Coastguard Worker // Audio effect management 247*ec779b8eSAndroid Build Coastguard Worker virtual audio_io_handle_t getOutputForEffect(const effect_descriptor_t *desc) = 0; 248*ec779b8eSAndroid Build Coastguard Worker virtual status_t registerEffect(const effect_descriptor_t *desc, 249*ec779b8eSAndroid Build Coastguard Worker audio_io_handle_t io, 250*ec779b8eSAndroid Build Coastguard Worker product_strategy_t strategy, 251*ec779b8eSAndroid Build Coastguard Worker int session, 252*ec779b8eSAndroid Build Coastguard Worker int id) = 0; 253*ec779b8eSAndroid Build Coastguard Worker virtual status_t unregisterEffect(int id) = 0; 254*ec779b8eSAndroid Build Coastguard Worker virtual status_t setEffectEnabled(int id, bool enabled) = 0; 255*ec779b8eSAndroid Build Coastguard Worker virtual status_t moveEffectsToIo(const std::vector<int>& ids, audio_io_handle_t io) = 0; 256*ec779b8eSAndroid Build Coastguard Worker 257*ec779b8eSAndroid Build Coastguard Worker virtual bool isStreamActive(audio_stream_type_t stream, uint32_t inPastMs = 0) const = 0; 258*ec779b8eSAndroid Build Coastguard Worker virtual bool isStreamActiveRemotely(audio_stream_type_t stream, 259*ec779b8eSAndroid Build Coastguard Worker uint32_t inPastMs = 0) const = 0; 260*ec779b8eSAndroid Build Coastguard Worker virtual bool isSourceActive(audio_source_t source) const = 0; 261*ec779b8eSAndroid Build Coastguard Worker 262*ec779b8eSAndroid Build Coastguard Worker //dump state 263*ec779b8eSAndroid Build Coastguard Worker virtual status_t dump(int fd) = 0; 264*ec779b8eSAndroid Build Coastguard Worker 265*ec779b8eSAndroid Build Coastguard Worker virtual status_t setAllowedCapturePolicy(uid_t uid, audio_flags_mask_t flags) = 0; 266*ec779b8eSAndroid Build Coastguard Worker virtual audio_offload_mode_t getOffloadSupport(const audio_offload_info_t& offloadInfo) = 0; 267*ec779b8eSAndroid Build Coastguard Worker virtual bool isDirectOutputSupported(const audio_config_base_t& config, 268*ec779b8eSAndroid Build Coastguard Worker const audio_attributes_t& attributes) = 0; 269*ec779b8eSAndroid Build Coastguard Worker 270*ec779b8eSAndroid Build Coastguard Worker virtual status_t listAudioPorts(audio_port_role_t role, 271*ec779b8eSAndroid Build Coastguard Worker audio_port_type_t type, 272*ec779b8eSAndroid Build Coastguard Worker unsigned int *num_ports, 273*ec779b8eSAndroid Build Coastguard Worker struct audio_port_v7 *ports, 274*ec779b8eSAndroid Build Coastguard Worker unsigned int *generation) = 0; 275*ec779b8eSAndroid Build Coastguard Worker virtual status_t listDeclaredDevicePorts(media::AudioPortRole role, 276*ec779b8eSAndroid Build Coastguard Worker std::vector<media::AudioPortFw>* result) = 0; 277*ec779b8eSAndroid Build Coastguard Worker virtual status_t getAudioPort(struct audio_port_v7 *port) = 0; 278*ec779b8eSAndroid Build Coastguard Worker virtual status_t createAudioPatch(const struct audio_patch *patch, 279*ec779b8eSAndroid Build Coastguard Worker audio_patch_handle_t *handle, 280*ec779b8eSAndroid Build Coastguard Worker uid_t uid) = 0; 281*ec779b8eSAndroid Build Coastguard Worker virtual status_t releaseAudioPatch(audio_patch_handle_t handle, 282*ec779b8eSAndroid Build Coastguard Worker uid_t uid) = 0; 283*ec779b8eSAndroid Build Coastguard Worker virtual status_t listAudioPatches(unsigned int *num_patches, 284*ec779b8eSAndroid Build Coastguard Worker struct audio_patch *patches, 285*ec779b8eSAndroid Build Coastguard Worker unsigned int *generation) = 0; 286*ec779b8eSAndroid Build Coastguard Worker virtual status_t setAudioPortConfig(const struct audio_port_config *config) = 0; 287*ec779b8eSAndroid Build Coastguard Worker virtual void releaseResourcesForUid(uid_t uid) = 0; 288*ec779b8eSAndroid Build Coastguard Worker 289*ec779b8eSAndroid Build Coastguard Worker virtual status_t acquireSoundTriggerSession(audio_session_t *session, 290*ec779b8eSAndroid Build Coastguard Worker audio_io_handle_t *ioHandle, 291*ec779b8eSAndroid Build Coastguard Worker audio_devices_t *device) = 0; 292*ec779b8eSAndroid Build Coastguard Worker 293*ec779b8eSAndroid Build Coastguard Worker virtual status_t releaseSoundTriggerSession(audio_session_t session) = 0; 294*ec779b8eSAndroid Build Coastguard Worker 295*ec779b8eSAndroid Build Coastguard Worker virtual status_t registerPolicyMixes(const Vector<AudioMix>& mixes) = 0; 296*ec779b8eSAndroid Build Coastguard Worker virtual status_t unregisterPolicyMixes(Vector<AudioMix> mixes) = 0; 297*ec779b8eSAndroid Build Coastguard Worker virtual status_t getRegisteredPolicyMixes(std::vector<AudioMix>& mixes) = 0; 298*ec779b8eSAndroid Build Coastguard Worker 299*ec779b8eSAndroid Build Coastguard Worker virtual status_t updatePolicyMix( 300*ec779b8eSAndroid Build Coastguard Worker const AudioMix& mix, 301*ec779b8eSAndroid Build Coastguard Worker const std::vector<AudioMixMatchCriterion>& updatedCriteria) = 0; 302*ec779b8eSAndroid Build Coastguard Worker 303*ec779b8eSAndroid Build Coastguard Worker virtual status_t setUidDeviceAffinities(uid_t uid, const AudioDeviceTypeAddrVector& devices) 304*ec779b8eSAndroid Build Coastguard Worker = 0; 305*ec779b8eSAndroid Build Coastguard Worker virtual status_t removeUidDeviceAffinities(uid_t uid) = 0; 306*ec779b8eSAndroid Build Coastguard Worker 307*ec779b8eSAndroid Build Coastguard Worker virtual status_t setUserIdDeviceAffinities(int userId, 308*ec779b8eSAndroid Build Coastguard Worker const AudioDeviceTypeAddrVector& devices) = 0; 309*ec779b8eSAndroid Build Coastguard Worker virtual status_t removeUserIdDeviceAffinities(int userId) = 0; 310*ec779b8eSAndroid Build Coastguard Worker 311*ec779b8eSAndroid Build Coastguard Worker virtual status_t startAudioSource(const struct audio_port_config *source, 312*ec779b8eSAndroid Build Coastguard Worker const audio_attributes_t *attributes, 313*ec779b8eSAndroid Build Coastguard Worker audio_port_handle_t *portId, 314*ec779b8eSAndroid Build Coastguard Worker uid_t uid) = 0; 315*ec779b8eSAndroid Build Coastguard Worker virtual status_t stopAudioSource(audio_port_handle_t portId) = 0; 316*ec779b8eSAndroid Build Coastguard Worker 317*ec779b8eSAndroid Build Coastguard Worker virtual status_t setMasterMono(bool mono) = 0; 318*ec779b8eSAndroid Build Coastguard Worker virtual status_t getMasterMono(bool *mono) = 0; 319*ec779b8eSAndroid Build Coastguard Worker 320*ec779b8eSAndroid Build Coastguard Worker virtual float getStreamVolumeDB( 321*ec779b8eSAndroid Build Coastguard Worker audio_stream_type_t stream, int index, audio_devices_t device) = 0; 322*ec779b8eSAndroid Build Coastguard Worker 323*ec779b8eSAndroid Build Coastguard Worker virtual status_t getSurroundFormats(unsigned int *numSurroundFormats, 324*ec779b8eSAndroid Build Coastguard Worker audio_format_t *surroundFormats, 325*ec779b8eSAndroid Build Coastguard Worker bool *surroundFormatsEnabled) = 0; 326*ec779b8eSAndroid Build Coastguard Worker 327*ec779b8eSAndroid Build Coastguard Worker virtual status_t getReportedSurroundFormats(unsigned int *numSurroundFormats, 328*ec779b8eSAndroid Build Coastguard Worker audio_format_t *surroundFormats) = 0; 329*ec779b8eSAndroid Build Coastguard Worker 330*ec779b8eSAndroid Build Coastguard Worker virtual status_t setSurroundFormatEnabled(audio_format_t audioFormat, bool enabled) = 0; 331*ec779b8eSAndroid Build Coastguard Worker 332*ec779b8eSAndroid Build Coastguard Worker virtual bool isHapticPlaybackSupported() = 0; 333*ec779b8eSAndroid Build Coastguard Worker 334*ec779b8eSAndroid Build Coastguard Worker virtual bool isUltrasoundSupported() = 0; 335*ec779b8eSAndroid Build Coastguard Worker 336*ec779b8eSAndroid Build Coastguard Worker virtual bool isHotwordStreamSupported(bool lookbackAudio) = 0; 337*ec779b8eSAndroid Build Coastguard Worker 338*ec779b8eSAndroid Build Coastguard Worker virtual status_t getHwOffloadFormatsSupportedForBluetoothMedia( 339*ec779b8eSAndroid Build Coastguard Worker audio_devices_t device, std::vector<audio_format_t> *formats) = 0; 340*ec779b8eSAndroid Build Coastguard Worker 341*ec779b8eSAndroid Build Coastguard Worker virtual void setAppState(audio_port_handle_t portId, app_state_t state) = 0; 342*ec779b8eSAndroid Build Coastguard Worker 343*ec779b8eSAndroid Build Coastguard Worker virtual status_t listAudioProductStrategies(AudioProductStrategyVector &strategies) = 0; 344*ec779b8eSAndroid Build Coastguard Worker 345*ec779b8eSAndroid Build Coastguard Worker virtual status_t getProductStrategyFromAudioAttributes( 346*ec779b8eSAndroid Build Coastguard Worker const audio_attributes_t &aa, product_strategy_t &productStrategy, 347*ec779b8eSAndroid Build Coastguard Worker bool fallbackOnDefault) = 0; 348*ec779b8eSAndroid Build Coastguard Worker 349*ec779b8eSAndroid Build Coastguard Worker virtual status_t listAudioVolumeGroups(AudioVolumeGroupVector &groups) = 0; 350*ec779b8eSAndroid Build Coastguard Worker 351*ec779b8eSAndroid Build Coastguard Worker virtual status_t getVolumeGroupFromAudioAttributes( 352*ec779b8eSAndroid Build Coastguard Worker const audio_attributes_t &aa, volume_group_t &volumeGroup, bool fallbackOnDefault) = 0; 353*ec779b8eSAndroid Build Coastguard Worker 354*ec779b8eSAndroid Build Coastguard Worker virtual bool isCallScreenModeSupported() = 0; 355*ec779b8eSAndroid Build Coastguard Worker 356*ec779b8eSAndroid Build Coastguard Worker virtual status_t setDevicesRoleForStrategy(product_strategy_t strategy, 357*ec779b8eSAndroid Build Coastguard Worker device_role_t role, 358*ec779b8eSAndroid Build Coastguard Worker const AudioDeviceTypeAddrVector &devices) = 0; 359*ec779b8eSAndroid Build Coastguard Worker 360*ec779b8eSAndroid Build Coastguard Worker virtual status_t removeDevicesRoleForStrategy(product_strategy_t strategy, 361*ec779b8eSAndroid Build Coastguard Worker device_role_t role, 362*ec779b8eSAndroid Build Coastguard Worker const AudioDeviceTypeAddrVector &devices) = 0; 363*ec779b8eSAndroid Build Coastguard Worker 364*ec779b8eSAndroid Build Coastguard Worker virtual status_t clearDevicesRoleForStrategy(product_strategy_t strategy, 365*ec779b8eSAndroid Build Coastguard Worker device_role_t role) = 0; 366*ec779b8eSAndroid Build Coastguard Worker 367*ec779b8eSAndroid Build Coastguard Worker virtual status_t getDevicesForRoleAndStrategy(product_strategy_t strategy, 368*ec779b8eSAndroid Build Coastguard Worker device_role_t role, 369*ec779b8eSAndroid Build Coastguard Worker AudioDeviceTypeAddrVector &devices) = 0; 370*ec779b8eSAndroid Build Coastguard Worker 371*ec779b8eSAndroid Build Coastguard Worker virtual status_t setDevicesRoleForCapturePreset(audio_source_t audioSource, 372*ec779b8eSAndroid Build Coastguard Worker device_role_t role, 373*ec779b8eSAndroid Build Coastguard Worker const AudioDeviceTypeAddrVector &devices) = 0; 374*ec779b8eSAndroid Build Coastguard Worker 375*ec779b8eSAndroid Build Coastguard Worker virtual status_t addDevicesRoleForCapturePreset(audio_source_t audioSource, 376*ec779b8eSAndroid Build Coastguard Worker device_role_t role, 377*ec779b8eSAndroid Build Coastguard Worker const AudioDeviceTypeAddrVector &devices) = 0; 378*ec779b8eSAndroid Build Coastguard Worker 379*ec779b8eSAndroid Build Coastguard Worker virtual status_t removeDevicesRoleForCapturePreset( 380*ec779b8eSAndroid Build Coastguard Worker audio_source_t audioSource, device_role_t role, 381*ec779b8eSAndroid Build Coastguard Worker const AudioDeviceTypeAddrVector& devices) = 0; 382*ec779b8eSAndroid Build Coastguard Worker 383*ec779b8eSAndroid Build Coastguard Worker virtual status_t clearDevicesRoleForCapturePreset(audio_source_t audioSource, 384*ec779b8eSAndroid Build Coastguard Worker device_role_t role) = 0; 385*ec779b8eSAndroid Build Coastguard Worker 386*ec779b8eSAndroid Build Coastguard Worker virtual status_t getDevicesForRoleAndCapturePreset(audio_source_t audioSource, 387*ec779b8eSAndroid Build Coastguard Worker device_role_t role, 388*ec779b8eSAndroid Build Coastguard Worker AudioDeviceTypeAddrVector &devices) = 0; 389*ec779b8eSAndroid Build Coastguard Worker 390*ec779b8eSAndroid Build Coastguard Worker /** 391*ec779b8eSAndroid Build Coastguard Worker * Queries if some kind of spatialization will be performed if the audio playback context 392*ec779b8eSAndroid Build Coastguard Worker * described by the provided arguments is present. 393*ec779b8eSAndroid Build Coastguard Worker * The context is made of: 394*ec779b8eSAndroid Build Coastguard Worker * - The audio attributes describing the playback use case. 395*ec779b8eSAndroid Build Coastguard Worker * - The audio configuration describing the audio format, channels, sampling rate ... 396*ec779b8eSAndroid Build Coastguard Worker * - The devices describing the sink audio device selected for playback. 397*ec779b8eSAndroid Build Coastguard Worker * All arguments are optional and only the specified arguments are used to match against 398*ec779b8eSAndroid Build Coastguard Worker * supported criteria. For instance, supplying no argument will tell if spatialization is 399*ec779b8eSAndroid Build Coastguard Worker * supported or not in general. 400*ec779b8eSAndroid Build Coastguard Worker * @param attr audio attributes describing the playback use case 401*ec779b8eSAndroid Build Coastguard Worker * @param config audio configuration describing the audio format, channels, sampling rate... 402*ec779b8eSAndroid Build Coastguard Worker * @param devices the sink audio device selected for playback 403*ec779b8eSAndroid Build Coastguard Worker * @return true if spatialization is enabled for this context, 404*ec779b8eSAndroid Build Coastguard Worker * false otherwise 405*ec779b8eSAndroid Build Coastguard Worker */ 406*ec779b8eSAndroid Build Coastguard Worker virtual bool canBeSpatialized(const audio_attributes_t *attr, 407*ec779b8eSAndroid Build Coastguard Worker const audio_config_t *config, 408*ec779b8eSAndroid Build Coastguard Worker const AudioDeviceTypeAddrVector &devices) const = 0; 409*ec779b8eSAndroid Build Coastguard Worker 410*ec779b8eSAndroid Build Coastguard Worker /** 411*ec779b8eSAndroid Build Coastguard Worker * Opens a specialized spatializer output if supported by the platform. 412*ec779b8eSAndroid Build Coastguard Worker * If several spatializer output profiles exist, the one supporting the sink device 413*ec779b8eSAndroid Build Coastguard Worker * corresponding to the provided audio attributes will be selected. 414*ec779b8eSAndroid Build Coastguard Worker * Only one spatializer output stream can be opened at a time and an error is returned 415*ec779b8eSAndroid Build Coastguard Worker * if one already exists. 416*ec779b8eSAndroid Build Coastguard Worker * @param config audio format, channel mask and sampling rate to be used as the mixer 417*ec779b8eSAndroid Build Coastguard Worker * configuration for the spatializer mixer created. 418*ec779b8eSAndroid Build Coastguard Worker * @param attr audio attributes describing the playback use case that will drive the 419*ec779b8eSAndroid Build Coastguard Worker * sink device selection 420*ec779b8eSAndroid Build Coastguard Worker * @param output the IO handle of the output opened 421*ec779b8eSAndroid Build Coastguard Worker * @return NO_ERROR if an output was opened, INVALID_OPERATION or BAD_VALUE otherwise 422*ec779b8eSAndroid Build Coastguard Worker */ 423*ec779b8eSAndroid Build Coastguard Worker virtual status_t getSpatializerOutput(const audio_config_base_t *config, 424*ec779b8eSAndroid Build Coastguard Worker const audio_attributes_t *attr, 425*ec779b8eSAndroid Build Coastguard Worker audio_io_handle_t *output) = 0; 426*ec779b8eSAndroid Build Coastguard Worker 427*ec779b8eSAndroid Build Coastguard Worker /** 428*ec779b8eSAndroid Build Coastguard Worker * Closes a previously opened specialized spatializer output. 429*ec779b8eSAndroid Build Coastguard Worker * @param output the IO handle of the output to close. 430*ec779b8eSAndroid Build Coastguard Worker * @return NO_ERROR if an output was closed, INVALID_OPERATION or BAD_VALUE otherwise 431*ec779b8eSAndroid Build Coastguard Worker */ 432*ec779b8eSAndroid Build Coastguard Worker virtual status_t releaseSpatializerOutput(audio_io_handle_t output) = 0; 433*ec779b8eSAndroid Build Coastguard Worker 434*ec779b8eSAndroid Build Coastguard Worker /** 435*ec779b8eSAndroid Build Coastguard Worker * Query how the direct playback is currently supported on the device. 436*ec779b8eSAndroid Build Coastguard Worker * @param attr audio attributes describing the playback use case 437*ec779b8eSAndroid Build Coastguard Worker * @param config audio configuration for the playback 438*ec779b8eSAndroid Build Coastguard Worker * @param directMode out: a set of flags describing how the direct playback is currently 439*ec779b8eSAndroid Build Coastguard Worker * supported on the device 440*ec779b8eSAndroid Build Coastguard Worker * @return NO_ERROR in case of success, DEAD_OBJECT, NO_INIT, BAD_VALUE, PERMISSION_DENIED 441*ec779b8eSAndroid Build Coastguard Worker * in case of error. 442*ec779b8eSAndroid Build Coastguard Worker */ 443*ec779b8eSAndroid Build Coastguard Worker virtual audio_direct_mode_t getDirectPlaybackSupport(const audio_attributes_t *attr, 444*ec779b8eSAndroid Build Coastguard Worker const audio_config_t *config) = 0; 445*ec779b8eSAndroid Build Coastguard Worker 446*ec779b8eSAndroid Build Coastguard Worker // retrieves the list of available direct audio profiles for the given audio attributes 447*ec779b8eSAndroid Build Coastguard Worker virtual status_t getDirectProfilesForAttributes(const audio_attributes_t* attr, 448*ec779b8eSAndroid Build Coastguard Worker AudioProfileVector& audioProfiles) = 0; 449*ec779b8eSAndroid Build Coastguard Worker 450*ec779b8eSAndroid Build Coastguard Worker virtual status_t getSupportedMixerAttributes( 451*ec779b8eSAndroid Build Coastguard Worker audio_port_handle_t portId, std::vector<audio_mixer_attributes_t>& mixerAttrs) = 0; 452*ec779b8eSAndroid Build Coastguard Worker virtual status_t setPreferredMixerAttributes( 453*ec779b8eSAndroid Build Coastguard Worker const audio_attributes_t* attr, 454*ec779b8eSAndroid Build Coastguard Worker audio_port_handle_t portId, 455*ec779b8eSAndroid Build Coastguard Worker uid_t uid, 456*ec779b8eSAndroid Build Coastguard Worker const audio_mixer_attributes_t* mixerAttributes) = 0; 457*ec779b8eSAndroid Build Coastguard Worker virtual status_t getPreferredMixerAttributes(const audio_attributes_t* attr, 458*ec779b8eSAndroid Build Coastguard Worker audio_port_handle_t portId, 459*ec779b8eSAndroid Build Coastguard Worker audio_mixer_attributes_t* mixerAttributes) = 0; 460*ec779b8eSAndroid Build Coastguard Worker virtual status_t clearPreferredMixerAttributes(const audio_attributes_t* attr, 461*ec779b8eSAndroid Build Coastguard Worker audio_port_handle_t portId, 462*ec779b8eSAndroid Build Coastguard Worker uid_t uid) = 0; 463*ec779b8eSAndroid Build Coastguard Worker 464*ec779b8eSAndroid Build Coastguard Worker virtual status_t getMmapPolicyInfos( 465*ec779b8eSAndroid Build Coastguard Worker media::audio::common::AudioMMapPolicyType policyType, 466*ec779b8eSAndroid Build Coastguard Worker std::vector<media::audio::common::AudioMMapPolicyInfo> *policyInfos) = 0; 467*ec779b8eSAndroid Build Coastguard Worker virtual status_t getMmapPolicyForDevice( 468*ec779b8eSAndroid Build Coastguard Worker media::audio::common::AudioMMapPolicyType policyType, 469*ec779b8eSAndroid Build Coastguard Worker media::audio::common::AudioMMapPolicyInfo *policyInfo) = 0; 470*ec779b8eSAndroid Build Coastguard Worker }; 471*ec779b8eSAndroid Build Coastguard Worker 472*ec779b8eSAndroid Build Coastguard Worker // Audio Policy client Interface 473*ec779b8eSAndroid Build Coastguard Worker class AudioPolicyClientInterface 474*ec779b8eSAndroid Build Coastguard Worker { 475*ec779b8eSAndroid Build Coastguard Worker public: ~AudioPolicyClientInterface()476*ec779b8eSAndroid Build Coastguard Worker virtual ~AudioPolicyClientInterface() {} 477*ec779b8eSAndroid Build Coastguard Worker 478*ec779b8eSAndroid Build Coastguard Worker virtual status_t getAudioPolicyConfig(media::AudioPolicyConfig *config) = 0; 479*ec779b8eSAndroid Build Coastguard Worker 480*ec779b8eSAndroid Build Coastguard Worker // 481*ec779b8eSAndroid Build Coastguard Worker // Audio HW module functions 482*ec779b8eSAndroid Build Coastguard Worker // 483*ec779b8eSAndroid Build Coastguard Worker 484*ec779b8eSAndroid Build Coastguard Worker // loads a HW module. 485*ec779b8eSAndroid Build Coastguard Worker virtual audio_module_handle_t loadHwModule(const char *name) = 0; 486*ec779b8eSAndroid Build Coastguard Worker 487*ec779b8eSAndroid Build Coastguard Worker // 488*ec779b8eSAndroid Build Coastguard Worker // Audio output Control functions 489*ec779b8eSAndroid Build Coastguard Worker // 490*ec779b8eSAndroid Build Coastguard Worker 491*ec779b8eSAndroid Build Coastguard Worker // opens an audio output with the requested parameters. The parameter values can indicate to 492*ec779b8eSAndroid Build Coastguard Worker // use the default values in case the audio policy manager has no specific requirements for the 493*ec779b8eSAndroid Build Coastguard Worker // output being opened. 494*ec779b8eSAndroid Build Coastguard Worker // When the function returns, the parameter values reflect the actual values used by the audio 495*ec779b8eSAndroid Build Coastguard Worker // hardware output stream. 496*ec779b8eSAndroid Build Coastguard Worker // The audio policy manager can check if the proposed parameters are suitable or not and act 497*ec779b8eSAndroid Build Coastguard Worker // accordingly. 498*ec779b8eSAndroid Build Coastguard Worker virtual status_t openOutput(audio_module_handle_t module, 499*ec779b8eSAndroid Build Coastguard Worker audio_io_handle_t *output, 500*ec779b8eSAndroid Build Coastguard Worker audio_config_t *halConfig, 501*ec779b8eSAndroid Build Coastguard Worker audio_config_base_t *mixerConfig, 502*ec779b8eSAndroid Build Coastguard Worker const sp<DeviceDescriptorBase>& device, 503*ec779b8eSAndroid Build Coastguard Worker uint32_t *latencyMs, 504*ec779b8eSAndroid Build Coastguard Worker audio_output_flags_t *flags, 505*ec779b8eSAndroid Build Coastguard Worker audio_attributes_t audioAttributes) = 0; 506*ec779b8eSAndroid Build Coastguard Worker // creates a special output that is duplicated to the two outputs passed as arguments. 507*ec779b8eSAndroid Build Coastguard Worker // The duplication is performed by a special mixer thread in the AudioFlinger. 508*ec779b8eSAndroid Build Coastguard Worker virtual audio_io_handle_t openDuplicateOutput(audio_io_handle_t output1, 509*ec779b8eSAndroid Build Coastguard Worker audio_io_handle_t output2) = 0; 510*ec779b8eSAndroid Build Coastguard Worker // closes the output stream 511*ec779b8eSAndroid Build Coastguard Worker virtual status_t closeOutput(audio_io_handle_t output) = 0; 512*ec779b8eSAndroid Build Coastguard Worker // suspends the output. When an output is suspended, the corresponding audio hardware output 513*ec779b8eSAndroid Build Coastguard Worker // stream is placed in standby and the AudioTracks attached to the mixer thread are still 514*ec779b8eSAndroid Build Coastguard Worker // processed but the output mix is discarded. 515*ec779b8eSAndroid Build Coastguard Worker virtual status_t suspendOutput(audio_io_handle_t output) = 0; 516*ec779b8eSAndroid Build Coastguard Worker // restores a suspended output. 517*ec779b8eSAndroid Build Coastguard Worker virtual status_t restoreOutput(audio_io_handle_t output) = 0; 518*ec779b8eSAndroid Build Coastguard Worker 519*ec779b8eSAndroid Build Coastguard Worker // 520*ec779b8eSAndroid Build Coastguard Worker // Audio input Control functions 521*ec779b8eSAndroid Build Coastguard Worker // 522*ec779b8eSAndroid Build Coastguard Worker 523*ec779b8eSAndroid Build Coastguard Worker // opens an audio input 524*ec779b8eSAndroid Build Coastguard Worker virtual status_t openInput(audio_module_handle_t module, 525*ec779b8eSAndroid Build Coastguard Worker audio_io_handle_t *input, 526*ec779b8eSAndroid Build Coastguard Worker audio_config_t *config, 527*ec779b8eSAndroid Build Coastguard Worker audio_devices_t *device, 528*ec779b8eSAndroid Build Coastguard Worker const String8& address, 529*ec779b8eSAndroid Build Coastguard Worker audio_source_t source, 530*ec779b8eSAndroid Build Coastguard Worker audio_input_flags_t flags) = 0; 531*ec779b8eSAndroid Build Coastguard Worker // closes an audio input 532*ec779b8eSAndroid Build Coastguard Worker virtual status_t closeInput(audio_io_handle_t input) = 0; 533*ec779b8eSAndroid Build Coastguard Worker // 534*ec779b8eSAndroid Build Coastguard Worker // misc control functions 535*ec779b8eSAndroid Build Coastguard Worker // 536*ec779b8eSAndroid Build Coastguard Worker 537*ec779b8eSAndroid Build Coastguard Worker // set a stream volume for a particular output. For the same user setting, a given stream type 538*ec779b8eSAndroid Build Coastguard Worker // can have different volumes 539*ec779b8eSAndroid Build Coastguard Worker // for each output (destination device) it is attached to. 540*ec779b8eSAndroid Build Coastguard Worker virtual status_t setStreamVolume(audio_stream_type_t stream, float volume, bool muted, 541*ec779b8eSAndroid Build Coastguard Worker audio_io_handle_t output, int delayMs = 0) = 0; 542*ec779b8eSAndroid Build Coastguard Worker /** 543*ec779b8eSAndroid Build Coastguard Worker * Set volume for given AudioTrack port ids for a particular output. 544*ec779b8eSAndroid Build Coastguard Worker * For the same user setting, a given volume group and associated output port id 545*ec779b8eSAndroid Build Coastguard Worker * can have different volumes for each output (destination device) it is attached to. 546*ec779b8eSAndroid Build Coastguard Worker * @param ports to consider 547*ec779b8eSAndroid Build Coastguard Worker * @param volume to apply 548*ec779b8eSAndroid Build Coastguard Worker * @param muted to apply 549*ec779b8eSAndroid Build Coastguard Worker * @param output to consider 550*ec779b8eSAndroid Build Coastguard Worker * @param delayMs to use 551*ec779b8eSAndroid Build Coastguard Worker * @return NO_ERROR if successful 552*ec779b8eSAndroid Build Coastguard Worker */ 553*ec779b8eSAndroid Build Coastguard Worker virtual status_t setPortsVolume(const std::vector<audio_port_handle_t>& ports, float volume, 554*ec779b8eSAndroid Build Coastguard Worker bool muted, audio_io_handle_t output, int delayMs = 0) = 0; 555*ec779b8eSAndroid Build Coastguard Worker 556*ec779b8eSAndroid Build Coastguard Worker // function enabling to send proprietary informations directly from audio policy manager to 557*ec779b8eSAndroid Build Coastguard Worker // audio hardware interface. 558*ec779b8eSAndroid Build Coastguard Worker virtual void setParameters(audio_io_handle_t ioHandle, const String8& keyValuePairs, 559*ec779b8eSAndroid Build Coastguard Worker int delayMs = 0) = 0; 560*ec779b8eSAndroid Build Coastguard Worker // function enabling to receive proprietary informations directly from audio hardware interface 561*ec779b8eSAndroid Build Coastguard Worker // to audio policy manager. 562*ec779b8eSAndroid Build Coastguard Worker virtual String8 getParameters(audio_io_handle_t ioHandle, const String8& keys) = 0; 563*ec779b8eSAndroid Build Coastguard Worker 564*ec779b8eSAndroid Build Coastguard Worker // set down link audio volume. 565*ec779b8eSAndroid Build Coastguard Worker virtual status_t setVoiceVolume(float volume, int delayMs = 0) = 0; 566*ec779b8eSAndroid Build Coastguard Worker 567*ec779b8eSAndroid Build Coastguard Worker // move effect to the specified output 568*ec779b8eSAndroid Build Coastguard Worker virtual status_t moveEffects(audio_session_t session, 569*ec779b8eSAndroid Build Coastguard Worker audio_io_handle_t srcOutput, 570*ec779b8eSAndroid Build Coastguard Worker audio_io_handle_t dstOutput) = 0; 571*ec779b8eSAndroid Build Coastguard Worker 572*ec779b8eSAndroid Build Coastguard Worker virtual void setEffectSuspended(int effectId, 573*ec779b8eSAndroid Build Coastguard Worker audio_session_t sessionId, 574*ec779b8eSAndroid Build Coastguard Worker bool suspended) = 0; 575*ec779b8eSAndroid Build Coastguard Worker 576*ec779b8eSAndroid Build Coastguard Worker /* Create a patch between several source and sink ports */ 577*ec779b8eSAndroid Build Coastguard Worker virtual status_t createAudioPatch(const struct audio_patch *patch, 578*ec779b8eSAndroid Build Coastguard Worker audio_patch_handle_t *handle, 579*ec779b8eSAndroid Build Coastguard Worker int delayMs) = 0; 580*ec779b8eSAndroid Build Coastguard Worker 581*ec779b8eSAndroid Build Coastguard Worker /* Release a patch */ 582*ec779b8eSAndroid Build Coastguard Worker virtual status_t releaseAudioPatch(audio_patch_handle_t handle, 583*ec779b8eSAndroid Build Coastguard Worker int delayMs) = 0; 584*ec779b8eSAndroid Build Coastguard Worker 585*ec779b8eSAndroid Build Coastguard Worker /* Set audio port configuration */ 586*ec779b8eSAndroid Build Coastguard Worker virtual status_t setAudioPortConfig(const struct audio_port_config *config, int delayMs) = 0; 587*ec779b8eSAndroid Build Coastguard Worker 588*ec779b8eSAndroid Build Coastguard Worker virtual void onAudioPortListUpdate() = 0; 589*ec779b8eSAndroid Build Coastguard Worker 590*ec779b8eSAndroid Build Coastguard Worker virtual void onAudioPatchListUpdate() = 0; 591*ec779b8eSAndroid Build Coastguard Worker 592*ec779b8eSAndroid Build Coastguard Worker virtual void onAudioVolumeGroupChanged(volume_group_t group, int flags) = 0; 593*ec779b8eSAndroid Build Coastguard Worker 594*ec779b8eSAndroid Build Coastguard Worker virtual audio_unique_id_t newAudioUniqueId(audio_unique_id_use_t use) = 0; 595*ec779b8eSAndroid Build Coastguard Worker 596*ec779b8eSAndroid Build Coastguard Worker virtual void onDynamicPolicyMixStateUpdate(String8 regId, int32_t state) = 0; 597*ec779b8eSAndroid Build Coastguard Worker 598*ec779b8eSAndroid Build Coastguard Worker virtual void onRecordingConfigurationUpdate(int event, 599*ec779b8eSAndroid Build Coastguard Worker const record_client_info_t *clientInfo, 600*ec779b8eSAndroid Build Coastguard Worker const audio_config_base_t *clientConfig, 601*ec779b8eSAndroid Build Coastguard Worker std::vector<effect_descriptor_t> clientEffects, 602*ec779b8eSAndroid Build Coastguard Worker const audio_config_base_t *deviceConfig, 603*ec779b8eSAndroid Build Coastguard Worker std::vector<effect_descriptor_t> effects, 604*ec779b8eSAndroid Build Coastguard Worker audio_patch_handle_t patchHandle, 605*ec779b8eSAndroid Build Coastguard Worker audio_source_t source) = 0; 606*ec779b8eSAndroid Build Coastguard Worker 607*ec779b8eSAndroid Build Coastguard Worker virtual void onRoutingUpdated() = 0; 608*ec779b8eSAndroid Build Coastguard Worker 609*ec779b8eSAndroid Build Coastguard Worker // Used to notify AudioService that an error was encountering when reading 610*ec779b8eSAndroid Build Coastguard Worker // the volume ranges, and that they should be re-initialized 611*ec779b8eSAndroid Build Coastguard Worker virtual void onVolumeRangeInitRequest() = 0; 612*ec779b8eSAndroid Build Coastguard Worker 613*ec779b8eSAndroid Build Coastguard Worker // Used to notify the sound trigger module that an audio capture is about to 614*ec779b8eSAndroid Build Coastguard Worker // take place. This should typically result in any active recognition 615*ec779b8eSAndroid Build Coastguard Worker // sessions to be preempted on modules that do not support sound trigger 616*ec779b8eSAndroid Build Coastguard Worker // recognition concurrently with audio capture. 617*ec779b8eSAndroid Build Coastguard Worker virtual void setSoundTriggerCaptureState(bool active) = 0; 618*ec779b8eSAndroid Build Coastguard Worker 619*ec779b8eSAndroid Build Coastguard Worker virtual status_t getAudioPort(struct audio_port_v7 *port) = 0; 620*ec779b8eSAndroid Build Coastguard Worker 621*ec779b8eSAndroid Build Coastguard Worker virtual status_t updateSecondaryOutputs( 622*ec779b8eSAndroid Build Coastguard Worker const TrackSecondaryOutputsMap& trackSecondaryOutputs) = 0; 623*ec779b8eSAndroid Build Coastguard Worker 624*ec779b8eSAndroid Build Coastguard Worker virtual status_t setDeviceConnectedState(const struct audio_port_v7 *port, 625*ec779b8eSAndroid Build Coastguard Worker media::DeviceConnectedState state) = 0; 626*ec779b8eSAndroid Build Coastguard Worker 627*ec779b8eSAndroid Build Coastguard Worker virtual status_t invalidateTracks(const std::vector<audio_port_handle_t>& portIds) = 0; 628*ec779b8eSAndroid Build Coastguard Worker 629*ec779b8eSAndroid Build Coastguard Worker // Get the attributes of the mix port when connecting to the given device port. 630*ec779b8eSAndroid Build Coastguard Worker virtual status_t getAudioMixPort(const struct audio_port_v7 *devicePort, 631*ec779b8eSAndroid Build Coastguard Worker struct audio_port_v7 *mixPort) = 0; 632*ec779b8eSAndroid Build Coastguard Worker 633*ec779b8eSAndroid Build Coastguard Worker virtual status_t setTracksInternalMute( 634*ec779b8eSAndroid Build Coastguard Worker const std::vector<media::TrackInternalMuteInfo>& tracksInternalMute) = 0; 635*ec779b8eSAndroid Build Coastguard Worker 636*ec779b8eSAndroid Build Coastguard Worker virtual status_t getMmapPolicyInfos( 637*ec779b8eSAndroid Build Coastguard Worker media::audio::common::AudioMMapPolicyType policyType, 638*ec779b8eSAndroid Build Coastguard Worker std::vector<media::audio::common::AudioMMapPolicyInfo> *policyInfos) = 0; 639*ec779b8eSAndroid Build Coastguard Worker 640*ec779b8eSAndroid Build Coastguard Worker enum class MixType { 641*ec779b8eSAndroid Build Coastguard Worker // e.g. audio recording from a microphone 642*ec779b8eSAndroid Build Coastguard Worker NONE = 0, 643*ec779b8eSAndroid Build Coastguard Worker // used for "remote submix" legacy mode (no DAP), capture of the media to play it remotely 644*ec779b8eSAndroid Build Coastguard Worker CAPTURE, 645*ec779b8eSAndroid Build Coastguard Worker // used for platform audio rerouting, where mixes are handled by external and dynamically 646*ec779b8eSAndroid Build Coastguard Worker // installed policies which reroute audio mixes 647*ec779b8eSAndroid Build Coastguard Worker EXT_POLICY_REROUTE, 648*ec779b8eSAndroid Build Coastguard Worker // used for playback capture with a MediaProjection 649*ec779b8eSAndroid Build Coastguard Worker PUBLIC_CAPTURE_PLAYBACK, 650*ec779b8eSAndroid Build Coastguard Worker // used for capture from telephony RX path 651*ec779b8eSAndroid Build Coastguard Worker TELEPHONY_RX_CAPTURE, 652*ec779b8eSAndroid Build Coastguard Worker }; 653*ec779b8eSAndroid Build Coastguard Worker 654*ec779b8eSAndroid Build Coastguard Worker struct PermissionReqs { 655*ec779b8eSAndroid Build Coastguard Worker media::audio::common::AudioSource source; 656*ec779b8eSAndroid Build Coastguard Worker MixType mixType; 657*ec779b8eSAndroid Build Coastguard Worker uint32_t virtualDeviceId; 658*ec779b8eSAndroid Build Coastguard Worker // Flag based validation 659*ec779b8eSAndroid Build Coastguard Worker bool isHotword; 660*ec779b8eSAndroid Build Coastguard Worker bool isCallRedir; 661*ec779b8eSAndroid Build Coastguard Worker }; 662*ec779b8eSAndroid Build Coastguard Worker 663*ec779b8eSAndroid Build Coastguard Worker virtual error::BinderResult<bool> checkPermissionForInput(const AttributionSourceState& attr, 664*ec779b8eSAndroid Build Coastguard Worker const PermissionReqs& req) = 0; 665*ec779b8eSAndroid Build Coastguard Worker }; 666*ec779b8eSAndroid Build Coastguard Worker 667*ec779b8eSAndroid Build Coastguard Worker // These are the signatures of createAudioPolicyManager/destroyAudioPolicyManager 668*ec779b8eSAndroid Build Coastguard Worker // methods respectively, expected by AudioPolicyService, needs to be exposed by 669*ec779b8eSAndroid Build Coastguard Worker // libaudiopolicymanagercustom. 670*ec779b8eSAndroid Build Coastguard Worker using CreateAudioPolicyManagerInstance = 671*ec779b8eSAndroid Build Coastguard Worker AudioPolicyInterface* (*)(AudioPolicyClientInterface*); 672*ec779b8eSAndroid Build Coastguard Worker using DestroyAudioPolicyManagerInstance = void (*)(AudioPolicyInterface*); 673*ec779b8eSAndroid Build Coastguard Worker 674*ec779b8eSAndroid Build Coastguard Worker } // namespace android 675*ec779b8eSAndroid Build Coastguard Worker 676*ec779b8eSAndroid Build Coastguard Worker #endif // ANDROID_AUDIOPOLICY_INTERFACE_H 677