1643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi/*
2643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project
3643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi *
4643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License");
5643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi * you may not use this file except in compliance with the License.
6643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi * You may obtain a copy of the License at
7643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi *
8643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi *      http://www.apache.org/licenses/LICENSE-2.0
9643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi *
10643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software
11643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS,
12643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi * See the License for the specific language governing permissions and
14643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi * limitations under the License.
15643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi */
16643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
17643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi#ifndef PREVIEW_PLAYER_H_
18643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
19643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi#define PREVIEW_PLAYER_H_
20643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
21643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi#include "TimedEventQueue.h"
22643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi#include "VideoEditorAudioPlayer.h"
23643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
24643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi#include <media/MediaPlayerInterface.h>
25643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi#include <media/stagefright/OMXClient.h>
26643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi#include <media/stagefright/TimeSource.h>
27643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi#include <utils/threads.h>
2843fcc396614a587851e2b7c4cea2876ec58b8648Chih-Chung Chang#include "NativeWindowRenderer.h"
29643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
30643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundarginamespace android {
31643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
3200f742c087d92e5452d29be1fb668022b5f8a6c7James Dongstruct VideoEditorAudioPlayer;
33643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargistruct MediaExtractor;
34643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
3500f742c087d92e5452d29be1fb668022b5f8a6c7James Dongstruct PreviewPlayer {
3643fcc396614a587851e2b7c4cea2876ec58b8648Chih-Chung Chang    PreviewPlayer(NativeWindowRenderer* renderer);
37643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    ~PreviewPlayer();
38643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
3900f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void setListener(const wp<MediaPlayerBase> &listener);
40643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    void reset();
41643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
42643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    status_t play();
4300f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    status_t pause();
44643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
4500f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    bool isPlaying() const;
4600f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void setSurface(const sp<Surface> &surface);
4700f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void setSurfaceTexture(const sp<ISurfaceTexture> &surfaceTexture);
48643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    status_t seekTo(int64_t timeUs);
49643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
50643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    status_t getVideoDimensions(int32_t *width, int32_t *height) const;
51643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
5200f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
5300f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    // FIXME: Sync between ...
54fa31daff175709d2c58d61d1354daa9495696631Raghavender Palla    void acquireLock();
55fa31daff175709d2c58d61d1354daa9495696631Raghavender Palla    void releaseLock();
56643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
57643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    status_t prepare();
5800f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    status_t prepareAsync();
59daeb5b33861147fda0096f9c794be6f341d884c2James Dong    status_t setDataSource(const char *path);
6000f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    status_t setDataSource(const sp<IStreamSource> &source);
6100f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
6200f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void setAudioSink(const sp<MediaPlayerBase::AudioSink> &audioSink);
6300f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    status_t setLooping(bool shouldLoop);
6400f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    status_t getDuration(int64_t *durationUs);
6500f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    status_t getPosition(int64_t *positionUs);
6600f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
6700f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    uint32_t getSourceSeekFlags() const;
6800f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
6900f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void postAudioEOS(int64_t delayUs = 0ll);
7000f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void postAudioSeekComplete();
71643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
7235cb2de64cb6482a08f446e80733e7d344a0dcacDharmaray Kundargi    status_t loadEffectsSettings(M4VSS3GPP_EffectSettings* pEffectSettings,
73643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi                                 int nEffects);
74643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    status_t loadAudioMixSettings(M4xVSS_AudioMixingSettings* pAudioMixSettings);
75643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    status_t setAudioMixPCMFileHandle(M4OSA_Context pAudioMixPCMFileHandle);
76643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    status_t setAudioMixStoryBoardParam(M4OSA_UInt32 audioMixStoryBoardTS,
77643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi                            M4OSA_UInt32 currentMediaBeginCutTime,
78643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi                            M4OSA_UInt32 currentMediaVolumeVol);
79643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
80643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    status_t setPlaybackBeginTime(uint32_t msec);
81643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    status_t setPlaybackEndTime(uint32_t msec);
82643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    status_t setStoryboardStartTime(uint32_t msec);
83643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    status_t setProgressCallbackInterval(uint32_t cbInterval);
84643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    status_t setMediaRenderingMode(M4xVSS_MediaRendering mode,
85643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi                            M4VIDEOEDITING_VideoFrameSize outputVideoSize);
86643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
87643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    status_t resetJniCallbackTimeStamp();
88643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    status_t setImageClipProperties(uint32_t width, uint32_t height);
89643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    status_t readFirstVideoFrame();
90b2d6e0f74a12e5cce5b429e646172c63346346c3Santosh Madhava    status_t getLastRenderedTimeMs(uint32_t *lastRenderedTimeMs);
91727f9e1e8e1306af761765e480ac5499224db646James Dong    status_t setAudioPlayer(VideoEditorAudioPlayer *audioPlayer);
92643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
93643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargiprivate:
94643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    enum {
95643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi        PLAYING             = 1,
96643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi        LOOPING             = 2,
97643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi        FIRST_FRAME         = 4,
98643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi        PREPARING           = 8,
99643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi        PREPARED            = 16,
100643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi        AT_EOS              = 32,
101643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi        PREPARE_CANCELLED   = 64,
102643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi        CACHE_UNDERRUN      = 128,
103643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi        AUDIO_AT_EOS        = 256,
104643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi        VIDEO_AT_EOS        = 512,
105643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi        AUTO_LOOPING        = 1024,
106e018023b4844fef7880bf5e45f706afcb10c33b6Hong Teng        INFORMED_AV_EOS     = 2048,
10700f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
10800f742c087d92e5452d29be1fb668022b5f8a6c7James Dong        // We are basically done preparing but are currently buffering
10900f742c087d92e5452d29be1fb668022b5f8a6c7James Dong        // sufficient data to begin playback and finish the preparation phase
11000f742c087d92e5452d29be1fb668022b5f8a6c7James Dong        // for good.
11100f742c087d92e5452d29be1fb668022b5f8a6c7James Dong        PREPARING_CONNECTED = 2048,
11200f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
11300f742c087d92e5452d29be1fb668022b5f8a6c7James Dong        // We're triggering a single video event to display the first frame
11400f742c087d92e5452d29be1fb668022b5f8a6c7James Dong        // after the seekpoint.
11500f742c087d92e5452d29be1fb668022b5f8a6c7James Dong        SEEK_PREVIEW        = 4096,
11600f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
11700f742c087d92e5452d29be1fb668022b5f8a6c7James Dong        AUDIO_RUNNING       = 8192,
11800f742c087d92e5452d29be1fb668022b5f8a6c7James Dong        AUDIOPLAYER_STARTED = 16384,
11900f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
12000f742c087d92e5452d29be1fb668022b5f8a6c7James Dong        INCOGNITO           = 32768,
121643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    };
122643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
12300f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    mutable Mutex mLock;
12400f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
12500f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    OMXClient mClient;
12600f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    TimedEventQueue mQueue;
12700f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    bool mQueueStarted;
12800f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    wp<MediaPlayerBase> mListener;
12900f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
13000f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    sp<Surface> mSurface;
13100f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    sp<ANativeWindow> mNativeWindow;
13200f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    sp<MediaPlayerBase::AudioSink> mAudioSink;
13300f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
13400f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    SystemTimeSource mSystemTimeSource;
13500f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    TimeSource *mTimeSource;
13600f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
13700f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    String8 mUri;
13800f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
13900f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    sp<MediaSource> mVideoTrack;
14000f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    sp<MediaSource> mVideoSource;
14100f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    bool mVideoRendererIsPreview;
14200f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
14300f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    sp<MediaSource> mAudioTrack;
14400f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    sp<MediaSource> mAudioSource;
145727f9e1e8e1306af761765e480ac5499224db646James Dong    VideoEditorAudioPlayer *mAudioPlayer;
14600f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    int64_t mDurationUs;
14700f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
14800f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    int32_t mDisplayWidth;
14900f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    int32_t mDisplayHeight;
15000f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
15100f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    uint32_t mFlags;
15200f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    uint32_t mExtractorFlags;
15300f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
15400f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    int64_t mTimeSourceDeltaUs;
15500f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    int64_t mVideoTimeUs;
15600f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
15700f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    enum SeekType {
15800f742c087d92e5452d29be1fb668022b5f8a6c7James Dong        NO_SEEK,
15900f742c087d92e5452d29be1fb668022b5f8a6c7James Dong        SEEK,
16000f742c087d92e5452d29be1fb668022b5f8a6c7James Dong        SEEK_VIDEO_ONLY
16100f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    };
16200f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    SeekType mSeeking;
16300f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
16400f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    bool mSeekNotificationSent;
16500f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    int64_t mSeekTimeUs;
16600f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
16700f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    int64_t mBitrate;  // total bitrate of the file (in bps) or -1 if unknown.
16800f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
16900f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    bool mWatchForAudioSeekComplete;
17000f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    bool mWatchForAudioEOS;
17100f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
17200f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    sp<TimedEventQueue::Event> mVideoEvent;
17300f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    bool mVideoEventPending;
17400f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    sp<TimedEventQueue::Event> mStreamDoneEvent;
17500f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    bool mStreamDoneEventPending;
17600f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    sp<TimedEventQueue::Event> mCheckAudioStatusEvent;
17700f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    bool mAudioStatusEventPending;
17800f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    sp<TimedEventQueue::Event> mVideoLagEvent;
17900f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    bool mVideoLagEventPending;
18000f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
18100f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    sp<TimedEventQueue::Event> mAsyncPrepareEvent;
18200f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    Condition mPreparedCondition;
18300f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    bool mIsAsyncPrepare;
18400f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    status_t mPrepareResult;
18500f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    status_t mStreamDoneStatus;
18600f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
18700f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    MediaBuffer *mVideoBuffer;
18800f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    int64_t mLastVideoTimeUs;
18900f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    ARect mCropRect;
19000f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    int32_t mGivenWidth, mGivenHeight;
19100f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
19200f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
1931c97d9ab52a288d24ea54499de435277cc1a3d68Rajneesh Chowdury    bool mIsChangeSourceRequired;
194643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
19543fcc396614a587851e2b7c4cea2876ec58b8648Chih-Chung Chang    NativeWindowRenderer *mNativeWindowRenderer;
19643fcc396614a587851e2b7c4cea2876ec58b8648Chih-Chung Chang    RenderInput *mVideoRenderer;
197643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
198643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    int32_t mVideoWidth, mVideoHeight;
199643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
200643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    //Data structures used for audio and video effects
201643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    M4VSS3GPP_EffectSettings* mEffectsSettings;
202643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    M4xVSS_AudioMixingSettings* mPreviewPlayerAudioMixSettings;
203643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    M4OSA_Context mAudioMixPCMFileHandle;
204643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    M4OSA_UInt32 mAudioMixStoryBoardTS;
205643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    M4OSA_UInt32 mCurrentMediaBeginCutTime;
206643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    M4OSA_UInt32 mCurrentMediaVolumeValue;
207e6c0750cd2927967f93a8811954f889d23fadb6eDharmaray Kundargi    M4OSA_UInt32 mCurrFramingEffectIndex;
208643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
209643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    uint32_t mNumberEffects;
210643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    uint32_t mPlayBeginTimeMsec;
211643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    uint32_t mPlayEndTimeMsec;
212643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    uint64_t mDecodedVideoTs; // timestamp of current decoded video frame buffer
213643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    uint64_t mDecVideoTsStoryBoard; // timestamp of frame relative to storyboard
214643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    uint32_t mCurrentVideoEffect;
215643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    uint32_t mProgressCbInterval;
216643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    uint32_t mNumberDecVideoFrames; // Counter of number of video frames decoded
217643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    sp<TimedEventQueue::Event> mProgressCbEvent;
218643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    bool mProgressCbEventPending;
219e6c0750cd2927967f93a8811954f889d23fadb6eDharmaray Kundargi    sp<TimedEventQueue::Event> mOverlayUpdateEvent;
220e6c0750cd2927967f93a8811954f889d23fadb6eDharmaray Kundargi    bool mOverlayUpdateEventPending;
221e6c0750cd2927967f93a8811954f889d23fadb6eDharmaray Kundargi    bool mOverlayUpdateEventPosted;
222e6c0750cd2927967f93a8811954f889d23fadb6eDharmaray Kundargi
223643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    M4xVSS_MediaRendering mRenderingMode;
224643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    uint32_t mOutputVideoWidth;
225643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    uint32_t mOutputVideoHeight;
226643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
227643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    uint32_t mStoryboardStartTimeMsec;
228643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
229643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    bool mIsVideoSourceJpg;
230643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    bool mIsFiftiesEffectStarted;
231643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    int64_t mImageFrameTimeUs;
232643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    bool mStartNextPlayer;
233fa31daff175709d2c58d61d1354daa9495696631Raghavender Palla    mutable Mutex mLockControl;
234643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
235643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    M4VIFI_UInt8*  mFrameRGBBuffer;
236643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    M4VIFI_UInt8*  mFrameYUVBuffer;
237643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
23800f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void cancelPlayerEvents_l(bool updateProgressCb = false);
23900f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    status_t setDataSource_l(const sp<MediaExtractor> &extractor);
24000f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    status_t setDataSource_l(const char *path);
24100f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void setNativeWindow_l(const sp<ANativeWindow> &native);
24200f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void reset_l();
24300f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void clear_l();
24400f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    status_t play_l();
24500f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    status_t pause_l(bool at_eos = false);
24600f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    status_t initRenderer_l();
24700f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    status_t initAudioDecoder_l();
24800f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    status_t initVideoDecoder_l(uint32_t flags = 0);
24900f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void notifyVideoSize_l();
25000f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void notifyListener_l(int msg, int ext1 = 0, int ext2 = 0);
25100f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void onVideoEvent();
25200f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void onVideoLagUpdate();
25300f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void onStreamDone();
25400f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void onCheckAudioStatus();
25500f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void onPrepareAsyncEvent();
25600f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
25700f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void finishAsyncPrepare_l();
25800f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void abortPrepare(status_t err);
25900f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
26000f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    status_t startAudioPlayer_l();
26100f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void setVideoSource(const sp<MediaSource>& source);
26200f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    status_t finishSetDataSource_l();
26300f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void setAudioSource(const sp<MediaSource>& source);
26400f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
26500f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    status_t seekTo_l(int64_t timeUs);
26600f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void seekAudioIfNecessary_l();
26700f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void finishSeekIfNecessary(int64_t videoTimeUs);
26800f742c087d92e5452d29be1fb668022b5f8a6c7James Dong
26900f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void postCheckAudioStatusEvent_l(int64_t delayUs);
27000f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void postVideoLagEvent_l();
27100f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void postStreamDoneEvent_l(status_t status);
27200f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void postVideoEvent_l(int64_t delayUs = -1);
273643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    void setVideoPostProcessingNode(
274643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi                    M4VSS3GPP_VideoEffectType type, M4OSA_Bool enable);
275643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    void postProgressCallbackEvent_l();
27600f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void shutdownVideoDecoder_l();
277643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    void onProgressCbEvent();
278643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
279e6c0750cd2927967f93a8811954f889d23fadb6eDharmaray Kundargi    void postOverlayUpdateEvent_l();
280e6c0750cd2927967f93a8811954f889d23fadb6eDharmaray Kundargi    void onUpdateOverlayEvent();
281e6c0750cd2927967f93a8811954f889d23fadb6eDharmaray Kundargi
282643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    status_t setDataSource_l_jpg();
283643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    status_t prepare_l();
284643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    status_t prepareAsync_l();
28500f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void updateBatteryUsage_l();
28643fcc396614a587851e2b7c4cea2876ec58b8648Chih-Chung Chang    void updateSizeToRender(sp<MetaData> meta);
28743fcc396614a587851e2b7c4cea2876ec58b8648Chih-Chung Chang
28800f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void setDuration_l(int64_t durationUs);
28900f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void setPosition_l(int64_t timeUs);
2905bc7fb407ce1bab13d4a4a67d34a1a3192ee3186Dheeraj Sharma
291643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    PreviewPlayer(const PreviewPlayer &);
292643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi    PreviewPlayer &operator=(const PreviewPlayer &);
293643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi};
294643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
295643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi}  // namespace android
296643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
297643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi#endif  // PREVIEW_PLAYER_H_
298643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi
299