xref: /aosp_15_r20/frameworks/av/media/libaudioclient/aidl/android/media/IAudioFlingerService.aidl (revision ec779b8e0859a360c3d303172224686826e6e0e1)
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.AudioPatchFw;
20 import android.media.AudioPolicyConfig;
21 import android.media.AudioPortFw;
22 import android.media.AudioPortConfigFw;
23 import android.media.AudioUniqueIdUse;
24 import android.media.AudioVibratorInfo;
25 import android.media.CreateEffectRequest;
26 import android.media.CreateEffectResponse;
27 import android.media.CreateRecordRequest;
28 import android.media.CreateRecordResponse;
29 import android.media.CreateTrackRequest;
30 import android.media.CreateTrackResponse;
31 import android.media.DeviceConnectedState;
32 import android.media.OpenInputRequest;
33 import android.media.OpenInputResponse;
34 import android.media.OpenOutputRequest;
35 import android.media.OpenOutputResponse;
36 import android.media.EffectDescriptor;
37 import android.media.IAudioFlingerClient;
38 import android.media.IAudioRecord;
39 import android.media.IAudioTrack;
40 import android.media.ISoundDose;
41 import android.media.ISoundDoseCallback;
42 import android.media.MicrophoneInfoFw;
43 import android.media.RenderPosition;
44 import android.media.TrackInternalMuteInfo;
45 import android.media.TrackSecondaryOutputInfo;
46 import android.media.audio.common.AudioChannelLayout;
47 import android.media.audio.common.AudioFormatDescription;
48 import android.media.audio.common.AudioLatencyMode;
49 import android.media.audio.common.AudioMMapPolicyInfo;
50 import android.media.audio.common.AudioMMapPolicyType;
51 import android.media.audio.common.AudioMode;
52 import android.media.audio.common.AudioStreamType;
53 import android.media.audio.common.AudioUuid;
54 
55 /**
56  * {@hide}
57  */
58 interface IAudioFlingerService {
59     /**
60      * Creates an audio track and registers it with AudioFlinger, or null if the track cannot be
61      * created.
62      */
createTrack(in CreateTrackRequest request)63     CreateTrackResponse createTrack(in CreateTrackRequest request);
64 
createRecord(in CreateRecordRequest request)65     CreateRecordResponse createRecord(in CreateRecordRequest request);
66 
67     // FIXME Surprisingly, format/latency don't work for input handles
68 
69     /**
70      * Queries the audio hardware state. This state never changes, and therefore can be cached.
71      */
sampleRate(int ioHandle)72     int sampleRate(int /* audio_io_handle_t */ ioHandle);
73 
format(int output)74     AudioFormatDescription format(int /* audio_io_handle_t */ output);
75 
frameCount(int ioHandle)76     long frameCount(int /* audio_io_handle_t */ ioHandle);
77 
78     /**
79      * Return the estimated latency in milliseconds.
80      */
latency(int output)81     int latency(int  /* audio_io_handle_t */ output);
82 
83     /*
84      * Sets/gets the audio hardware state. This will probably be used by
85      * the preference panel, mostly.
86      */
setMasterVolume(float value)87     void setMasterVolume(float value);
setMasterMute(boolean muted)88     void setMasterMute(boolean muted);
89 
masterVolume()90     float masterVolume();
masterMute()91     boolean masterMute();
92 
setMasterBalance(float balance)93     void setMasterBalance(float balance);
getMasterBalance()94     float getMasterBalance();
95 
96     /*
97      * Set stream type state. This will probably be used by
98      * the preference panel, mostly.
99      * This method is deprecated. Please use the setPortsVolume method instead.
100      */
setStreamVolume(AudioStreamType stream, float value, boolean muted, int output)101     void setStreamVolume(AudioStreamType stream, float value, boolean muted,
102             int /* audio_io_handle_t */ output);
setStreamMute(AudioStreamType stream, boolean muted)103     void setStreamMute(AudioStreamType stream, boolean muted);
104 
105     /*
106      * Set AudioTrack port ids volume attribute. This is the new way of controlling volume from
107      * AudioPolicyManager to AudioFlinger.
108      */
setPortsVolume(in int[] portIds, float volume, boolean muted, int output)109     void setPortsVolume(in int[] /* audio_port_handle_t[] */ portIds, float volume, boolean muted,
110             int /* audio_io_handle_t */ output);
111 
112     // set audio mode.
setMode(AudioMode mode)113     void setMode(AudioMode mode);
114 
115     // mic mute/state
setMicMute(boolean state)116     void setMicMute(boolean state);
getMicMute()117     boolean getMicMute();
setRecordSilenced(int portId, boolean silenced)118     void setRecordSilenced(int /* audio_port_handle_t */ portId,
119                            boolean silenced);
120 
setParameters(int ioHandle, @utf8InCpp String keyValuePairs)121     void setParameters(int /* audio_io_handle_t */ ioHandle,
122                        @utf8InCpp String keyValuePairs);
getParameters(int ioHandle, @utf8InCpp String keys)123     @utf8InCpp String getParameters(int /* audio_io_handle_t */ ioHandle,
124                                     @utf8InCpp String keys);
125 
126     // Register an object to receive audio input/output change and track notifications.
127     // For a given calling pid, AudioFlinger disregards any registrations after the first.
128     // Thus the IAudioFlingerClient must be a singleton per process.
registerClient(IAudioFlingerClient client)129     void registerClient(IAudioFlingerClient client);
130 
131     // Retrieve the audio recording buffer size in bytes.
132     // FIXME This API assumes a route, and so should be deprecated.
getInputBufferSize(int sampleRate, in AudioFormatDescription format, in AudioChannelLayout channelMask)133     long getInputBufferSize(int sampleRate,
134                             in AudioFormatDescription format,
135                             in AudioChannelLayout channelMask);
136 
openOutput(in OpenOutputRequest request)137     OpenOutputResponse openOutput(in OpenOutputRequest request);
openDuplicateOutput(int output1, int output2)138     int /* audio_io_handle_t */ openDuplicateOutput(int /* audio_io_handle_t */ output1,
139                                                     int /* audio_io_handle_t */ output2);
closeOutput(int output)140     void closeOutput(int /* audio_io_handle_t */ output);
suspendOutput(int output)141     void suspendOutput(int /* audio_io_handle_t */ output);
restoreOutput(int output)142     void restoreOutput(int /* audio_io_handle_t */ output);
143 
openInput(in OpenInputRequest request)144     OpenInputResponse openInput(in OpenInputRequest request);
closeInput(int input)145     void closeInput(int /* audio_io_handle_t */ input);
146 
setVoiceVolume(float volume)147     void setVoiceVolume(float volume);
148 
getRenderPosition(int output)149     RenderPosition getRenderPosition(int /* audio_io_handle_t */ output);
150 
getInputFramesLost(int ioHandle)151     int getInputFramesLost(int /* audio_io_handle_t */ ioHandle);
152 
newAudioUniqueId(AudioUniqueIdUse use)153     int /* audio_unique_id_t */ newAudioUniqueId(AudioUniqueIdUse use);
154 
acquireAudioSessionId(int audioSession, int pid, int uid)155     void acquireAudioSessionId(int /* audio_session_t */ audioSession,
156                                int /* pid_t */ pid,
157                                int /* uid_t */ uid);
releaseAudioSessionId(int audioSession, int pid)158     void releaseAudioSessionId(int /* audio_session_t */ audioSession,
159                                int /* pid_t */ pid);
160 
queryNumberEffects()161     int queryNumberEffects();
162 
queryEffect(int index)163     EffectDescriptor queryEffect(int index);
164 
165     /** preferredTypeFlag is interpreted as a uint32_t with the "effect flag" format. */
getEffectDescriptor(in AudioUuid effectUUID, in AudioUuid typeUUID, int preferredTypeFlag)166     EffectDescriptor getEffectDescriptor(in AudioUuid effectUUID,
167                                          in AudioUuid typeUUID,
168                                          int preferredTypeFlag);
169 
createEffect(in CreateEffectRequest request)170     CreateEffectResponse createEffect(in CreateEffectRequest request);
171 
moveEffects(int session, int srcOutput, int dstOutput)172     void moveEffects(int /* audio_session_t */ session,
173                      int /* audio_io_handle_t */ srcOutput,
174                      int /* audio_io_handle_t */ dstOutput);
175 
setEffectSuspended(int effectId, int sessionId, boolean suspended)176     void setEffectSuspended(int effectId,
177                             int /* audio_session_t */ sessionId,
178                             boolean suspended);
179 
loadHwModule(@tf8InCpp String name)180     int /* audio_module_handle_t */ loadHwModule(@utf8InCpp String name);
181 
182     // helpers for android.media.AudioManager.getProperty(), see description there for meaning
183     // FIXME move these APIs to AudioPolicy to permit a more accurate implementation
184     // that looks on primary device for a stream with fast flag, primary flag, or first one.
getPrimaryOutputSamplingRate()185     int getPrimaryOutputSamplingRate();
getPrimaryOutputFrameCount()186     long getPrimaryOutputFrameCount();
187 
188     // Intended for AudioService to inform AudioFlinger of device's low RAM attribute,
189     // and should be called at most once.  For a definition of what "low RAM" means, see
190     // android.app.ActivityManager.isLowRamDevice().  The totalMemory parameter
191     // is obtained from android.app.ActivityManager.MemoryInfo.totalMem.
setLowRamDevice(boolean isLowRamDevice, long totalMemory)192     void setLowRamDevice(boolean isLowRamDevice, long totalMemory);
193 
194     /* Get attributes for a given audio port */
getAudioPort(in AudioPortFw port)195     AudioPortFw getAudioPort(in AudioPortFw port);
196 
197     /* Create an audio patch between several source and sink ports */
createAudioPatch(in AudioPatchFw patch)198     int /* audio_patch_handle_t */ createAudioPatch(in AudioPatchFw patch);
199 
200     /* Release an audio patch */
releaseAudioPatch(int handle)201     void releaseAudioPatch(int /* audio_patch_handle_t */ handle);
202 
203     /* List existing audio patches */
listAudioPatches(int maxCount)204     AudioPatchFw[] listAudioPatches(int maxCount);
205     /* Set audio port configuration */
setAudioPortConfig(in AudioPortConfigFw config)206     void setAudioPortConfig(in AudioPortConfigFw config);
207 
208     /* Get the HW synchronization source used for an audio session */
getAudioHwSyncForSession(int sessionId)209     int /* audio_hw_sync_t */ getAudioHwSyncForSession(int /* audio_session_t */ sessionId);
210 
211     /* Indicate JAVA services are ready (scheduling, power management ...) */
systemReady()212     oneway void systemReady();
213 
214     /* Indicate audio policy service is ready */
audioPolicyReady()215     oneway void audioPolicyReady();
216 
217     // Returns the number of frames per audio HAL buffer.
frameCountHAL(int ioHandle)218     long frameCountHAL(int /* audio_io_handle_t */ ioHandle);
219 
220     /* List available microphones and their characteristics */
getMicrophones()221     MicrophoneInfoFw[] getMicrophones();
222 
setAudioHalPids(in int[] pids)223     void setAudioHalPids(in int[] /* pid_t[] */ pids);
224 
225     // Set vibrators' information.
226     // The value will be used to initialize HapticGenerator.
setVibratorInfos(in AudioVibratorInfo[] vibratorInfos)227     void setVibratorInfos(in AudioVibratorInfo[] vibratorInfos);
228 
229     // Update secondary outputs.
230     // This usually happens when there is a dynamic policy registered.
updateSecondaryOutputs( in TrackSecondaryOutputInfo[] trackSecondaryOutputInfos)231     void updateSecondaryOutputs(
232             in TrackSecondaryOutputInfo[] trackSecondaryOutputInfos);
233 
getMmapPolicyInfos(AudioMMapPolicyType policyType)234     AudioMMapPolicyInfo[] getMmapPolicyInfos(AudioMMapPolicyType policyType);
235 
getAAudioMixerBurstCount()236     int getAAudioMixerBurstCount();
237 
getAAudioHardwareBurstMinUsec()238     int getAAudioHardwareBurstMinUsec();
239 
setDeviceConnectedState(in AudioPortFw devicePort, DeviceConnectedState state)240     void setDeviceConnectedState(in AudioPortFw devicePort, DeviceConnectedState state);
241 
242     // Used for tests only. Requires AIDL HAL to work.
setSimulateDeviceConnections(boolean enabled)243     void setSimulateDeviceConnections(boolean enabled);
244 
245     /**
246      * Requests a given latency mode (See AudioLatencyMode.aidl) on an output stream.
247      * This can be used when some use case on a given mixer/stream can only be enabled
248      * if a specific latency mode is selected on the audio path below the HAL.
249      * For instance spatial audio with head tracking.
250      * output is the I/O handle of the output stream for which the request is made.
251      * latencyMode is the requested latency mode.
252      */
setRequestedLatencyMode(int output, AudioLatencyMode latencyMode)253      void setRequestedLatencyMode(int output, AudioLatencyMode latencyMode);
254 
255     /**
256      * Queries the list of latency modes (See LatencyMode.aidl) supported by an output stream.
257      * output is the I/O handle of the output stream to which the query applies.
258      * returns the list of supported latency modes.
259      */
getSupportedLatencyModes(int output)260     AudioLatencyMode[] getSupportedLatencyModes(int output);
261 
262     /**
263      * Requests if the implementation supports controlling the latency modes
264      * over the Bluetooth A2DP or LE Audio links. If it does,
265      * setRequestedLatencyMode() and getSupportedLatencyModes() APIs can also be used
266      * for streams routed to Bluetooth and not just for the spatializer output.
267      */
supportsBluetoothVariableLatency()268      boolean supportsBluetoothVariableLatency();
269 
270     /**
271      * Enables or disables the variable Bluetooth latency control mechanism in the
272      * audio framework and the audio HAL. This does not apply to the latency mode control
273      * on the spatializer output as this is a built-in feature.
274      */
setBluetoothVariableLatencyEnabled(boolean enabled)275     void setBluetoothVariableLatencyEnabled(boolean enabled);
276 
277     /**
278      * Indicates if the variable Bluetooth latency control mechanism is enabled or disabled.
279      */
isBluetoothVariableLatencyEnabled()280     boolean isBluetoothVariableLatencyEnabled();
281 
282     /**
283      * Registers the sound dose callback and returns the interface for executing
284      * sound dose methods on the audio server.
285      */
getSoundDoseInterface(in ISoundDoseCallback callback)286     ISoundDose getSoundDoseInterface(in ISoundDoseCallback callback);
287 
288     /**
289      * Invalidate all tracks with given port ids.
290      */
invalidateTracks(in int[] portIds)291     void invalidateTracks(in int[] /* audio_port_handle_t[] */ portIds);
292 
293     /**
294      * Only implemented for AIDL. Provides the APM configuration which
295      * used to be in the XML file.
296      */
getAudioPolicyConfig()297     AudioPolicyConfig getAudioPolicyConfig();
298 
299     /**
300      * Get the attributes of the mix port when connecting to the given device port.
301      */
getAudioMixPort(in AudioPortFw devicePort, in AudioPortFw mixPort)302     AudioPortFw getAudioMixPort(in AudioPortFw devicePort, in AudioPortFw mixPort);
303 
304     /**
305      * Set internal mute for a list of tracks.
306      */
setTracksInternalMute(in TrackInternalMuteInfo[] tracksInternalMute)307     void setTracksInternalMute(in TrackInternalMuteInfo[] tracksInternalMute);
308 
309     /*
310      * Reset Circular references in AudioFlinger service.
311      * Test API
312      */
resetReferencesForTest()313      void resetReferencesForTest();
314 
315     // When adding a new method, please review and update
316     // IAudioFlinger.h AudioFlingerServerAdapter::Delegate::TransactionCode
317     // AudioFlinger.cpp AudioFlinger::onTransactWrapper()
318     // AudioFlinger.cpp IAUDIOFLINGER_BINDER_METHOD_MACRO_LIST
319 }
320