AudioBufferProvider.h revision 47f3f5a119194d4c06815453be9950ba112c8e3e
1496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer/* 284ba14f6d016ab181f1fd5de8050e1b9bbc83904Mikhail Glushenkov * Copyright (C) 2007 The Android Open Source Project 3496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer * 4496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer * Licensed under the Apache License, Version 2.0 (the "License"); 54ee451de366474b9c228b4e5fa573795a715216dChris Lattner * you may not use this file except in compliance with the License. 64ee451de366474b9c228b4e5fa573795a715216dChris Lattner * You may obtain a copy of the License at 784ba14f6d016ab181f1fd5de8050e1b9bbc83904Mikhail Glushenkov * 8496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer * http://www.apache.org/licenses/LICENSE-2.0 9496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer * 10496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer * Unless required by applicable law or agreed to in writing, software 11496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer * distributed under the License is distributed on an "AS IS" BASIS, 12496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer * See the License for the specific language governing permissions and 1490b54138834a057179c7a02931217ab5a82ed389Reid Spencer * limitations under the License. 15ced4110f5b068b9b64e3a55a9ee57b621ce4acb1Reid Spencer */ 1690b54138834a057179c7a02931217ab5a82ed389Reid Spencer 1748fe63526e35ddaee7e98879596a569911f41319Sebastian Redl#ifndef ANDROID_AUDIO_BUFFER_PROVIDER_H 1890b54138834a057179c7a02931217ab5a82ed389Reid Spencer#define ANDROID_AUDIO_BUFFER_PROVIDER_H 1923a1cf3e085325783ef2e4078308f913cba5012eJeff Cohen 2048fdf91d0f17b19bb7345156b928689df94d0c6cReid Spencer#include <utils/Errors.h> 21f6cbc0fd6494e50c48ebe4b5eecde1c70bcd5165Reid Spencer 2248fdf91d0f17b19bb7345156b928689df94d0c6cReid Spencernamespace android { 23f6cbc0fd6494e50c48ebe4b5eecde1c70bcd5165Reid Spencer// ---------------------------------------------------------------------------- 24f6cbc0fd6494e50c48ebe4b5eecde1c70bcd5165Reid Spencer 2590b54138834a057179c7a02931217ab5a82ed389Reid Spencerclass AudioBufferProvider 2648fdf91d0f17b19bb7345156b928689df94d0c6cReid Spencer{ 2748fdf91d0f17b19bb7345156b928689df94d0c6cReid Spencerpublic: 2848fdf91d0f17b19bb7345156b928689df94d0c6cReid Spencer 2948fdf91d0f17b19bb7345156b928689df94d0c6cReid Spencer // FIXME merge with AudioTrackShared::Buffer, AudioTrack::Buffer, and AudioRecord::Buffer 3048fdf91d0f17b19bb7345156b928689df94d0c6cReid Spencer // and rename getNextBuffer() to obtainBuffer() 3148fdf91d0f17b19bb7345156b928689df94d0c6cReid Spencer struct Buffer { 3248fdf91d0f17b19bb7345156b928689df94d0c6cReid Spencer Buffer() : raw(NULL), frameCount(0) { } 3348fdf91d0f17b19bb7345156b928689df94d0c6cReid Spencer union { 3490b54138834a057179c7a02931217ab5a82ed389Reid Spencer void* raw; 3590b54138834a057179c7a02931217ab5a82ed389Reid Spencer short* i16; 3690b54138834a057179c7a02931217ab5a82ed389Reid Spencer int8_t* i8; 3790b54138834a057179c7a02931217ab5a82ed389Reid Spencer }; 3890b54138834a057179c7a02931217ab5a82ed389Reid Spencer size_t frameCount; 39ee841a1a8735805f84d609ae105bec92525033c6Jeff Cohen }; 40ee841a1a8735805f84d609ae105bec92525033c6Jeff Cohen 41ee841a1a8735805f84d609ae105bec92525033c6Jeff Cohen virtual ~AudioBufferProvider() {} 42ced4110f5b068b9b64e3a55a9ee57b621ce4acb1Reid Spencer 4335033a5876aa27ea5729bc29b41bb4460a303cadChris Lattner // value representing an invalid presentation timestamp 4490b54138834a057179c7a02931217ab5a82ed389Reid Spencer static const int64_t kInvalidPTS = 0x7FFFFFFFFFFFFFFFLL; // <stdint.h> is too painful 457b60a15abc155196d9515a1e242ec0137afff753Reid Spencer 46df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar // pts is the local time when the next sample yielded by getNextBuffer 477b60a15abc155196d9515a1e242ec0137afff753Reid Spencer // will be rendered. 48298d6c14ca1936677aaf6cca3efc569b6e53d294Reid Spencer // Pass kInvalidPTS if the PTS is unknown or not applicable. 49298d6c14ca1936677aaf6cca3efc569b6e53d294Reid Spencer // On entry: 50298d6c14ca1936677aaf6cca3efc569b6e53d294Reid Spencer // buffer != NULL 51298d6c14ca1936677aaf6cca3efc569b6e53d294Reid Spencer // buffer->raw unused 5290b54138834a057179c7a02931217ab5a82ed389Reid Spencer // buffer->frameCount maximum number of desired frames 5390b54138834a057179c7a02931217ab5a82ed389Reid Spencer // On successful return: 54496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer // status NO_ERROR 55496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer // buffer->raw non-NULL pointer to buffer->frameCount contiguous available frames 56496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer // buffer->frameCount number of contiguous available frames at buffer->raw, 5784ba14f6d016ab181f1fd5de8050e1b9bbc83904Mikhail Glushenkov // 0 < buffer->frameCount <= entry value 5890b54138834a057179c7a02931217ab5a82ed389Reid Spencer // On error return: 59496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer // status != NO_ERROR 60496c277a6d161413e3f6976c9991ddccd8ecae8aReid Spencer // buffer->raw NULL 613be2d12bdec9ec3a244aae695d3b586ac27dcfdeDaniel Dunbar // buffer->frameCount 0 62df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar virtual status_t getNextBuffer(Buffer* buffer, int64_t pts = kInvalidPTS) = 0; 63df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar 64df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar // Release (a portion of) the buffer previously obtained by getNextBuffer(). 65df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar // It is permissible to call releaseBuffer() multiple times per getNextBuffer(). 66df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar // On entry: 67df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar // buffer->frameCount number of frames to release, must be <= number of frames 68df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar // obtained but not yet released 69df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar // buffer->raw unused 70df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar // On return: 71df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar // buffer->frameCount 0; implementation MUST set to zero 72df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar // buffer->raw undefined; implementation is PERMITTED to set to any value, 73df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar // so if caller needs to continue using this buffer it must 74df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar // keep track of the pointer itself 75df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar virtual void releaseBuffer(Buffer* buffer) = 0; 76df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar}; 77df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar 78df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar// ---------------------------------------------------------------------------- 79df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar}; // namespace android 80df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar 81df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar#endif // ANDROID_AUDIO_BUFFER_PROVIDER_H 82df3388492bc2bfc73b3e0195693e2f67f10dcf52Daniel Dunbar