• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 **
3 ** Copyright 2017, 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 INCLUDING_FROM_AUDIOFLINGER_H
19     #error This header file should only be included from AudioFlinger.h
20 #endif
21 
22 // playback track
23 class MmapTrack : public TrackBase {
24 public:
25                 MmapTrack(ThreadBase *thread,
26                             const audio_attributes_t& attr,
27                             uint32_t sampleRate,
28                             audio_format_t format,
29                             audio_channel_mask_t channelMask,
30                             audio_session_t sessionId,
31                             bool isOut,
32                             const android::content::AttributionSourceState& attributionSource,
33                             pid_t creatorPid,
34                             audio_port_handle_t portId = AUDIO_PORT_HANDLE_NONE);
35     virtual             ~MmapTrack();
36 
37                         // TrackBase virtual
38     virtual status_t    initCheck() const;
39     virtual status_t    start(AudioSystem::sync_event_t event,
40                               audio_session_t triggerSession);
41     virtual void        stop();
isFastTrack()42     virtual bool        isFastTrack() const { return false; }
isDirect()43             bool        isDirect() const override { return true; }
44 
45             void        appendDumpHeader(String8& result);
46             void        appendDump(String8& result, bool active);
47 
48                         // protected by MMapThread::mLock
setSilenced_l(bool silenced)49             void        setSilenced_l(bool silenced) { mSilenced = silenced;
50                                                        mSilencedNotified = false;}
51                         // protected by MMapThread::mLock
isSilenced_l()52             bool        isSilenced_l() const { return mSilenced; }
53                         // protected by MMapThread::mLock
getAndSetSilencedNotified_l()54             bool        getAndSetSilencedNotified_l() { bool silencedNotified = mSilencedNotified;
55                                                         mSilencedNotified = true;
56                                                         return silencedNotified; }
57 private:
58     friend class MmapThread;
59 
60     DISALLOW_COPY_AND_ASSIGN(MmapTrack);
61 
62     // AudioBufferProvider interface
63     virtual status_t getNextBuffer(AudioBufferProvider::Buffer* buffer);
64     // releaseBuffer() not overridden
65 
66     // ExtendedAudioBufferProvider interface
67     virtual size_t framesReady() const;
68     virtual int64_t framesReleased() const;
69     virtual void onTimestamp(const ExtendedTimestamp &timestamp);
70 
71     pid_t mPid;
72     bool  mSilenced;            // protected by MMapThread::mLock
73     bool  mSilencedNotified;    // protected by MMapThread::mLock
74 };  // end of Track
75 
76