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