Home | History | Annotate | Download | only in audioflinger
      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                             uid_t uid,
     33                             pid_t pid,
     34                             pid_t creatorPid,
     35                             audio_port_handle_t portId = AUDIO_PORT_HANDLE_NONE);
     36     virtual             ~MmapTrack();
     37 
     38                         // TrackBase virtual
     39     virtual status_t    initCheck() const;
     40     virtual status_t    start(AudioSystem::sync_event_t event,
     41                               audio_session_t triggerSession);
     42     virtual void        stop();
     43     virtual bool        isFastTrack() const { return false; }
     44             bool        isDirect() const override { return true; }
     45 
     46             void        appendDumpHeader(String8& result);
     47             void        appendDump(String8& result, bool active);
     48 
     49                         // protected by MMapThread::mLock
     50             void        setSilenced_l(bool silenced) { mSilenced = silenced;
     51                                                        mSilencedNotified = false;}
     52                         // protected by MMapThread::mLock
     53             bool        isSilenced_l() const { return mSilenced; }
     54                         // protected by MMapThread::mLock
     55             bool        getAndSetSilencedNotified_l() { bool silencedNotified = mSilencedNotified;
     56                                                         mSilencedNotified = true;
     57                                                         return silencedNotified; }
     58 private:
     59     friend class MmapThread;
     60 
     61     DISALLOW_COPY_AND_ASSIGN(MmapTrack);
     62 
     63     // AudioBufferProvider interface
     64     virtual status_t getNextBuffer(AudioBufferProvider::Buffer* buffer);
     65     // releaseBuffer() not overridden
     66 
     67     // ExtendedAudioBufferProvider interface
     68     virtual size_t framesReady() const;
     69     virtual int64_t framesReleased() const;
     70     virtual void onTimestamp(const ExtendedTimestamp &timestamp);
     71 
     72     pid_t mPid;
     73     bool  mSilenced;            // protected by MMapThread::mLock
     74     bool  mSilencedNotified;    // protected by MMapThread::mLock
     75 };  // end of Track
     76 
     77