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