FifoBuffer.h revision fd911c1b48d05d0ea3791c988b18eaa4d20fecd4
1fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk/* 2fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk * Copyright 2015 The Android Open Source Project 3fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk * 4fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk * Licensed under the Apache License, Version 2.0 (the "License"); 5fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk * you may not use this file except in compliance with the License. 6fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk * You may obtain a copy of the License at 7fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk * 8fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk * http://www.apache.org/licenses/LICENSE-2.0 9fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk * 10fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk * Unless required by applicable law or agreed to in writing, software 11fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk * distributed under the License is distributed on an "AS IS" BASIS, 12fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk * See the License for the specific language governing permissions and 14fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk * limitations under the License. 15fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk */ 16fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk 17fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk#ifndef FIFO_FIFO_BUFFER_H 18fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk#define FIFO_FIFO_BUFFER_H 19fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk 20fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk#include <stdint.h> 21fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk 22fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk#include "FifoControllerBase.h" 23fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk 24fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burkclass FifoBuffer { 25fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burkpublic: 26fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk FifoBuffer(int32_t bytesPerFrame, fifo_frames_t capacityInFrames); 27fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk 28fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk FifoBuffer(int32_t bytesPerFrame, 29fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk fifo_frames_t capacityInFrames, 30fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk fifo_counter_t * readCounterAddress, 31fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk fifo_counter_t * writeCounterAddress, 32fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk void * dataStorageAddress); 33fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk 34fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk ~FifoBuffer(); 35fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk 36fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk int32_t convertFramesToBytes(fifo_frames_t frames); 37fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk 38fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk fifo_frames_t read(void *destination, fifo_frames_t framesToRead); 39fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk 40fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk fifo_frames_t write(const void *source, fifo_frames_t framesToWrite); 41fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk 42fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk fifo_frames_t getThreshold(); 43fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk void setThreshold(fifo_frames_t threshold); 44fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk 45fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk fifo_frames_t getBufferCapacityInFrames(); 46fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk 47fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk fifo_frames_t readNow(void *buffer, fifo_frames_t numFrames); 48fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk 49fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk int64_t getNextReadTime(int32_t frameRate); 50fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk 51fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk int32_t getUnderrunCount() const { return mUnderrunCount; } 52fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk 53fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk FifoControllerBase *getFifoControllerBase() { return mFifo; } 54fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk 55fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk int32_t getBytesPerFrame() { 56fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk return mBytesPerFrame; 57fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk } 58fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk 59fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk fifo_counter_t getReadCounter() { 60fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk return mFifo->getReadCounter(); 61fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk } 62fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk 63fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk void setReadCounter(fifo_counter_t n) { 64fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk mFifo->setReadCounter(n); 65fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk } 66fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk 67fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk fifo_counter_t getWriteCounter() { 68fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk return mFifo->getWriteCounter(); 69fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk } 70fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk 71fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk void setWriteCounter(fifo_counter_t n) { 72fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk mFifo->setWriteCounter(n); 73fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk } 74fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk 75fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burkprivate: 76fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk const fifo_frames_t mFrameCapacity; 77fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk const int32_t mBytesPerFrame; 78fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk uint8_t * mStorage; 79fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk bool mStorageOwned; // did this object allocate the storage? 80fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk FifoControllerBase *mFifo; 81fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk fifo_counter_t mFramesReadCount; 82fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk fifo_counter_t mFramesUnderrunCount; 83fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk int32_t mUnderrunCount; // need? just use frames 84fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk int32_t mLastReadSize; 85fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk}; 86fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk 87fd911c1b48d05d0ea3791c988b18eaa4d20fecd4Phil Burk#endif //FIFO_FIFO_BUFFER_H 88