Home | History | Annotate | Download | only in oboeservice
      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 
     23 namespace 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  */
     31 class TimestampScheduler
     32 {
     33 public:
     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 
     60 private:
     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