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)