1dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk/* 2dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk * Copyright (C) 2016 The Android Open Source Project 3dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk * 4dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk * Licensed under the Apache License, Version 2.0 (the "License"); 5dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk * you may not use this file except in compliance with the License. 6dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk * You may obtain a copy of the License at 7dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk * 8dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk * http://www.apache.org/licenses/LICENSE-2.0 9dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk * 10dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk * Unless required by applicable law or agreed to in writing, software 11dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk * distributed under the License is distributed on an "AS IS" BASIS, 12dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk * See the License for the specific language governing permissions and 14dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk * limitations under the License. 15dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk */ 16dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk 175ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk#ifndef AAUDIO_TIMESTAMP_SCHEDULER_H 185ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk#define AAUDIO_TIMESTAMP_SCHEDULER_H 19dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk 20a4eb0d86a29be2763be5fac51727858d5095794bPhil Burk#include <aaudio/AAudio.h> 21c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#include <utility/AudioClock.h> 22dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk 235ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burknamespace aaudio { 24dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk 25dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk/** 26dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk * Schedule wakeup time for monitoring the position 27dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk * of an MMAP/NOIRQ buffer. 28dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk * 29dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk * Note that this object is not thread safe. Only call it from a single thread. 30dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk */ 31dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burkclass TimestampScheduler 32dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk{ 33dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burkpublic: 34dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk TimestampScheduler() {}; 35dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk virtual ~TimestampScheduler() = default; 36dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk 37dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk /** 38dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk * Start the schedule at the given time. 39dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk */ 403316d5e6d375a4f09c681205e9094d30a0bfc4a2Phil Burk void start(int64_t startTime); 41dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk 42dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk /** 43c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * Calculate the next time that the read position should be measured. 44dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk */ 453316d5e6d375a4f09c681205e9094d30a0bfc4a2Phil Burk int64_t nextAbsoluteTime(); 46dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk 473316d5e6d375a4f09c681205e9094d30a0bfc4a2Phil Burk void setBurstPeriod(int64_t burstPeriod) { 48dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk mBurstPeriod = burstPeriod; 49dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk } 50dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk 513316d5e6d375a4f09c681205e9094d30a0bfc4a2Phil Burk void setBurstPeriod(int32_t framesPerBurst, 523316d5e6d375a4f09c681205e9094d30a0bfc4a2Phil Burk int32_t sampleRate) { 535ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk mBurstPeriod = AAUDIO_NANOS_PER_SECOND * framesPerBurst / sampleRate; 54dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk } 55dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk 563316d5e6d375a4f09c681205e9094d30a0bfc4a2Phil Burk int64_t getBurstPeriod() { 57dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk return mBurstPeriod; 58dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk } 59dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk 60dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burkprivate: 61dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk // Start with an arbitrary default so we do not divide by zero. 623316d5e6d375a4f09c681205e9094d30a0bfc4a2Phil Burk int64_t mBurstPeriod = AAUDIO_NANOS_PER_MILLISECOND; 63c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk int64_t mStartTime = 0; 64c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk int64_t mLastTime = 0; 65dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk}; 66dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk 675ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk} /* namespace aaudio */ 68dec33abe3739b2116ef6fbac36f7ca5d26f9d190Phil Burk 695ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk#endif /* AAUDIO_TIMESTAMP_SCHEDULER_H */ 70