android_media_MediaSync.h revision d80d6f6b056e23a8d017fe8f3900f6a88e27aa1b
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;
29071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jiastruct 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
4505ebffe6bf6cdacc6de4b3bbf480c31869a81661Lajos Molnar    status_t setPlaybackSettings(const AudioPlaybackRate& rate);
4605ebffe6bf6cdacc6de4b3bbf480c31869a81661Lajos Molnar    void getPlaybackSettings(AudioPlaybackRate* rate /* nonnull */);
4705ebffe6bf6cdacc6de4b3bbf480c31869a81661Lajos Molnar    status_t setSyncSettings(const AVSyncSettings& syncSettings);
4805ebffe6bf6cdacc6de4b3bbf480c31869a81661Lajos Molnar    void getSyncSettings(AVSyncSettings* syncSettings /* nonnull */);
4905ebffe6bf6cdacc6de4b3bbf480c31869a81661Lajos Molnar    status_t setVideoFrameRateHint(float rate);
5005ebffe6bf6cdacc6de4b3bbf480c31869a81661Lajos Molnar    float getVideoFrameRate();
5105ebffe6bf6cdacc6de4b3bbf480c31869a81661Lajos Molnar
52217ec0adfc35302a6cc6b04bc78bf8fd82ffc8a5Wei Jia    sp<const MediaClock> getMediaClock();
53217ec0adfc35302a6cc6b04bc78bf8fd82ffc8a5Wei Jia
54071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jiaprotected:
55071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia    virtual ~JMediaSync();
56071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia
57071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jiaprivate:
58071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia    sp<MediaSync> mSync;
59071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia
60071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia    DISALLOW_EVIL_CONSTRUCTORS(JMediaSync);
61071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia};
62071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia
63071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia}  // namespace android
64071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia
65071a8b71d1212e218a3ebf7dbb8908a4acf5cf6dWei Jia#endif  // _ANDROID_MEDIA_MEDIASYNC_H_
66