1be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi/* 2be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project 3be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi * 4be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License"); 5be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi * you may not use this file except in compliance with the License. 6be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi * You may obtain a copy of the License at 7be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi * 8be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi * http://www.apache.org/licenses/LICENSE-2.0 9be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi * 10be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software 11be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS, 12be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi * See the License for the specific language governing permissions and 14be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi * limitations under the License. 15be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi */ 16be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 17be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi#ifndef PREVIEW_PLAYER_H_ 18be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 19be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi#define PREVIEW_PLAYER_H_ 20be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 21be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi#include "TimedEventQueue.h" 22be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi#include "VideoEditorAudioPlayer.h" 23be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 24be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi#include <media/MediaPlayerInterface.h> 25be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi#include <media/stagefright/DataSource.h> 26be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi#include <media/stagefright/OMXClient.h> 27be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi#include <media/stagefright/TimeSource.h> 28be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi#include <utils/threads.h> 29d30f1bcd661eb469c92ceddaea15ae6fb07e7a92James Dong#include "PreviewPlayerBase.h" 30be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi#include "VideoEditorPreviewController.h" 319133a10ed22acc8b2154ab187f301945bf51a1f9Chih-Chung Chang#include "NativeWindowRenderer.h" 32be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 33be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundarginamespace android { 34be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 35d30f1bcd661eb469c92ceddaea15ae6fb07e7a92James Dongstruct AudioPlayerBase; 36be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargistruct DataSource; 37be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargistruct MediaBuffer; 38be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargistruct MediaExtractor; 39be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargistruct MediaSource; 40be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 41d30f1bcd661eb469c92ceddaea15ae6fb07e7a92James Dongstruct PreviewPlayer : public PreviewPlayerBase { 429133a10ed22acc8b2154ab187f301945bf51a1f9Chih-Chung Chang PreviewPlayer(NativeWindowRenderer* renderer); 43be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi ~PreviewPlayer(); 44be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 45be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi //Override baseclass methods 46be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi void reset(); 47be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 48be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi status_t play(); 49be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 50be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi status_t seekTo(int64_t timeUs); 51be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 52be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi status_t getVideoDimensions(int32_t *width, int32_t *height) const; 53be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 542d44979102ca85d5c4ee68d0388ee2fe37c4ec1aRaghavender Palla void acquireLock(); 552d44979102ca85d5c4ee68d0388ee2fe37c4ec1aRaghavender Palla void releaseLock(); 56be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 57be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi status_t prepare(); 58be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi status_t setDataSource( 59be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi const char *uri, const KeyedVector<String8, String8> *headers); 60be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 61be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi //Added methods 62eb69601111ca9b14e58c4d1f6738bfde2db422afDharmaray Kundargi status_t loadEffectsSettings(M4VSS3GPP_EffectSettings* pEffectSettings, 63be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi int nEffects); 64be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi status_t loadAudioMixSettings(M4xVSS_AudioMixingSettings* pAudioMixSettings); 65be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi status_t setAudioMixPCMFileHandle(M4OSA_Context pAudioMixPCMFileHandle); 66be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi status_t setAudioMixStoryBoardParam(M4OSA_UInt32 audioMixStoryBoardTS, 67be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi M4OSA_UInt32 currentMediaBeginCutTime, 68be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi M4OSA_UInt32 currentMediaVolumeVol); 69be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 70be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi status_t setPlaybackBeginTime(uint32_t msec); 71be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi status_t setPlaybackEndTime(uint32_t msec); 72be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi status_t setStoryboardStartTime(uint32_t msec); 73be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi status_t setProgressCallbackInterval(uint32_t cbInterval); 74be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi status_t setMediaRenderingMode(M4xVSS_MediaRendering mode, 75be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi M4VIDEOEDITING_VideoFrameSize outputVideoSize); 76be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 77be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi status_t resetJniCallbackTimeStamp(); 78be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi status_t setImageClipProperties(uint32_t width, uint32_t height); 79be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi status_t readFirstVideoFrame(); 8074c3e29b43e088a08e12ddc9783c268af7c465b0Santosh Madhava status_t getLastRenderedTimeMs(uint32_t *lastRenderedTimeMs); 81d30f1bcd661eb469c92ceddaea15ae6fb07e7a92James Dong status_t setAudioPlayer(AudioPlayerBase *audioPlayer); 82be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 83be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargiprivate: 84be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi friend struct PreviewPlayerEvent; 85be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 86be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi enum { 87be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi PLAYING = 1, 88be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi LOOPING = 2, 89be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi FIRST_FRAME = 4, 90be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi PREPARING = 8, 91be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi PREPARED = 16, 92be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi AT_EOS = 32, 93be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi PREPARE_CANCELLED = 64, 94be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi CACHE_UNDERRUN = 128, 95be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi AUDIO_AT_EOS = 256, 96be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi VIDEO_AT_EOS = 512, 97be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi AUTO_LOOPING = 1024, 9831195c759708e7e4889424bfe9bfd063f8a155d9Hong Teng INFORMED_AV_EOS = 2048, 99be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi }; 100be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 101be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi void cancelPlayerEvents(bool keepBufferingGoing = false); 102be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi status_t setDataSource_l(const sp<MediaExtractor> &extractor); 103be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi status_t setDataSource_l( 104be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi const char *uri, const KeyedVector<String8, String8> *headers); 105be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi void reset_l(); 106be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi status_t play_l(); 107b70708552e0d20b007b815c60968e6e2f5d21ce5Santosh Madhava status_t initRenderer_l(); 108be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi status_t initAudioDecoder(); 109be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi status_t initVideoDecoder(uint32_t flags = 0); 110be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi void onVideoEvent(); 11176719ec141dfe877351b123fd7886971625d4ddcRajneesh Chowdury void onStreamDone(); 112be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi status_t finishSetDataSource_l(); 113be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi static bool ContinuePreparation(void *cookie); 114be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi void onPrepareAsyncEvent(); 115be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi void finishAsyncPrepare_l(); 116799c0dd8e9f9a67de62345bced92f9f3681324ecDheeraj Sharma status_t startAudioPlayer_l(); 11776719ec141dfe877351b123fd7886971625d4ddcRajneesh Chowdury bool mIsChangeSourceRequired; 118be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 1199133a10ed22acc8b2154ab187f301945bf51a1f9Chih-Chung Chang NativeWindowRenderer *mNativeWindowRenderer; 1209133a10ed22acc8b2154ab187f301945bf51a1f9Chih-Chung Chang RenderInput *mVideoRenderer; 121be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 122be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi int32_t mVideoWidth, mVideoHeight; 123be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 124be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi //Data structures used for audio and video effects 125be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi M4VSS3GPP_EffectSettings* mEffectsSettings; 126be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi M4xVSS_AudioMixingSettings* mPreviewPlayerAudioMixSettings; 127be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi M4OSA_Context mAudioMixPCMFileHandle; 128be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi M4OSA_UInt32 mAudioMixStoryBoardTS; 129be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi M4OSA_UInt32 mCurrentMediaBeginCutTime; 130be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi M4OSA_UInt32 mCurrentMediaVolumeValue; 131246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi M4OSA_UInt32 mCurrFramingEffectIndex; 132be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 133be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi uint32_t mNumberEffects; 134be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi uint32_t mPlayBeginTimeMsec; 135be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi uint32_t mPlayEndTimeMsec; 136be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi uint64_t mDecodedVideoTs; // timestamp of current decoded video frame buffer 137be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi uint64_t mDecVideoTsStoryBoard; // timestamp of frame relative to storyboard 138be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi uint32_t mCurrentVideoEffect; 139be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi uint32_t mProgressCbInterval; 140be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi uint32_t mNumberDecVideoFrames; // Counter of number of video frames decoded 141be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi sp<TimedEventQueue::Event> mProgressCbEvent; 142be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi bool mProgressCbEventPending; 143246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi sp<TimedEventQueue::Event> mOverlayUpdateEvent; 144246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi bool mOverlayUpdateEventPending; 145246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi bool mOverlayUpdateEventPosted; 146246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi 147be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi M4xVSS_MediaRendering mRenderingMode; 148be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi uint32_t mOutputVideoWidth; 149be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi uint32_t mOutputVideoHeight; 150be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 151be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi uint32_t mStoryboardStartTimeMsec; 152be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 153be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi bool mIsVideoSourceJpg; 154be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi bool mIsFiftiesEffectStarted; 155be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi int64_t mImageFrameTimeUs; 156be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi bool mStartNextPlayer; 1572d44979102ca85d5c4ee68d0388ee2fe37c4ec1aRaghavender Palla mutable Mutex mLockControl; 158be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 159be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi M4VIFI_UInt8* mFrameRGBBuffer; 160be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi M4VIFI_UInt8* mFrameYUVBuffer; 161be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 162be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi void setVideoPostProcessingNode( 163be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi M4VSS3GPP_VideoEffectType type, M4OSA_Bool enable); 164be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi void postProgressCallbackEvent_l(); 165be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi void onProgressCbEvent(); 166be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 167246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi void postOverlayUpdateEvent_l(); 168246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi void onUpdateOverlayEvent(); 169246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi 170be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi status_t setDataSource_l_jpg(); 171be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 172be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi status_t prepare_l(); 173be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi status_t prepareAsync_l(); 174be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 1759133a10ed22acc8b2154ab187f301945bf51a1f9Chih-Chung Chang void updateSizeToRender(sp<MetaData> meta); 1769133a10ed22acc8b2154ab187f301945bf51a1f9Chih-Chung Chang 177799c0dd8e9f9a67de62345bced92f9f3681324ecDheeraj Sharma VideoEditorAudioPlayer *mVeAudioPlayer; 178799c0dd8e9f9a67de62345bced92f9f3681324ecDheeraj Sharma 179be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi PreviewPlayer(const PreviewPlayer &); 180be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi PreviewPlayer &operator=(const PreviewPlayer &); 181be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi}; 182be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 183be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi} // namespace android 184be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 185be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi#endif // PREVIEW_PLAYER_H_ 186be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi 187