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