/* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.media; /** @hide */ public interface MediaTimeProvider { // we do not allow negative media time /** * Presentation time value if no timed event notification is requested. */ public final static long NO_TIME = -1; /** * Cancels all previous notification request from this listener if any. It * registers the listener to get seek and stop notifications. If timeUs is * not negative, it also registers the listener for a timed event * notification when the presentation time reaches (becomes greater) than * the value specified. This happens immediately if the current media time * is larger than or equal to timeUs. * * @param timeUs presentation time to get timed event callback at (or * {@link #NO_TIME}) */ public void notifyAt(long timeUs, OnMediaTimeListener listener); /** * Cancels all previous notification request from this listener if any. It * registers the listener to get seek and stop notifications. If the media * is stopped, the listener will immediately receive a stop notification. * Otherwise, it will receive a timed event notificaton. */ public void scheduleUpdate(OnMediaTimeListener listener); /** * Cancels all previous notification request from this listener if any. */ public void cancelNotifications(OnMediaTimeListener listener); /** * Get the current presentation time. * * @param precise Whether getting a precise time is important. This is * more costly. * @param monotonic Whether returned time should be monotonic: that is, * greater than or equal to the last returned time. Don't * always set this to true. E.g. this has undesired * consequences if the media is seeked between calls. * @throws IllegalStateException if the media is not initialized */ public long getCurrentTimeUs(boolean precise, boolean monotonic) throws IllegalStateException; /** @hide */ public static interface OnMediaTimeListener { /** * Called when the registered time was reached naturally. * * @param timeUs current media time */ void onTimedEvent(long timeUs); /** * Called when the media time changed due to seeking. * * @param timeUs current media time */ void onSeek(long timeUs); /** * Called when the playback stopped. This is not called on pause, only * on full stop, at which point there is no further current media time. */ void onStop(); } }