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