1071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia/* 2071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia * Copyright 2015, The Android Open Source Project 3071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia * 4071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia * Licensed under the Apache License, Version 2.0 (the "License"); 5071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia * you may not use this file except in compliance with the License. 6071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia * You may obtain a copy of the License at 7071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia * 8071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia * http://www.apache.org/licenses/LICENSE-2.0 9071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia * 10071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia * Unless required by applicable law or agreed to in writing, software 11071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia * distributed under the License is distributed on an "AS IS" BASIS, 12071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia * See the License for the specific language governing permissions and 14071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia * limitations under the License. 15071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia */ 16071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia 17071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia#ifndef _ANDROID_MEDIA_MEDIASYNC_H_ 18071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia#define _ANDROID_MEDIA_MEDIASYNC_H_ 19071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia 20071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia#include <media/stagefright/foundation/ABase.h> 2105ebffe6bf6cdacc6de4b3bbf480c31869a81661Lajos Molnar#include <media/stagefright/MediaSync.h> 22071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia#include <utils/Errors.h> 23071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia#include <utils/RefBase.h> 24071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia 25071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jianamespace android { 26071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia 2705ebffe6bf6cdacc6de4b3bbf480c31869a81661Lajos Molnarstruct AudioPlaybackRate; 28071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jiaclass AudioTrack; 299eb9dd326ae93cd84eb9bbc740f753fe8d8c7a13Chih-Hung Hsiehclass IGraphicBufferProducer; 30217ec0adfc35302a6cc6b04bc78bf8fd82ffc8a5Wei Jiastruct MediaClock; 31071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jiaclass MediaSync; 32071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia 33071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jiastruct JMediaSync : public RefBase { 34071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia JMediaSync(); 35071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia 36d80d6f6b056e23a8d017fe8f3900f6a88e27aa1bWei Jia status_t setSurface(const sp<IGraphicBufferProducer> &bufferProducer); 37d80d6f6b056e23a8d017fe8f3900f6a88e27aa1bWei Jia status_t setAudioTrack(const sp<AudioTrack> &audioTrack); 38071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia 39071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia status_t createInputSurface(sp<IGraphicBufferProducer>* bufferProducer); 40071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia 41071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia status_t updateQueuedAudioData(int sizeInBytes, int64_t presentationTimeUs); 42071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia 4325b802d47249702b9e5d175b3e7144934b67553dWei Jia status_t getPlayTimeForPendingAudioFrames(int64_t *outTimeUs); 4425b802d47249702b9e5d175b3e7144934b67553dWei Jia 452d61e2b97c92ac2de80ebb3782b728ae5cdf5306Wei Jia status_t setPlaybackParams(const AudioPlaybackRate& rate); 462d61e2b97c92ac2de80ebb3782b728ae5cdf5306Wei Jia void getPlaybackParams(AudioPlaybackRate* rate /* nonnull */); 472d61e2b97c92ac2de80ebb3782b728ae5cdf5306Wei Jia status_t setSyncParams(const AVSyncSettings& syncParams); 482d61e2b97c92ac2de80ebb3782b728ae5cdf5306Wei Jia void getSyncParams(AVSyncSettings* syncParams /* nonnull */); 4905ebffe6bf6cdacc6de4b3bbf480c31869a81661Lajos Molnar status_t setVideoFrameRateHint(float rate); 5005ebffe6bf6cdacc6de4b3bbf480c31869a81661Lajos Molnar float getVideoFrameRate(); 5105ebffe6bf6cdacc6de4b3bbf480c31869a81661Lajos Molnar 52d08debcf42d820fa8ef9916077a7bfc0a36f2db5Lajos Molnar void flush(); 53d08debcf42d820fa8ef9916077a7bfc0a36f2db5Lajos Molnar 54217ec0adfc35302a6cc6b04bc78bf8fd82ffc8a5Wei Jia sp<const MediaClock> getMediaClock(); 55217ec0adfc35302a6cc6b04bc78bf8fd82ffc8a5Wei Jia 56071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jiaprotected: 57071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia virtual ~JMediaSync(); 58071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia 59071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jiaprivate: 60071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia sp<MediaSync> mSync; 61071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia 62071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia DISALLOW_EVIL_CONSTRUCTORS(JMediaSync); 63071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia}; 64071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia 65071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia} // namespace android 66071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia 67071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia#endif // _ANDROID_MEDIA_MEDIASYNC_H_ 68