Home | History | Annotate | Download | only in media
      1 /*
      2  * Copyright (C) 2013 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 package android.media;
     18 
     19 import java.lang.annotation.Retention;
     20 import java.lang.annotation.RetentionPolicy;
     21 
     22 import android.annotation.IntDef;
     23 
     24 /**
     25  * Structure that groups a position in frame units relative to an assumed audio stream,
     26  * together with the estimated time when that frame enters or leaves the audio
     27  * processing pipeline on that device. This can be used to coordinate events
     28  * and interactions with the external environment.
     29  * <p>
     30  * The time is based on the implementation's best effort, using whatever knowledge
     31  * is available to the system, but cannot account for any delay unknown to the implementation.
     32  *
     33  * @see AudioTrack#getTimestamp AudioTrack.getTimestamp(AudioTimestamp)
     34  * @see AudioRecord#getTimestamp AudioRecord.getTimestamp(AudioTimestamp, int)
     35  */
     36 public final class AudioTimestamp
     37 {
     38     /**
     39      * Clock monotonic or its equivalent on the system,
     40      * in the same units and timebase as {@link java.lang.System#nanoTime}.
     41      */
     42     public static final int TIMEBASE_MONOTONIC = 0;
     43 
     44     /**
     45      * Clock monotonic including suspend time or its equivalent on the system,
     46      * in the same units and timebase as {@link android.os.SystemClock#elapsedRealtimeNanos}.
     47      */
     48     public static final int TIMEBASE_BOOTTIME = 1;
     49 
     50     /** @hide */
     51     @IntDef({
     52         TIMEBASE_MONOTONIC,
     53         TIMEBASE_BOOTTIME,
     54     })
     55     @Retention(RetentionPolicy.SOURCE)
     56     public @interface Timebase {}
     57 
     58     /**
     59      * Position in frames relative to start of an assumed audio stream.
     60      * <p>
     61      * When obtained through
     62      * {@link AudioRecord#getTimestamp AudioRecord.getTimestamp(AudioTimestamp, int)},
     63      * all 64 bits of position are valid.
     64      * <p>
     65      * When obtained through
     66      * {@link AudioTrack#getTimestamp AudioTrack.getTimestamp(AudioTimestamp)},
     67      * the low-order 32 bits of position is in wrapping frame units similar to
     68      * {@link AudioTrack#getPlaybackHeadPosition AudioTrack.getPlaybackHeadPosition()}.
     69      */
     70     public long framePosition;
     71 
     72     /**
     73      * Time associated with the frame in the audio pipeline.
     74      * <p>
     75      * When obtained through
     76      * {@link AudioRecord#getTimestamp AudioRecord.getTimestamp(AudioTimestamp, int)},
     77      * this is the estimated time in nanoseconds when the frame referred to by
     78      * {@link #framePosition} was captured. The timebase is either
     79      * {@link #TIMEBASE_MONOTONIC} or {@link #TIMEBASE_BOOTTIME}, depending
     80      * on the timebase parameter used in
     81      * {@link AudioRecord#getTimestamp AudioRecord.getTimestamp(AudioTimestamp, int)}.
     82      * <p>
     83      * When obtained through
     84      * {@link AudioTrack#getTimestamp AudioTrack.getTimestamp(AudioTimestamp)},
     85      * this is the estimated time when the frame was presented or is committed to be presented,
     86      * with a timebase of {@link #TIMEBASE_MONOTONIC}.
     87      */
     88     public long nanoTime;
     89 }
     90