RecordTracks.h revision 9cae217050aa1347d4ac5053c305754879e3f97f
1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)/*
2868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)**
3868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)** Copyright 2012, The Android Open Source Project
4868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)**
5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)** Licensed under the Apache License, Version 2.0 (the "License");
6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)** you may not use this file except in compliance with the License.
7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)** You may obtain a copy of the License at
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)**
9bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch**     http://www.apache.org/licenses/LICENSE-2.0
10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)**
115e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)** Unless required by applicable law or agreed to in writing, software
125e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)** distributed under the License is distributed on an "AS IS" BASIS,
13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)** See the License for the specific language governing permissions and
15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)** limitations under the License.
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci*/
1723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef INCLUDING_FROM_AUDIOFLINGER_H
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    #error This header file should only be included from AudioFlinger.h
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// record track
23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class RecordTrack : public TrackBase {
24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)public:
25868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                        RecordTrack(RecordThread *thread,
26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                const sp<Client>& client,
27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                                uint32_t sampleRate,
28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                                audio_format_t format,
29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                                audio_channel_mask_t channelMask,
305e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)                                size_t frameCount,
311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                                int sessionId,
321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                                int uid);
335e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)    virtual             ~RecordTrack();
345e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)
35868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    virtual status_t    start(AudioSystem::sync_event_t event, int triggerSession);
36868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    virtual void        stop();
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            void        destroy();
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            void        invalidate();
41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            // clear the buffer overflow flag
42868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            void        clearOverflow() { mOverflow = false; }
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            // set the buffer overflow flag and return previous value
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            bool        setOverflow() { bool tmp = mOverflow; mOverflow = true;
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                                return tmp; }
46868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
47868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    static  void        appendDumpHeader(String8& result);
485e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)            void        dump(char* buffer, size_t size);
49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
50868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)private:
51868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    friend class AudioFlinger;  // for mState
52868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
53868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                        RecordTrack(const RecordTrack&);
54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                        RecordTrack& operator = (const RecordTrack&);
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // AudioBufferProvider interface
575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    virtual status_t getNextBuffer(AudioBufferProvider::Buffer* buffer,
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                   int64_t pts = kInvalidPTS);
595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // releaseBuffer() not overridden
605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
615e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)    bool                mOverflow;  // overflow on most recent attempt to fill client buffer
625e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)    AudioRecordServerProxy* mAudioRecordServerProxy;
635e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)};
64a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)