1 /* 2 * Copyright 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #define LOG_TAG "FifoControllerBase" 18 //#define LOG_NDEBUG 0 19 #include <utils/Log.h> 20 21 #include <stdint.h> 22 #include "FifoControllerBase.h" 23 24 using namespace android; // TODO just import names needed 25 FifoControllerBase(fifo_frames_t capacity,fifo_frames_t threshold)26FifoControllerBase::FifoControllerBase(fifo_frames_t capacity, fifo_frames_t threshold) 27 : mCapacity(capacity) 28 , mThreshold(threshold) 29 { 30 } 31 ~FifoControllerBase()32FifoControllerBase::~FifoControllerBase() { 33 } 34 getFullFramesAvailable()35fifo_frames_t FifoControllerBase::getFullFramesAvailable() { 36 return (fifo_frames_t) (getWriteCounter() - getReadCounter()); 37 } 38 getReadIndex()39fifo_frames_t FifoControllerBase::getReadIndex() { 40 // % works with non-power of two sizes 41 return (fifo_frames_t) ((uint64_t)getReadCounter() % mCapacity); 42 } 43 advanceReadIndex(fifo_frames_t numFrames)44void FifoControllerBase::advanceReadIndex(fifo_frames_t numFrames) { 45 setReadCounter(getReadCounter() + numFrames); 46 } 47 getEmptyFramesAvailable()48fifo_frames_t FifoControllerBase::getEmptyFramesAvailable() { 49 return (int32_t)(mThreshold - getFullFramesAvailable()); 50 } 51 getWriteIndex()52fifo_frames_t FifoControllerBase::getWriteIndex() { 53 // % works with non-power of two sizes 54 return (fifo_frames_t) ((uint64_t)getWriteCounter() % mCapacity); 55 } 56 advanceWriteIndex(fifo_frames_t numFrames)57void FifoControllerBase::advanceWriteIndex(fifo_frames_t numFrames) { 58 setWriteCounter(getWriteCounter() + numFrames); 59 } 60 setThreshold(fifo_frames_t threshold)61void FifoControllerBase::setThreshold(fifo_frames_t threshold) { 62 if (threshold > mCapacity) { 63 threshold = mCapacity; 64 } else if (threshold < 0) { 65 threshold = 0; 66 } 67 mThreshold = threshold; 68 } 69