TimestampScheduler.h revision a4eb0d86a29be2763be5fac51727858d5095794b
1/* 2 * Copyright (C) 2016 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#ifndef AAUDIO_TIMESTAMP_SCHEDULER_H 18#define AAUDIO_TIMESTAMP_SCHEDULER_H 19 20#include <aaudio/AAudio.h> 21#include <utility/AudioClock.h> 22 23namespace aaudio { 24 25/** 26 * Schedule wakeup time for monitoring the position 27 * of an MMAP/NOIRQ buffer. 28 * 29 * Note that this object is not thread safe. Only call it from a single thread. 30 */ 31class TimestampScheduler 32{ 33public: 34 TimestampScheduler() {}; 35 virtual ~TimestampScheduler() = default; 36 37 /** 38 * Start the schedule at the given time. 39 */ 40 void start(int64_t startTime); 41 42 /** 43 * Calculate the next time that the read position should be measured. 44 */ 45 int64_t nextAbsoluteTime(); 46 47 void setBurstPeriod(int64_t burstPeriod) { 48 mBurstPeriod = burstPeriod; 49 } 50 51 void setBurstPeriod(int32_t framesPerBurst, 52 int32_t sampleRate) { 53 mBurstPeriod = AAUDIO_NANOS_PER_SECOND * framesPerBurst / sampleRate; 54 } 55 56 int64_t getBurstPeriod() { 57 return mBurstPeriod; 58 } 59 60private: 61 // Start with an arbitrary default so we do not divide by zero. 62 int64_t mBurstPeriod = AAUDIO_NANOS_PER_MILLISECOND; 63 int64_t mStartTime = 0; 64 int64_t mLastTime = 0; 65}; 66 67} /* namespace aaudio */ 68 69#endif /* AAUDIO_TIMESTAMP_SCHEDULER_H */ 70