1 /* 2 * Copyright (C) 2020 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 package android.media; 18 19 import android.media.AudioPatch; 20 import android.media.AudioPort; 21 import android.media.AudioPortConfig; 22 import android.media.AudioUniqueIdUse; 23 import android.media.AudioVibratorInfo; 24 import android.media.CreateEffectRequest; 25 import android.media.CreateEffectResponse; 26 import android.media.CreateRecordRequest; 27 import android.media.CreateRecordResponse; 28 import android.media.CreateTrackRequest; 29 import android.media.CreateTrackResponse; 30 import android.media.OpenInputRequest; 31 import android.media.OpenInputResponse; 32 import android.media.OpenOutputRequest; 33 import android.media.OpenOutputResponse; 34 import android.media.EffectDescriptor; 35 import android.media.IAudioFlingerClient; 36 import android.media.IAudioRecord; 37 import android.media.IAudioTrack; 38 import android.media.LatencyMode; 39 import android.media.MicrophoneInfoData; 40 import android.media.RenderPosition; 41 import android.media.TrackSecondaryOutputInfo; 42 import android.media.audio.common.AudioChannelLayout; 43 import android.media.audio.common.AudioFormatDescription; 44 import android.media.audio.common.AudioMMapPolicyInfo; 45 import android.media.audio.common.AudioMMapPolicyType; 46 import android.media.audio.common.AudioMode; 47 import android.media.audio.common.AudioStreamType; 48 import android.media.audio.common.AudioUuid; 49 50 /** 51 * {@hide} 52 */ 53 interface IAudioFlingerService { 54 /** 55 * Creates an audio track and registers it with AudioFlinger, or null if the track cannot be 56 * created. 57 */ createTrack(in CreateTrackRequest request)58 CreateTrackResponse createTrack(in CreateTrackRequest request); 59 createRecord(in CreateRecordRequest request)60 CreateRecordResponse createRecord(in CreateRecordRequest request); 61 62 // FIXME Surprisingly, format/latency don't work for input handles 63 64 /** 65 * Queries the audio hardware state. This state never changes, and therefore can be cached. 66 */ sampleRate(int ioHandle)67 int sampleRate(int /* audio_io_handle_t */ ioHandle); 68 format(int output)69 AudioFormatDescription format(int /* audio_io_handle_t */ output); 70 frameCount(int ioHandle)71 long frameCount(int /* audio_io_handle_t */ ioHandle); 72 73 /** 74 * Return the estimated latency in milliseconds. 75 */ latency(int output)76 int latency(int /* audio_io_handle_t */ output); 77 78 /* 79 * Sets/gets the audio hardware state. This will probably be used by 80 * the preference panel, mostly. 81 */ setMasterVolume(float value)82 void setMasterVolume(float value); setMasterMute(boolean muted)83 void setMasterMute(boolean muted); 84 masterVolume()85 float masterVolume(); masterMute()86 boolean masterMute(); 87 setMasterBalance(float balance)88 void setMasterBalance(float balance); getMasterBalance()89 float getMasterBalance(); 90 91 /* 92 * Set/gets stream type state. This will probably be used by 93 * the preference panel, mostly. 94 */ setStreamVolume(AudioStreamType stream, float value, int output)95 void setStreamVolume(AudioStreamType stream, float value, int /* audio_io_handle_t */ output); setStreamMute(AudioStreamType stream, boolean muted)96 void setStreamMute(AudioStreamType stream, boolean muted); streamVolume(AudioStreamType stream, int output)97 float streamVolume(AudioStreamType stream, int /* audio_io_handle_t */ output); streamMute(AudioStreamType stream)98 boolean streamMute(AudioStreamType stream); 99 100 // set audio mode. setMode(AudioMode mode)101 void setMode(AudioMode mode); 102 103 // mic mute/state setMicMute(boolean state)104 void setMicMute(boolean state); getMicMute()105 boolean getMicMute(); setRecordSilenced(int portId, boolean silenced)106 void setRecordSilenced(int /* audio_port_handle_t */ portId, 107 boolean silenced); 108 setParameters(int ioHandle, @utf8InCpp String keyValuePairs)109 void setParameters(int /* audio_io_handle_t */ ioHandle, 110 @utf8InCpp String keyValuePairs); getParameters(int ioHandle, @utf8InCpp String keys)111 @utf8InCpp String getParameters(int /* audio_io_handle_t */ ioHandle, 112 @utf8InCpp String keys); 113 114 // Register an object to receive audio input/output change and track notifications. 115 // For a given calling pid, AudioFlinger disregards any registrations after the first. 116 // Thus the IAudioFlingerClient must be a singleton per process. registerClient(IAudioFlingerClient client)117 void registerClient(IAudioFlingerClient client); 118 119 // Retrieve the audio recording buffer size in bytes. 120 // FIXME This API assumes a route, and so should be deprecated. getInputBufferSize(int sampleRate, in AudioFormatDescription format, in AudioChannelLayout channelMask)121 long getInputBufferSize(int sampleRate, 122 in AudioFormatDescription format, 123 in AudioChannelLayout channelMask); 124 openOutput(in OpenOutputRequest request)125 OpenOutputResponse openOutput(in OpenOutputRequest request); openDuplicateOutput(int output1, int output2)126 int /* audio_io_handle_t */ openDuplicateOutput(int /* audio_io_handle_t */ output1, 127 int /* audio_io_handle_t */ output2); closeOutput(int output)128 void closeOutput(int /* audio_io_handle_t */ output); suspendOutput(int output)129 void suspendOutput(int /* audio_io_handle_t */ output); restoreOutput(int output)130 void restoreOutput(int /* audio_io_handle_t */ output); 131 openInput(in OpenInputRequest request)132 OpenInputResponse openInput(in OpenInputRequest request); closeInput(int input)133 void closeInput(int /* audio_io_handle_t */ input); 134 invalidateStream(AudioStreamType stream)135 void invalidateStream(AudioStreamType stream); 136 setVoiceVolume(float volume)137 void setVoiceVolume(float volume); 138 getRenderPosition(int output)139 RenderPosition getRenderPosition(int /* audio_io_handle_t */ output); 140 getInputFramesLost(int ioHandle)141 int getInputFramesLost(int /* audio_io_handle_t */ ioHandle); 142 newAudioUniqueId(AudioUniqueIdUse use)143 int /* audio_unique_id_t */ newAudioUniqueId(AudioUniqueIdUse use); 144 acquireAudioSessionId(int audioSession, int pid, int uid)145 void acquireAudioSessionId(int /* audio_session_t */ audioSession, 146 int /* pid_t */ pid, 147 int /* uid_t */ uid); releaseAudioSessionId(int audioSession, int pid)148 void releaseAudioSessionId(int /* audio_session_t */ audioSession, 149 int /* pid_t */ pid); 150 queryNumberEffects()151 int queryNumberEffects(); 152 queryEffect(int index)153 EffectDescriptor queryEffect(int index); 154 155 /** preferredTypeFlag is interpreted as a uint32_t with the "effect flag" format. */ getEffectDescriptor(in AudioUuid effectUUID, in AudioUuid typeUUID, int preferredTypeFlag)156 EffectDescriptor getEffectDescriptor(in AudioUuid effectUUID, 157 in AudioUuid typeUUID, 158 int preferredTypeFlag); 159 createEffect(in CreateEffectRequest request)160 CreateEffectResponse createEffect(in CreateEffectRequest request); 161 moveEffects(int session, int srcOutput, int dstOutput)162 void moveEffects(int /* audio_session_t */ session, 163 int /* audio_io_handle_t */ srcOutput, 164 int /* audio_io_handle_t */ dstOutput); 165 setEffectSuspended(int effectId, int sessionId, boolean suspended)166 void setEffectSuspended(int effectId, 167 int /* audio_session_t */ sessionId, 168 boolean suspended); 169 loadHwModule(@tf8InCpp String name)170 int /* audio_module_handle_t */ loadHwModule(@utf8InCpp String name); 171 172 // helpers for android.media.AudioManager.getProperty(), see description there for meaning 173 // FIXME move these APIs to AudioPolicy to permit a more accurate implementation 174 // that looks on primary device for a stream with fast flag, primary flag, or first one. getPrimaryOutputSamplingRate()175 int getPrimaryOutputSamplingRate(); getPrimaryOutputFrameCount()176 long getPrimaryOutputFrameCount(); 177 178 // Intended for AudioService to inform AudioFlinger of device's low RAM attribute, 179 // and should be called at most once. For a definition of what "low RAM" means, see 180 // android.app.ActivityManager.isLowRamDevice(). The totalMemory parameter 181 // is obtained from android.app.ActivityManager.MemoryInfo.totalMem. setLowRamDevice(boolean isLowRamDevice, long totalMemory)182 void setLowRamDevice(boolean isLowRamDevice, long totalMemory); 183 184 /* Get attributes for a given audio port */ getAudioPort(in AudioPort port)185 AudioPort getAudioPort(in AudioPort port); 186 187 /* Create an audio patch between several source and sink ports */ createAudioPatch(in AudioPatch patch)188 int /* audio_patch_handle_t */ createAudioPatch(in AudioPatch patch); 189 190 /* Release an audio patch */ releaseAudioPatch(int handle)191 void releaseAudioPatch(int /* audio_patch_handle_t */ handle); 192 193 /* List existing audio patches */ listAudioPatches(int maxCount)194 AudioPatch[] listAudioPatches(int maxCount); 195 /* Set audio port configuration */ setAudioPortConfig(in AudioPortConfig config)196 void setAudioPortConfig(in AudioPortConfig config); 197 198 /* Get the HW synchronization source used for an audio session */ getAudioHwSyncForSession(int sessionId)199 int /* audio_hw_sync_t */ getAudioHwSyncForSession(int /* audio_session_t */ sessionId); 200 201 /* Indicate JAVA services are ready (scheduling, power management ...) */ systemReady()202 oneway void systemReady(); 203 204 /* Indicate audio policy service is ready */ audioPolicyReady()205 oneway void audioPolicyReady(); 206 207 // Returns the number of frames per audio HAL buffer. frameCountHAL(int ioHandle)208 long frameCountHAL(int /* audio_io_handle_t */ ioHandle); 209 210 /* List available microphones and their characteristics */ getMicrophones()211 MicrophoneInfoData[] getMicrophones(); 212 setAudioHalPids(in int[] pids)213 void setAudioHalPids(in int[] /* pid_t[] */ pids); 214 215 // Set vibrators' information. 216 // The value will be used to initialize HapticGenerator. setVibratorInfos(in AudioVibratorInfo[] vibratorInfos)217 void setVibratorInfos(in AudioVibratorInfo[] vibratorInfos); 218 219 // Update secondary outputs. 220 // This usually happens when there is a dynamic policy registered. updateSecondaryOutputs( in TrackSecondaryOutputInfo[] trackSecondaryOutputInfos)221 void updateSecondaryOutputs( 222 in TrackSecondaryOutputInfo[] trackSecondaryOutputInfos); 223 getMmapPolicyInfos(AudioMMapPolicyType policyType)224 AudioMMapPolicyInfo[] getMmapPolicyInfos(AudioMMapPolicyType policyType); 225 getAAudioMixerBurstCount()226 int getAAudioMixerBurstCount(); 227 getAAudioHardwareBurstMinUsec()228 int getAAudioHardwareBurstMinUsec(); 229 setDeviceConnectedState(in AudioPort devicePort, boolean connected)230 void setDeviceConnectedState(in AudioPort devicePort, boolean connected); 231 232 /** 233 * Requests a given latency mode (See LatencyMode.aidl) on an output stream. 234 * This can be used when some use case on a given mixer/stream can only be enabled 235 * if a specific latency mode is selected on the audio path below the HAL. 236 * For instance spatial audio with head tracking. 237 * output is the I/O handle of the output stream for which the request is made. 238 * latencyMode is the requested latency mode. 239 */ setRequestedLatencyMode(int output, LatencyMode latencyMode)240 void setRequestedLatencyMode(int output, LatencyMode latencyMode); 241 242 /** 243 * Queries the list of latency modes (See LatencyMode.aidl) supported by an output stream. 244 * output is the I/O handle of the output stream to which the query applies. 245 * returns the list of supported latency modes. 246 */ getSupportedLatencyModes(int output)247 LatencyMode[] getSupportedLatencyModes(int output); 248 249 // When adding a new method, please review and update 250 // IAudioFlinger.h AudioFlingerServerAdapter::Delegate::TransactionCode 251 // AudioFlinger.cpp AudioFlinger::onTransactWrapper() 252 // AudioFlinger.cpp IAUDIOFLINGER_BINDER_METHOD_MACRO_LIST 253 } 254