• 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.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