1 /*
2 **
3 ** Copyright 2007, The Android Open Source Project
4 **
5 ** Licensed under the Apache License, Version 2.0 (the "License");
6 ** you may not use this file except in compliance with the License.
7 ** You may obtain a copy of the License at
8 **
9 **     http://www.apache.org/licenses/LICENSE-2.0
10 **
11 ** Unless required by applicable law or agreed to in writing, software
12 ** distributed under the License is distributed on an "AS IS" BASIS,
13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 ** See the License for the specific language governing permissions and
15 ** limitations under the License.
16 */
17 
18 #ifndef ANDROID_AUDIO_FLINGER_H
19 #define ANDROID_AUDIO_FLINGER_H
20 
21 #include "Configuration.h"
22 #include <atomic>
23 #include <mutex>
24 #include <chrono>
25 #include <deque>
26 #include <map>
27 #include <numeric>
28 #include <optional>
29 #include <set>
30 #include <string>
31 #include <vector>
32 #include <stdint.h>
33 #include <sys/types.h>
34 #include <limits.h>
35 
36 #include <android/media/BnAudioTrack.h>
37 #include <android/media/IAudioFlingerClient.h>
38 #include <android/media/IAudioTrackCallback.h>
39 #include <android/os/BnExternalVibrationController.h>
40 #include <android/content/AttributionSourceState.h>
41 
42 
43 #include <android-base/macros.h>
44 #include <cutils/atomic.h>
45 #include <cutils/compiler.h>
46 
47 #include <cutils/properties.h>
48 #include <media/IAudioFlinger.h>
49 #include <media/AudioSystem.h>
50 #include <media/AudioTrack.h>
51 #include <media/MmapStreamInterface.h>
52 #include <media/MmapStreamCallback.h>
53 
54 #include <utils/Errors.h>
55 #include <utils/threads.h>
56 #include <utils/SortedVector.h>
57 #include <utils/TypeHelpers.h>
58 #include <utils/Vector.h>
59 
60 #include <binder/AppOpsManager.h>
61 #include <binder/BinderService.h>
62 #include <binder/IAppOpsCallback.h>
63 #include <binder/MemoryDealer.h>
64 
65 #include <system/audio.h>
66 #include <system/audio_policy.h>
67 
68 #include <media/audiohal/EffectBufferHalInterface.h>
69 #include <media/audiohal/StreamHalInterface.h>
70 #include <media/AudioBufferProvider.h>
71 #include <media/AudioContainers.h>
72 #include <media/AudioDeviceTypeAddr.h>
73 #include <media/AudioMixer.h>
74 #include <media/DeviceDescriptorBase.h>
75 #include <media/ExtendedAudioBufferProvider.h>
76 #include <media/VolumeShaper.h>
77 #include <mediautils/ServiceUtilities.h>
78 #include <mediautils/Synchronization.h>
79 
80 #include <audio_utils/clock.h>
81 #include <audio_utils/FdToString.h>
82 #include <audio_utils/LinearMap.h>
83 #include <audio_utils/SimpleLog.h>
84 #include <audio_utils/TimestampVerifier.h>
85 
86 #include "FastCapture.h"
87 #include "FastMixer.h"
88 #include <media/nbaio/NBAIO.h>
89 #include "AudioWatchdog.h"
90 #include "AudioStreamOut.h"
91 #include "SpdifStreamOut.h"
92 #include "AudioHwDevice.h"
93 #include "NBAIO_Tee.h"
94 #include "ThreadMetrics.h"
95 #include "TrackMetrics.h"
96 
97 #include <android/os/IPowerManager.h>
98 
99 #include <media/nblog/NBLog.h>
100 #include <private/media/AudioEffectShared.h>
101 #include <private/media/AudioTrackShared.h>
102 
103 #include <vibrator/ExternalVibration.h>
104 #include <vibrator/ExternalVibrationUtils.h>
105 
106 #include "android/media/BnAudioRecord.h"
107 #include "android/media/BnEffect.h"
108 
109 namespace android {
110 
111 class AudioMixer;
112 class AudioBuffer;
113 class AudioResampler;
114 class DeviceHalInterface;
115 class DevicesFactoryHalCallback;
116 class DevicesFactoryHalInterface;
117 class EffectsFactoryHalInterface;
118 class FastMixer;
119 class PassthruBufferProvider;
120 class RecordBufferConverter;
121 class ServerProxy;
122 
123 // ----------------------------------------------------------------------------
124 
125 static const nsecs_t kDefaultStandbyTimeInNsecs = seconds(3);
126 
127 #define INCLUDING_FROM_AUDIOFLINGER_H
128 
129 using android::content::AttributionSourceState;
130 
131 class AudioFlinger : public AudioFlingerServerAdapter::Delegate
132 {
133 public:
134     static void instantiate() ANDROID_API;
135 
136     static AttributionSourceState checkAttributionSourcePackage(
137         const AttributionSourceState& attributionSource);
138 
139     status_t dump(int fd, const Vector<String16>& args) override;
140 
141     // IAudioFlinger interface, in binder opcode order
142     status_t createTrack(const media::CreateTrackRequest& input,
143                          media::CreateTrackResponse& output) override;
144 
145     status_t createRecord(const media::CreateRecordRequest& input,
146                           media::CreateRecordResponse& output) override;
147 
148     virtual     uint32_t    sampleRate(audio_io_handle_t ioHandle) const;
149     virtual     audio_format_t format(audio_io_handle_t output) const;
150     virtual     size_t      frameCount(audio_io_handle_t ioHandle) const;
151     virtual     size_t      frameCountHAL(audio_io_handle_t ioHandle) const;
152     virtual     uint32_t    latency(audio_io_handle_t output) const;
153 
154     virtual     status_t    setMasterVolume(float value);
155     virtual     status_t    setMasterMute(bool muted);
156 
157     virtual     float       masterVolume() const;
158     virtual     bool        masterMute() const;
159 
160     // Balance value must be within -1.f (left only) to 1.f (right only) inclusive.
161                 status_t    setMasterBalance(float balance) override;
162                 status_t    getMasterBalance(float *balance) const override;
163 
164     virtual     status_t    setStreamVolume(audio_stream_type_t stream, float value,
165                                             audio_io_handle_t output);
166     virtual     status_t    setStreamMute(audio_stream_type_t stream, bool muted);
167 
168     virtual     float       streamVolume(audio_stream_type_t stream,
169                                          audio_io_handle_t output) const;
170     virtual     bool        streamMute(audio_stream_type_t stream) const;
171 
172     virtual     status_t    setMode(audio_mode_t mode);
173 
174     virtual     status_t    setMicMute(bool state);
175     virtual     bool        getMicMute() const;
176 
177     virtual     void        setRecordSilenced(audio_port_handle_t portId, bool silenced);
178 
179     virtual     status_t    setParameters(audio_io_handle_t ioHandle, const String8& keyValuePairs);
180     virtual     String8     getParameters(audio_io_handle_t ioHandle, const String8& keys) const;
181 
182     virtual     void        registerClient(const sp<media::IAudioFlingerClient>& client);
183 
184     virtual     size_t      getInputBufferSize(uint32_t sampleRate, audio_format_t format,
185                                                audio_channel_mask_t channelMask) const;
186 
187     virtual status_t openOutput(const media::OpenOutputRequest& request,
188                                 media::OpenOutputResponse* response);
189 
190     virtual audio_io_handle_t openDuplicateOutput(audio_io_handle_t output1,
191                                                   audio_io_handle_t output2);
192 
193     virtual status_t closeOutput(audio_io_handle_t output);
194 
195     virtual status_t suspendOutput(audio_io_handle_t output);
196 
197     virtual status_t restoreOutput(audio_io_handle_t output);
198 
199     virtual status_t openInput(const media::OpenInputRequest& request,
200                                media::OpenInputResponse* response);
201 
202     virtual status_t closeInput(audio_io_handle_t input);
203 
204     virtual status_t invalidateStream(audio_stream_type_t stream);
205 
206     virtual status_t setVoiceVolume(float volume);
207 
208     virtual status_t getRenderPosition(uint32_t *halFrames, uint32_t *dspFrames,
209                                        audio_io_handle_t output) const;
210 
211     virtual uint32_t getInputFramesLost(audio_io_handle_t ioHandle) const;
212 
213     // This is the binder API.  For the internal API see nextUniqueId().
214     virtual audio_unique_id_t newAudioUniqueId(audio_unique_id_use_t use);
215 
216     void acquireAudioSessionId(audio_session_t audioSession, pid_t pid, uid_t uid) override;
217 
218     virtual void releaseAudioSessionId(audio_session_t audioSession, pid_t pid);
219 
220     virtual status_t queryNumberEffects(uint32_t *numEffects) const;
221 
222     virtual status_t queryEffect(uint32_t index, effect_descriptor_t *descriptor) const;
223 
224     virtual status_t getEffectDescriptor(const effect_uuid_t *pUuid,
225                                          const effect_uuid_t *pTypeUuid,
226                                          uint32_t preferredTypeFlag,
227                                          effect_descriptor_t *descriptor) const;
228 
229     virtual status_t createEffect(const media::CreateEffectRequest& request,
230                                   media::CreateEffectResponse* response);
231 
232     virtual status_t moveEffects(audio_session_t sessionId, audio_io_handle_t srcOutput,
233                         audio_io_handle_t dstOutput);
234 
235             void setEffectSuspended(int effectId,
236                                     audio_session_t sessionId,
237                                     bool suspended) override;
238 
239     virtual audio_module_handle_t loadHwModule(const char *name);
240 
241     virtual uint32_t getPrimaryOutputSamplingRate();
242     virtual size_t getPrimaryOutputFrameCount();
243 
244     virtual status_t setLowRamDevice(bool isLowRamDevice, int64_t totalMemory) override;
245 
246     /* List available audio ports and their attributes */
247     virtual status_t listAudioPorts(unsigned int *num_ports,
248                                     struct audio_port *ports);
249 
250     /* Get attributes for a given audio port */
251     virtual status_t getAudioPort(struct audio_port_v7 *port);
252 
253     /* Create an audio patch between several source and sink ports */
254     virtual status_t createAudioPatch(const struct audio_patch *patch,
255                                        audio_patch_handle_t *handle);
256 
257     /* Release an audio patch */
258     virtual status_t releaseAudioPatch(audio_patch_handle_t handle);
259 
260     /* List existing audio patches */
261     virtual status_t listAudioPatches(unsigned int *num_patches,
262                                       struct audio_patch *patches);
263 
264     /* Set audio port configuration */
265     virtual status_t setAudioPortConfig(const struct audio_port_config *config);
266 
267     /* Get the HW synchronization source used for an audio session */
268     virtual audio_hw_sync_t getAudioHwSyncForSession(audio_session_t sessionId);
269 
270     /* Indicate JAVA services are ready (scheduling, power management ...) */
271     virtual status_t systemReady();
audioPolicyReady()272     virtual status_t audioPolicyReady() { mAudioPolicyReady.store(true); return NO_ERROR; }
isAudioPolicyReady()273             bool isAudioPolicyReady() const { return mAudioPolicyReady.load(); }
274 
275 
276     virtual status_t getMicrophones(std::vector<media::MicrophoneInfo> *microphones);
277 
278     virtual status_t setAudioHalPids(const std::vector<pid_t>& pids);
279 
280     virtual status_t setVibratorInfos(const std::vector<media::AudioVibratorInfo>& vibratorInfos);
281 
282     virtual status_t updateSecondaryOutputs(
283             const TrackSecondaryOutputsMap& trackSecondaryOutputs);
284 
285     status_t onTransactWrapper(TransactionCode code, const Parcel& data, uint32_t flags,
286         const std::function<status_t()>& delegate) override;
287 
288     // end of IAudioFlinger interface
289 
290     sp<NBLog::Writer>   newWriter_l(size_t size, const char *name);
291     void                unregisterWriter(const sp<NBLog::Writer>& writer);
292     sp<EffectsFactoryHalInterface> getEffectsFactory();
293 
294     status_t openMmapStream(MmapStreamInterface::stream_direction_t direction,
295                             const audio_attributes_t *attr,
296                             audio_config_base_t *config,
297                             const AudioClient& client,
298                             audio_port_handle_t *deviceId,
299                             audio_session_t *sessionId,
300                             const sp<MmapStreamCallback>& callback,
301                             sp<MmapStreamInterface>& interface,
302                             audio_port_handle_t *handle);
303 
304     static int onExternalVibrationStart(const sp<os::ExternalVibration>& externalVibration);
305     static void onExternalVibrationStop(const sp<os::ExternalVibration>& externalVibration);
306 
307     status_t addEffectToHal(audio_port_handle_t deviceId,
308             audio_module_handle_t hwModuleId, sp<EffectHalInterface> effect);
309     status_t removeEffectFromHal(audio_port_handle_t deviceId,
310             audio_module_handle_t hwModuleId, sp<EffectHalInterface> effect);
311 
312     void updateDownStreamPatches_l(const struct audio_patch *patch,
313                                    const std::set<audio_io_handle_t> streams);
314 
315     std::optional<media::AudioVibratorInfo> getDefaultVibratorInfo_l();
316 
317 private:
318     // FIXME The 400 is temporarily too high until a leak of writers in media.log is fixed.
319     static const size_t kLogMemorySize = 400 * 1024;
320     sp<MemoryDealer>    mLogMemoryDealer;   // == 0 when NBLog is disabled
321     // When a log writer is unregistered, it is done lazily so that media.log can continue to see it
322     // for as long as possible.  The memory is only freed when it is needed for another log writer.
323     Vector< sp<NBLog::Writer> > mUnregisteredWriters;
324     Mutex               mUnregisteredWritersLock;
325 
326 public:
327     // Life cycle of gAudioFlinger and AudioFlinger:
328     //
329     // AudioFlinger is created once and survives until audioserver crashes
330     // irrespective of sp<> and wp<> as it is refcounted by ServiceManager and we
331     // don't issue a ServiceManager::tryUnregisterService().
332     //
333     // gAudioFlinger is an atomic pointer set on AudioFlinger::onFirstRef().
334     // After this is set, it is safe to obtain a wp<> or sp<> from it as the
335     // underlying object does not go away.
336     //
337     // Note: For most inner classes, it is acceptable to hold a reference to the outer
338     // AudioFlinger instance as creation requires AudioFlinger to exist in the first place.
339     //
340     // An atomic here ensures underlying writes have completed before setting
341     // the pointer. Access by memory_order_seq_cst.
342     //
343 
344     static inline std::atomic<AudioFlinger *> gAudioFlinger = nullptr;
345 
346     class SyncEvent;
347 
348     typedef void (*sync_event_callback_t)(const wp<SyncEvent>& event) ;
349 
350     class SyncEvent : public RefBase {
351     public:
SyncEvent(AudioSystem::sync_event_t type,audio_session_t triggerSession,audio_session_t listenerSession,sync_event_callback_t callBack,wp<RefBase> cookie)352         SyncEvent(AudioSystem::sync_event_t type,
353                   audio_session_t triggerSession,
354                   audio_session_t listenerSession,
355                   sync_event_callback_t callBack,
356                   wp<RefBase> cookie)
357         : mType(type), mTriggerSession(triggerSession), mListenerSession(listenerSession),
358           mCallback(callBack), mCookie(cookie)
359         {}
360 
~SyncEvent()361         virtual ~SyncEvent() {}
362 
trigger()363         void trigger() {
364             Mutex::Autolock _l(mLock);
365             if (mCallback) mCallback(wp<SyncEvent>(this));
366         }
isCancelled()367         bool isCancelled() const { Mutex::Autolock _l(mLock); return (mCallback == NULL); }
cancel()368         void cancel() { Mutex::Autolock _l(mLock); mCallback = NULL; }
type()369         AudioSystem::sync_event_t type() const { return mType; }
triggerSession()370         audio_session_t triggerSession() const { return mTriggerSession; }
listenerSession()371         audio_session_t listenerSession() const { return mListenerSession; }
cookie()372         wp<RefBase> cookie() const { return mCookie; }
373 
374     private:
375           const AudioSystem::sync_event_t mType;
376           const audio_session_t mTriggerSession;
377           const audio_session_t mListenerSession;
378           sync_event_callback_t mCallback;
379           const wp<RefBase> mCookie;
380           mutable Mutex mLock;
381     };
382 
383     sp<SyncEvent> createSyncEvent(AudioSystem::sync_event_t type,
384                                         audio_session_t triggerSession,
385                                         audio_session_t listenerSession,
386                                         sync_event_callback_t callBack,
387                                         const wp<RefBase>& cookie);
388 
btNrecIsOff()389     bool        btNrecIsOff() const { return mBtNrecIsOff.load(); }
390 
391 
392 private:
393 
getMode()394                audio_mode_t getMode() const { return mMode; }
395 
396                             AudioFlinger() ANDROID_API;
397     virtual                 ~AudioFlinger();
398 
399     // call in any IAudioFlinger method that accesses mPrimaryHardwareDev
initCheck()400     status_t                initCheck() const { return mPrimaryHardwareDev == NULL ?
401                                                         NO_INIT : NO_ERROR; }
402 
403     // RefBase
404     virtual     void        onFirstRef();
405 
406     AudioHwDevice*          findSuitableHwDev_l(audio_module_handle_t module,
407                                                 audio_devices_t deviceType);
408 
409     // Set kEnableExtendedChannels to true to enable greater than stereo output
410     // for the MixerThread and device sink.  Number of channels allowed is
411     // FCC_2 <= channels <= AudioMixer::MAX_NUM_CHANNELS.
412     static const bool kEnableExtendedChannels = true;
413 
414     // Returns true if channel mask is permitted for the PCM sink in the MixerThread
isValidPcmSinkChannelMask(audio_channel_mask_t channelMask)415     static inline bool isValidPcmSinkChannelMask(audio_channel_mask_t channelMask) {
416         switch (audio_channel_mask_get_representation(channelMask)) {
417         case AUDIO_CHANNEL_REPRESENTATION_POSITION: {
418             // Haptic channel mask is only applicable for channel position mask.
419             const uint32_t channelCount = audio_channel_count_from_out_mask(
420                     static_cast<audio_channel_mask_t>(channelMask & ~AUDIO_CHANNEL_HAPTIC_ALL));
421             const uint32_t maxChannelCount = kEnableExtendedChannels
422                     ? AudioMixer::MAX_NUM_CHANNELS : FCC_2;
423             if (channelCount < FCC_2 // mono is not supported at this time
424                     || channelCount > maxChannelCount) {
425                 return false;
426             }
427             // check that channelMask is the "canonical" one we expect for the channelCount.
428             return audio_channel_position_mask_is_out_canonical(channelMask);
429             }
430         case AUDIO_CHANNEL_REPRESENTATION_INDEX:
431             if (kEnableExtendedChannels) {
432                 const uint32_t channelCount = audio_channel_count_from_out_mask(channelMask);
433                 if (channelCount >= FCC_2 // mono is not supported at this time
434                         && channelCount <= AudioMixer::MAX_NUM_CHANNELS) {
435                     return true;
436                 }
437             }
438             return false;
439         default:
440             return false;
441         }
442     }
443 
444     // Set kEnableExtendedPrecision to true to use extended precision in MixerThread
445     static const bool kEnableExtendedPrecision = true;
446 
447     // Returns true if format is permitted for the PCM sink in the MixerThread
isValidPcmSinkFormat(audio_format_t format)448     static inline bool isValidPcmSinkFormat(audio_format_t format) {
449         switch (format) {
450         case AUDIO_FORMAT_PCM_16_BIT:
451             return true;
452         case AUDIO_FORMAT_PCM_FLOAT:
453         case AUDIO_FORMAT_PCM_24_BIT_PACKED:
454         case AUDIO_FORMAT_PCM_32_BIT:
455         case AUDIO_FORMAT_PCM_8_24_BIT:
456             return kEnableExtendedPrecision;
457         default:
458             return false;
459         }
460     }
461 
462     // standby delay for MIXER and DUPLICATING playback threads is read from property
463     // ro.audio.flinger_standbytime_ms or defaults to kDefaultStandbyTimeInNsecs
464     static nsecs_t          mStandbyTimeInNsecs;
465 
466     // incremented by 2 when screen state changes, bit 0 == 1 means "off"
467     // AudioFlinger::setParameters() updates, other threads read w/o lock
468     static uint32_t         mScreenState;
469 
470     // Internal dump utilities.
471     static const int kDumpLockTimeoutNs = 1 * NANOS_PER_SECOND;
472     static bool dumpTryLock(Mutex& mutex);
473     void dumpPermissionDenial(int fd, const Vector<String16>& args);
474     void dumpClients(int fd, const Vector<String16>& args);
475     void dumpInternals(int fd, const Vector<String16>& args);
476 
477     SimpleLog mThreadLog{16}; // 16 Thread history limit
478 
479     class ThreadBase;
480     void dumpToThreadLog_l(const sp<ThreadBase> &thread);
481 
482     // --- Client ---
483     class Client : public RefBase {
484     public:
485                             Client(const sp<AudioFlinger>& audioFlinger, pid_t pid);
486         virtual             ~Client();
487         sp<MemoryDealer>    heap() const;
pid()488         pid_t               pid() const { return mPid; }
audioFlinger()489         sp<AudioFlinger>    audioFlinger() const { return mAudioFlinger; }
490 
491     private:
492         DISALLOW_COPY_AND_ASSIGN(Client);
493 
494         const sp<AudioFlinger> mAudioFlinger;
495               sp<MemoryDealer> mMemoryDealer;
496         const pid_t         mPid;
497     };
498 
499     // --- Notification Client ---
500     class NotificationClient : public IBinder::DeathRecipient {
501     public:
502                             NotificationClient(const sp<AudioFlinger>& audioFlinger,
503                                                 const sp<media::IAudioFlingerClient>& client,
504                                                 pid_t pid,
505                                                 uid_t uid);
506         virtual             ~NotificationClient();
507 
audioFlingerClient()508                 sp<media::IAudioFlingerClient> audioFlingerClient() const { return mAudioFlingerClient; }
getPid()509                 pid_t getPid() const { return mPid; }
getUid()510                 uid_t getUid() const { return mUid; }
511 
512                 // IBinder::DeathRecipient
513                 virtual     void        binderDied(const wp<IBinder>& who);
514 
515     private:
516         DISALLOW_COPY_AND_ASSIGN(NotificationClient);
517 
518         const sp<AudioFlinger>  mAudioFlinger;
519         const pid_t             mPid;
520         const uid_t             mUid;
521         const sp<media::IAudioFlingerClient> mAudioFlingerClient;
522     };
523 
524     // --- MediaLogNotifier ---
525     // Thread in charge of notifying MediaLogService to start merging.
526     // Receives requests from AudioFlinger's binder activity. It is used to reduce the amount of
527     // binder calls to MediaLogService in case of bursts of AudioFlinger binder calls.
528     class MediaLogNotifier : public Thread {
529     public:
530         MediaLogNotifier();
531 
532         // Requests a MediaLogService notification. It's ignored if there has recently been another
533         void requestMerge();
534     private:
535         // Every iteration blocks waiting for a request, then interacts with MediaLogService to
536         // start merging.
537         // As every MediaLogService binder call is expensive, once it gets a request it ignores the
538         // following ones for a period of time.
539         virtual bool threadLoop() override;
540 
541         bool mPendingRequests;
542 
543         // Mutex and condition variable around mPendingRequests' value
544         Mutex       mMutex;
545         Condition   mCond;
546 
547         // Duration of the sleep period after a processed request
548         static const int kPostTriggerSleepPeriod = 1000000;
549     };
550 
551     const sp<MediaLogNotifier> mMediaLogNotifier;
552 
553     // This is a helper that is called during incoming binder calls.
554     // Requests media.log to start merging log buffers
555     void requestLogMerge();
556 
557     class TrackHandle;
558     class RecordHandle;
559     class RecordThread;
560     class PlaybackThread;
561     class MixerThread;
562     class DirectOutputThread;
563     class OffloadThread;
564     class DuplicatingThread;
565     class AsyncCallbackThread;
566     class Track;
567     class RecordTrack;
568     class EffectBase;
569     class EffectModule;
570     class EffectHandle;
571     class EffectChain;
572     class DeviceEffectProxy;
573     class DeviceEffectManager;
574     class PatchPanel;
575     class DeviceEffectManagerCallback;
576 
577     struct AudioStreamIn;
578     struct TeePatch;
579     using TeePatches = std::vector<TeePatch>;
580 
581 
582     struct  stream_type_t {
stream_type_tstream_type_t583         stream_type_t()
584             :   volume(1.0f),
585                 mute(false)
586         {
587         }
588         float       volume;
589         bool        mute;
590     };
591 
592     // Abstraction for the Audio Source for the RecordThread (HAL or PassthruPatchRecord).
593     struct Source
594     {
595         virtual ~Source() = default;
596         // The following methods have the same signatures as in StreamHalInterface.
597         virtual status_t read(void *buffer, size_t bytes, size_t *read) = 0;
598         virtual status_t getCapturePosition(int64_t *frames, int64_t *time) = 0;
599         virtual status_t standby() = 0;
600     };
601 
602     // --- PlaybackThread ---
603 #ifdef FLOAT_EFFECT_CHAIN
604 #define EFFECT_BUFFER_FORMAT AUDIO_FORMAT_PCM_FLOAT
605 using effect_buffer_t = float;
606 #else
607 #define EFFECT_BUFFER_FORMAT AUDIO_FORMAT_PCM_16_BIT
608 using effect_buffer_t = int16_t;
609 #endif
610 
611 #include "Threads.h"
612 
613 #include "PatchPanel.h"
614 
615 #include "Effects.h"
616 
617 #include "DeviceEffectManager.h"
618 
619     // Find io handle by session id.
620     // Preference is given to an io handle with a matching effect chain to session id.
621     // If none found, AUDIO_IO_HANDLE_NONE is returned.
622     template <typename T>
findIoHandleBySessionId_l(audio_session_t sessionId,const T & threads)623     static audio_io_handle_t findIoHandleBySessionId_l(
624             audio_session_t sessionId, const T& threads) {
625         audio_io_handle_t io = AUDIO_IO_HANDLE_NONE;
626 
627         for (size_t i = 0; i < threads.size(); i++) {
628             const uint32_t sessionType = threads.valueAt(i)->hasAudioSession(sessionId);
629             if (sessionType != 0) {
630                 io = threads.keyAt(i);
631                 if ((sessionType & AudioFlinger::ThreadBase::EFFECT_SESSION) != 0) {
632                     break; // effect chain here.
633                 }
634             }
635         }
636         return io;
637     }
638 
639     // server side of the client's IAudioTrack
640     class TrackHandle : public android::media::BnAudioTrack {
641     public:
642         explicit            TrackHandle(const sp<PlaybackThread::Track>& track);
643         virtual             ~TrackHandle();
644 
645         binder::Status getCblk(std::optional<media::SharedFileRegion>* _aidl_return) override;
646         binder::Status start(int32_t* _aidl_return) override;
647         binder::Status stop() override;
648         binder::Status flush() override;
649         binder::Status pause() override;
650         binder::Status attachAuxEffect(int32_t effectId, int32_t* _aidl_return) override;
651         binder::Status setParameters(const std::string& keyValuePairs,
652                                      int32_t* _aidl_return) override;
653         binder::Status selectPresentation(int32_t presentationId, int32_t programId,
654                                           int32_t* _aidl_return) override;
655         binder::Status getTimestamp(media::AudioTimestampInternal* timestamp,
656                                     int32_t* _aidl_return) override;
657         binder::Status signal() override;
658         binder::Status applyVolumeShaper(const media::VolumeShaperConfiguration& configuration,
659                                          const media::VolumeShaperOperation& operation,
660                                          int32_t* _aidl_return) override;
661         binder::Status getVolumeShaperState(
662                 int32_t id,
663                 std::optional<media::VolumeShaperState>* _aidl_return) override;
664         binder::Status getDualMonoMode(media::AudioDualMonoMode* _aidl_return) override;
665         binder::Status setDualMonoMode(media::AudioDualMonoMode mode) override;
666         binder::Status getAudioDescriptionMixLevel(float* _aidl_return) override;
667         binder::Status setAudioDescriptionMixLevel(float leveldB) override;
668         binder::Status getPlaybackRateParameters(
669                 media::AudioPlaybackRate* _aidl_return) override;
670         binder::Status setPlaybackRateParameters(
671                 const media::AudioPlaybackRate& playbackRate) override;
672 
673     private:
674         const sp<PlaybackThread::Track> mTrack;
675     };
676 
677     // server side of the client's IAudioRecord
678     class RecordHandle : public android::media::BnAudioRecord {
679     public:
680         explicit RecordHandle(const sp<RecordThread::RecordTrack>& recordTrack);
681         virtual             ~RecordHandle();
682         virtual binder::Status    start(int /*AudioSystem::sync_event_t*/ event,
683                 int /*audio_session_t*/ triggerSession);
684         virtual binder::Status   stop();
685         virtual binder::Status   getActiveMicrophones(
686                 std::vector<media::MicrophoneInfoData>* activeMicrophones);
687         virtual binder::Status   setPreferredMicrophoneDirection(
688                 int /*audio_microphone_direction_t*/ direction);
689         virtual binder::Status   setPreferredMicrophoneFieldDimension(float zoom);
690         virtual binder::Status   shareAudioHistory(const std::string& sharedAudioPackageName,
691                                                    int64_t sharedAudioStartMs);
692 
693     private:
694         const sp<RecordThread::RecordTrack> mRecordTrack;
695 
696         // for use from destructor
697         void                stop_nonvirtual();
698     };
699 
700     // Mmap stream control interface implementation. Each MmapThreadHandle controls one
701     // MmapPlaybackThread or MmapCaptureThread instance.
702     class MmapThreadHandle : public MmapStreamInterface {
703     public:
704         explicit            MmapThreadHandle(const sp<MmapThread>& thread);
705         virtual             ~MmapThreadHandle();
706 
707         // MmapStreamInterface virtuals
708         virtual status_t createMmapBuffer(int32_t minSizeFrames,
709                                           struct audio_mmap_buffer_info *info);
710         virtual status_t getMmapPosition(struct audio_mmap_position *position);
711         virtual status_t getExternalPosition(uint64_t *position, int64_t *timeNanos);
712         virtual status_t start(const AudioClient& client,
713                                const audio_attributes_t *attr,
714                                audio_port_handle_t *handle);
715         virtual status_t stop(audio_port_handle_t handle);
716         virtual status_t standby();
717 
718     private:
719         const sp<MmapThread> mThread;
720     };
721 
722               ThreadBase *checkThread_l(audio_io_handle_t ioHandle) const;
723               PlaybackThread *checkPlaybackThread_l(audio_io_handle_t output) const;
724               MixerThread *checkMixerThread_l(audio_io_handle_t output) const;
725               RecordThread *checkRecordThread_l(audio_io_handle_t input) const;
726               MmapThread *checkMmapThread_l(audio_io_handle_t io) const;
727               VolumeInterface *getVolumeInterface_l(audio_io_handle_t output) const;
728               Vector <VolumeInterface *> getAllVolumeInterfaces_l() const;
729 
730               sp<ThreadBase> openInput_l(audio_module_handle_t module,
731                                            audio_io_handle_t *input,
732                                            audio_config_t *config,
733                                            audio_devices_t device,
734                                            const char* address,
735                                            audio_source_t source,
736                                            audio_input_flags_t flags,
737                                            audio_devices_t outputDevice,
738                                            const String8& outputDeviceAddress);
739               sp<ThreadBase> openOutput_l(audio_module_handle_t module,
740                                           audio_io_handle_t *output,
741                                           audio_config_t *halConfig,
742                                           audio_config_base_t *mixerConfig,
743                                           audio_devices_t deviceType,
744                                           const String8& address,
745                                           audio_output_flags_t flags);
746 
747               void closeOutputFinish(const sp<PlaybackThread>& thread);
748               void closeInputFinish(const sp<RecordThread>& thread);
749 
750               // no range check, AudioFlinger::mLock held
streamMute_l(audio_stream_type_t stream)751               bool streamMute_l(audio_stream_type_t stream) const
752                                 { return mStreamTypes[stream].mute; }
753               void ioConfigChanged(audio_io_config_event event,
754                                    const sp<AudioIoDescriptor>& ioDesc,
755                                    pid_t pid = 0);
756 
757               // Allocate an audio_unique_id_t.
758               // Specific types are audio_io_handle_t, audio_session_t, effect ID (int),
759               // audio_module_handle_t, and audio_patch_handle_t.
760               // They all share the same ID space, but the namespaces are actually independent
761               // because there are separate KeyedVectors for each kind of ID.
762               // The return value is cast to the specific type depending on how the ID will be used.
763               // FIXME This API does not handle rollover to zero (for unsigned IDs),
764               //       or from positive to negative (for signed IDs).
765               //       Thus it may fail by returning an ID of the wrong sign,
766               //       or by returning a non-unique ID.
767               // This is the internal API.  For the binder API see newAudioUniqueId().
768               audio_unique_id_t nextUniqueId(audio_unique_id_use_t use);
769 
770               status_t moveEffectChain_l(audio_session_t sessionId,
771                                      PlaybackThread *srcThread,
772                                      PlaybackThread *dstThread);
773 
774               status_t moveAuxEffectToIo(int EffectId,
775                                          const sp<PlaybackThread>& dstThread,
776                                          sp<PlaybackThread> *srcThread);
777 
778               // return thread associated with primary hardware device, or NULL
779               PlaybackThread *primaryPlaybackThread_l() const;
780               DeviceTypeSet primaryOutputDevice_l() const;
781 
782               // return the playback thread with smallest HAL buffer size, and prefer fast
783               PlaybackThread *fastPlaybackThread_l() const;
784 
785               sp<ThreadBase> getEffectThread_l(audio_session_t sessionId, int effectId);
786 
787               ThreadBase *hapticPlaybackThread_l() const;
788 
789               void updateSecondaryOutputsForTrack_l(
790                       PlaybackThread::Track* track,
791                       PlaybackThread* thread,
792                       const std::vector<audio_io_handle_t>& secondaryOutputs) const;
793 
794 
795                 void        removeClient_l(pid_t pid);
796                 void        removeNotificationClient(pid_t pid);
797                 bool isNonOffloadableGlobalEffectEnabled_l();
798                 void onNonOffloadableGlobalEffectEnable();
799                 bool isSessionAcquired_l(audio_session_t audioSession);
800 
801                 // Store an effect chain to mOrphanEffectChains keyed vector.
802                 // Called when a thread exits and effects are still attached to it.
803                 // If effects are later created on the same session, they will reuse the same
804                 // effect chain and same instances in the effect library.
805                 // return ALREADY_EXISTS if a chain with the same session already exists in
806                 // mOrphanEffectChains. Note that this should never happen as there is only one
807                 // chain for a given session and it is attached to only one thread at a time.
808                 status_t        putOrphanEffectChain_l(const sp<EffectChain>& chain);
809                 // Get an effect chain for the specified session in mOrphanEffectChains and remove
810                 // it if found. Returns 0 if not found (this is the most common case).
811                 sp<EffectChain> getOrphanEffectChain_l(audio_session_t session);
812                 // Called when the last effect handle on an effect instance is removed. If this
813                 // effect belongs to an effect chain in mOrphanEffectChains, the chain is updated
814                 // and removed from mOrphanEffectChains if it does not contain any effect.
815                 // Return true if the effect was found in mOrphanEffectChains, false otherwise.
816                 bool            updateOrphanEffectChains(const sp<EffectModule>& effect);
817 
818                 std::vector< sp<EffectModule> > purgeStaleEffects_l();
819 
820                 void broadcastParametersToRecordThreads_l(const String8& keyValuePairs);
821                 void updateOutDevicesForRecordThreads_l(const DeviceDescriptorBaseVector& devices);
822                 void forwardParametersToDownstreamPatches_l(
823                         audio_io_handle_t upStream, const String8& keyValuePairs,
824                         std::function<bool(const sp<PlaybackThread>&)> useThread = nullptr);
825 
826     // AudioStreamIn is immutable, so their fields are const.
827     // For emphasis, we could also make all pointers to them be "const *",
828     // but that would clutter the code unnecessarily.
829 
830     struct AudioStreamIn : public Source {
831         AudioHwDevice* const audioHwDev;
832         sp<StreamInHalInterface> stream;
833         audio_input_flags_t flags;
834 
hwDevAudioStreamIn835         sp<DeviceHalInterface> hwDev() const { return audioHwDev->hwDevice(); }
836 
AudioStreamInAudioStreamIn837         AudioStreamIn(AudioHwDevice *dev, sp<StreamInHalInterface> in, audio_input_flags_t flags) :
838             audioHwDev(dev), stream(in), flags(flags) {}
readAudioStreamIn839         status_t read(void *buffer, size_t bytes, size_t *read) override {
840             return stream->read(buffer, bytes, read);
841         }
getCapturePositionAudioStreamIn842         status_t getCapturePosition(int64_t *frames, int64_t *time) override {
843             return stream->getCapturePosition(frames, time);
844         }
standbyAudioStreamIn845         status_t standby() override { return stream->standby(); }
846     };
847 
848     struct TeePatch {
849         sp<RecordThread::PatchRecord> patchRecord;
850         sp<PlaybackThread::PatchTrack> patchTrack;
851     };
852 
853     // for mAudioSessionRefs only
854     struct AudioSessionRef {
AudioSessionRefAudioSessionRef855         AudioSessionRef(audio_session_t sessionid, pid_t pid, uid_t uid) :
856             mSessionid(sessionid), mPid(pid), mUid(uid), mCnt(1) {}
857         const audio_session_t mSessionid;
858         const pid_t mPid;
859         const uid_t mUid;
860         int         mCnt;
861     };
862 
863     mutable     Mutex                               mLock;
864                 // protects mClients and mNotificationClients.
865                 // must be locked after mLock and ThreadBase::mLock if both must be locked
866                 // avoids acquiring AudioFlinger::mLock from inside thread loop.
867     mutable     Mutex                               mClientLock;
868                 // protected by mClientLock
869                 DefaultKeyedVector< pid_t, wp<Client> >     mClients;   // see ~Client()
870 
871                 mutable     Mutex                   mHardwareLock;
872                 // NOTE: If both mLock and mHardwareLock mutexes must be held,
873                 // always take mLock before mHardwareLock
874 
875                 // guarded by mHardwareLock
876                 AudioHwDevice* mPrimaryHardwareDev;
877                 DefaultKeyedVector<audio_module_handle_t, AudioHwDevice*>  mAudioHwDevs;
878 
879                 // These two fields are immutable after onFirstRef(), so no lock needed to access
880                 sp<DevicesFactoryHalInterface> mDevicesFactoryHal;
881                 sp<DevicesFactoryHalCallback> mDevicesFactoryHalCallback;
882 
883     // for dump, indicates which hardware operation is currently in progress (but not stream ops)
884     enum hardware_call_state {
885         AUDIO_HW_IDLE = 0,              // no operation in progress
886         AUDIO_HW_INIT,                  // init_check
887         AUDIO_HW_OUTPUT_OPEN,           // open_output_stream
888         AUDIO_HW_OUTPUT_CLOSE,          // unused
889         AUDIO_HW_INPUT_OPEN,            // unused
890         AUDIO_HW_INPUT_CLOSE,           // unused
891         AUDIO_HW_STANDBY,               // unused
892         AUDIO_HW_SET_MASTER_VOLUME,     // set_master_volume
893         AUDIO_HW_GET_ROUTING,           // unused
894         AUDIO_HW_SET_ROUTING,           // unused
895         AUDIO_HW_GET_MODE,              // unused
896         AUDIO_HW_SET_MODE,              // set_mode
897         AUDIO_HW_GET_MIC_MUTE,          // get_mic_mute
898         AUDIO_HW_SET_MIC_MUTE,          // set_mic_mute
899         AUDIO_HW_SET_VOICE_VOLUME,      // set_voice_volume
900         AUDIO_HW_SET_PARAMETER,         // set_parameters
901         AUDIO_HW_GET_INPUT_BUFFER_SIZE, // get_input_buffer_size
902         AUDIO_HW_GET_MASTER_VOLUME,     // get_master_volume
903         AUDIO_HW_GET_PARAMETER,         // get_parameters
904         AUDIO_HW_SET_MASTER_MUTE,       // set_master_mute
905         AUDIO_HW_GET_MASTER_MUTE,       // get_master_mute
906         AUDIO_HW_GET_MICROPHONES,       // getMicrophones
907     };
908 
909     mutable     hardware_call_state                 mHardwareStatus;    // for dump only
910 
911 
912                 DefaultKeyedVector< audio_io_handle_t, sp<PlaybackThread> >  mPlaybackThreads;
913                 stream_type_t                       mStreamTypes[AUDIO_STREAM_CNT];
914 
915                 // member variables below are protected by mLock
916                 float                               mMasterVolume;
917                 bool                                mMasterMute;
918                 float                               mMasterBalance = 0.f;
919                 // end of variables protected by mLock
920 
921                 DefaultKeyedVector< audio_io_handle_t, sp<RecordThread> >    mRecordThreads;
922 
923                 // protected by mClientLock
924                 DefaultKeyedVector< pid_t, sp<NotificationClient> >    mNotificationClients;
925 
926                 // updated by atomic_fetch_add_explicit
927                 volatile atomic_uint_fast32_t       mNextUniqueIds[AUDIO_UNIQUE_ID_USE_MAX];
928 
929                 audio_mode_t                        mMode;
930                 std::atomic_bool                    mBtNrecIsOff;
931 
932                 // protected by mLock
933                 Vector<AudioSessionRef*> mAudioSessionRefs;
934 
935                 float       masterVolume_l() const;
936                 float       getMasterBalance_l() const;
937                 bool        masterMute_l() const;
938                 audio_module_handle_t loadHwModule_l(const char *name);
939 
940                 Vector < sp<SyncEvent> > mPendingSyncEvents; // sync events awaiting for a session
941                                                              // to be created
942 
943                 // Effect chains without a valid thread
944                 DefaultKeyedVector< audio_session_t , sp<EffectChain> > mOrphanEffectChains;
945 
946                 // list of sessions for which a valid HW A/V sync ID was retrieved from the HAL
947                 DefaultKeyedVector< audio_session_t , audio_hw_sync_t >mHwAvSyncIds;
948 
949                 // list of MMAP stream control threads. Those threads allow for wake lock, routing
950                 // and volume control for activity on the associated MMAP stream at the HAL.
951                 // Audio data transfer is directly handled by the client creating the MMAP stream
952                 DefaultKeyedVector< audio_io_handle_t, sp<MmapThread> >  mMmapThreads;
953 
954 private:
955     sp<Client>  registerPid(pid_t pid);    // always returns non-0
956 
957     // for use from destructor
958     status_t    closeOutput_nonvirtual(audio_io_handle_t output);
959     void        closeThreadInternal_l(const sp<PlaybackThread>& thread);
960     status_t    closeInput_nonvirtual(audio_io_handle_t input);
961     void        closeThreadInternal_l(const sp<RecordThread>& thread);
962     void        setAudioHwSyncForSession_l(PlaybackThread *thread, audio_session_t sessionId);
963 
964     status_t    checkStreamType(audio_stream_type_t stream) const;
965 
966     void        filterReservedParameters(String8& keyValuePairs, uid_t callingUid);
967     void        logFilteredParameters(size_t originalKVPSize, const String8& originalKVPs,
968                                       size_t rejectedKVPSize, const String8& rejectedKVPs,
969                                       uid_t callingUid);
970 
971 public:
972     // These methods read variables atomically without mLock,
973     // though the variables are updated with mLock.
isLowRamDevice()974     bool    isLowRamDevice() const { return mIsLowRamDevice; }
975     size_t getClientSharedHeapSize() const;
976 
977 private:
978     std::atomic<bool> mIsLowRamDevice;
979     bool    mIsDeviceTypeKnown;
980     int64_t mTotalMemory;
981     std::atomic<size_t> mClientSharedHeapSize;
982     static constexpr size_t kMinimumClientSharedHeapSizeBytes = 1024 * 1024; // 1MB
983 
984     nsecs_t mGlobalEffectEnableTime;  // when a global effect was last enabled
985 
986     // protected by mLock
987     PatchPanel mPatchPanel;
988     sp<EffectsFactoryHalInterface> mEffectsFactoryHal;
989 
990     DeviceEffectManager mDeviceEffectManager;
991 
992     bool       mSystemReady;
993     std::atomic_bool mAudioPolicyReady{};
994 
995     mediautils::UidInfo mUidInfo;
996 
997     SimpleLog  mRejectedSetParameterLog;
998     SimpleLog  mAppSetParameterLog;
999     SimpleLog  mSystemSetParameterLog;
1000 
1001     std::vector<media::AudioVibratorInfo> mAudioVibratorInfos;
1002 
1003     static inline constexpr const char *mMetricsId = AMEDIAMETRICS_KEY_AUDIO_FLINGER;
1004 
1005     // Keep in sync with java definition in media/java/android/media/AudioRecord.java
1006     static constexpr int32_t kMaxSharedAudioHistoryMs = 5000;
1007 };
1008 
1009 #undef INCLUDING_FROM_AUDIOFLINGER_H
1010 
1011 std::string formatToString(audio_format_t format);
1012 std::string inputFlagsToString(audio_input_flags_t flags);
1013 std::string outputFlagsToString(audio_output_flags_t flags);
1014 std::string devicesToString(audio_devices_t devices);
1015 const char *sourceToString(audio_source_t source);
1016 
1017 // ----------------------------------------------------------------------------
1018 
1019 } // namespace android
1020 
1021 #endif // ANDROID_AUDIO_FLINGER_H
1022