PreviewPlayer.h revision 43fcc396614a587851e2b7c4cea2876ec58b8648
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/DataSource.h> 26643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi#include <media/stagefright/OMXClient.h> 27643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi#include <media/stagefright/TimeSource.h> 28643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi#include <utils/threads.h> 29c9dedc4e1d0c8343ab1029cb601253826cd67c81James Dong#include "PreviewPlayerBase.h" 30643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi#include "VideoEditorPreviewController.h" 3143fcc396614a587851e2b7c4cea2876ec58b8648Chih-Chung Chang#include "NativeWindowRenderer.h" 32643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 33643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundarginamespace android { 34643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 35c9dedc4e1d0c8343ab1029cb601253826cd67c81James Dongstruct AudioPlayerBase; 36643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargistruct DataSource; 37643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargistruct MediaBuffer; 38643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargistruct MediaExtractor; 39643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargistruct MediaSource; 40643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 41c9dedc4e1d0c8343ab1029cb601253826cd67c81James Dongstruct PreviewPlayer : public PreviewPlayerBase { 4243fcc396614a587851e2b7c4cea2876ec58b8648Chih-Chung Chang PreviewPlayer(NativeWindowRenderer* renderer); 43643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi ~PreviewPlayer(); 44643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 45643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi //Override baseclass methods 46643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi void reset(); 47643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 48643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi status_t play(); 49643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 50643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi status_t seekTo(int64_t timeUs); 51643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 52643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi status_t getVideoDimensions(int32_t *width, int32_t *height) const; 53643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 54fa31daff175709d2c58d61d1354daa9495696631Raghavender Palla void acquireLock(); 55fa31daff175709d2c58d61d1354daa9495696631Raghavender Palla void releaseLock(); 56643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 57643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi status_t prepare(); 58643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi status_t setDataSource( 59643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi const char *uri, const KeyedVector<String8, String8> *headers); 60643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 61643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi //Added methods 6235cb2de64cb6482a08f446e80733e7d344a0dcacDharmaray Kundargi status_t loadEffectsSettings(M4VSS3GPP_EffectSettings* pEffectSettings, 63643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi int nEffects); 64643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi status_t loadAudioMixSettings(M4xVSS_AudioMixingSettings* pAudioMixSettings); 65643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi status_t setAudioMixPCMFileHandle(M4OSA_Context pAudioMixPCMFileHandle); 66643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi status_t setAudioMixStoryBoardParam(M4OSA_UInt32 audioMixStoryBoardTS, 67643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi M4OSA_UInt32 currentMediaBeginCutTime, 68643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi M4OSA_UInt32 currentMediaVolumeVol); 69643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 70643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi status_t setPlaybackBeginTime(uint32_t msec); 71643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi status_t setPlaybackEndTime(uint32_t msec); 72643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi status_t setStoryboardStartTime(uint32_t msec); 73643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi status_t setProgressCallbackInterval(uint32_t cbInterval); 74643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi status_t setMediaRenderingMode(M4xVSS_MediaRendering mode, 75643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi M4VIDEOEDITING_VideoFrameSize outputVideoSize); 76643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 77643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi status_t resetJniCallbackTimeStamp(); 78643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi status_t setImageClipProperties(uint32_t width, uint32_t height); 79643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi status_t readFirstVideoFrame(); 80b2d6e0f74a12e5cce5b429e646172c63346346c3Santosh Madhava status_t getLastRenderedTimeMs(uint32_t *lastRenderedTimeMs); 81c9dedc4e1d0c8343ab1029cb601253826cd67c81James Dong status_t setAudioPlayer(AudioPlayerBase *audioPlayer); 82643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 83643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargiprivate: 84643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi friend struct PreviewPlayerEvent; 85643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 86643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi enum { 87643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi PLAYING = 1, 88643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi LOOPING = 2, 89643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi FIRST_FRAME = 4, 90643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi PREPARING = 8, 91643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi PREPARED = 16, 92643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi AT_EOS = 32, 93643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi PREPARE_CANCELLED = 64, 94643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi CACHE_UNDERRUN = 128, 95643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi AUDIO_AT_EOS = 256, 96643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi VIDEO_AT_EOS = 512, 97643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi AUTO_LOOPING = 1024, 98643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi }; 99643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 100643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi void cancelPlayerEvents(bool keepBufferingGoing = false); 101643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi status_t setDataSource_l(const sp<MediaExtractor> &extractor); 102643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi status_t setDataSource_l( 103643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi const char *uri, const KeyedVector<String8, String8> *headers); 104643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi void reset_l(); 105643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi status_t play_l(); 106bfece17c8f63de4d4b686da50f8ecac2f6f8ec53Santosh Madhava status_t initRenderer_l(); 107643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi status_t initAudioDecoder(); 108643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi status_t initVideoDecoder(uint32_t flags = 0); 109643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi void onVideoEvent(); 1101c97d9ab52a288d24ea54499de435277cc1a3d68Rajneesh Chowdury void onStreamDone(); 111643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi status_t finishSetDataSource_l(); 112643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi static bool ContinuePreparation(void *cookie); 113643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi void onPrepareAsyncEvent(); 114643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi void finishAsyncPrepare_l(); 1155bc7fb407ce1bab13d4a4a67d34a1a3192ee3186Dheeraj Sharma status_t startAudioPlayer_l(); 1161c97d9ab52a288d24ea54499de435277cc1a3d68Rajneesh Chowdury bool mIsChangeSourceRequired; 117643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 11843fcc396614a587851e2b7c4cea2876ec58b8648Chih-Chung Chang NativeWindowRenderer *mNativeWindowRenderer; 11943fcc396614a587851e2b7c4cea2876ec58b8648Chih-Chung Chang RenderInput *mVideoRenderer; 120643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 121643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi int32_t mVideoWidth, mVideoHeight; 122643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 123643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi //Data structures used for audio and video effects 124643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi M4VSS3GPP_EffectSettings* mEffectsSettings; 125643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi M4xVSS_AudioMixingSettings* mPreviewPlayerAudioMixSettings; 126643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi M4OSA_Context mAudioMixPCMFileHandle; 127643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi M4OSA_UInt32 mAudioMixStoryBoardTS; 128643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi M4OSA_UInt32 mCurrentMediaBeginCutTime; 129643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi M4OSA_UInt32 mCurrentMediaVolumeValue; 130e6c0750cd2927967f93a8811954f889d23fadb6eDharmaray Kundargi M4OSA_UInt32 mCurrFramingEffectIndex; 131643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 132643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi uint32_t mNumberEffects; 133643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi uint32_t mPlayBeginTimeMsec; 134643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi uint32_t mPlayEndTimeMsec; 135643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi uint64_t mDecodedVideoTs; // timestamp of current decoded video frame buffer 136643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi uint64_t mDecVideoTsStoryBoard; // timestamp of frame relative to storyboard 137643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi uint32_t mCurrentVideoEffect; 138643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi uint32_t mProgressCbInterval; 139643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi uint32_t mNumberDecVideoFrames; // Counter of number of video frames decoded 140643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi sp<TimedEventQueue::Event> mProgressCbEvent; 141643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi bool mProgressCbEventPending; 142e6c0750cd2927967f93a8811954f889d23fadb6eDharmaray Kundargi sp<TimedEventQueue::Event> mOverlayUpdateEvent; 143e6c0750cd2927967f93a8811954f889d23fadb6eDharmaray Kundargi bool mOverlayUpdateEventPending; 144e6c0750cd2927967f93a8811954f889d23fadb6eDharmaray Kundargi bool mOverlayUpdateEventPosted; 145e6c0750cd2927967f93a8811954f889d23fadb6eDharmaray Kundargi 146643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi M4xVSS_MediaRendering mRenderingMode; 147643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi uint32_t mOutputVideoWidth; 148643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi uint32_t mOutputVideoHeight; 149643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 150643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi uint32_t mStoryboardStartTimeMsec; 151643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 152643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi bool mIsVideoSourceJpg; 153643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi bool mIsFiftiesEffectStarted; 154643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi int64_t mImageFrameTimeUs; 155643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi bool mStartNextPlayer; 156fa31daff175709d2c58d61d1354daa9495696631Raghavender Palla mutable Mutex mLockControl; 157643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 158643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi M4VIFI_UInt8* mFrameRGBBuffer; 159643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi M4VIFI_UInt8* mFrameYUVBuffer; 160643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 161643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi void setVideoPostProcessingNode( 162643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi M4VSS3GPP_VideoEffectType type, M4OSA_Bool enable); 163643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi void postProgressCallbackEvent_l(); 164643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi void onProgressCbEvent(); 165643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 166e6c0750cd2927967f93a8811954f889d23fadb6eDharmaray Kundargi void postOverlayUpdateEvent_l(); 167e6c0750cd2927967f93a8811954f889d23fadb6eDharmaray Kundargi void onUpdateOverlayEvent(); 168e6c0750cd2927967f93a8811954f889d23fadb6eDharmaray Kundargi 169643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi status_t setDataSource_l_jpg(); 170643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 171643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi status_t prepare_l(); 172643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi status_t prepareAsync_l(); 173643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 17443fcc396614a587851e2b7c4cea2876ec58b8648Chih-Chung Chang void updateSizeToRender(sp<MetaData> meta); 17543fcc396614a587851e2b7c4cea2876ec58b8648Chih-Chung Chang 1765bc7fb407ce1bab13d4a4a67d34a1a3192ee3186Dheeraj Sharma VideoEditorAudioPlayer *mVeAudioPlayer; 1775bc7fb407ce1bab13d4a4a67d34a1a3192ee3186Dheeraj Sharma 178643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi PreviewPlayer(const PreviewPlayer &); 179643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi PreviewPlayer &operator=(const PreviewPlayer &); 180643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi}; 181643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 182643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi} // namespace android 183643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 184643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi#endif // PREVIEW_PLAYER_H_ 185643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 186