19969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang/* 29969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * Copyright (C) 2011 The Android Open Source Project 39969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * 49969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * Licensed under the Apache License, Version 2.0 (the "License"); 59969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * you may not use this file except in compliance with the License. 69969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * You may obtain a copy of the License at 79969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * 89969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * http://www.apache.org/licenses/LICENSE-2.0 99969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * 109969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * Unless required by applicable law or agreed to in writing, software 119969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * distributed under the License is distributed on an "AS IS" BASIS, 129969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * See the License for the specific language governing permissions and 149969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * limitations under the License. 159969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang */ 169969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 179969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#ifndef ANDROID_VE_PREVIEWCONTROLLER_H 189969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#define ANDROID_VE_PREVIEWCONTROLLER_H 199969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 209969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include "VideoEditorPlayer.h" 219969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include "VideoEditorTools.h" 229969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 239969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Changnamespace android { 249969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 259969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang// Callback mechanism from PreviewController to Jni */ 269969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Changtypedef void (*jni_progress_callback_fct)(void* cookie, M4OSA_UInt32 msgType, void *argc); 279969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 283d2d40ac83acbda8c161cae675c372595efd640eJames Dongstruct Surface; 293d2d40ac83acbda8c161cae675c372595efd640eJames Dongstruct PreviewRenderer; 309969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 319969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Changclass VideoEditorPreviewController { 329969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 339969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Changpublic: 349969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang VideoEditorPreviewController(); 353d2d40ac83acbda8c161cae675c372595efd640eJames Dong ~VideoEditorPreviewController(); 369969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 373d2d40ac83acbda8c161cae675c372595efd640eJames Dong M4OSA_ERR loadEditSettings( 383d2d40ac83acbda8c161cae675c372595efd640eJames Dong M4VSS3GPP_EditSettings* pSettings, 393d2d40ac83acbda8c161cae675c372595efd640eJames Dong M4xVSS_AudioMixingSettings* bgmSettings); 409969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 413d2d40ac83acbda8c161cae675c372595efd640eJames Dong M4OSA_ERR setSurface(const sp<Surface>& surface); 429969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 433d2d40ac83acbda8c161cae675c372595efd640eJames Dong M4OSA_ERR startPreview( 443d2d40ac83acbda8c161cae675c372595efd640eJames Dong M4OSA_UInt32 fromMS, M4OSA_Int32 toMs, 453d2d40ac83acbda8c161cae675c372595efd640eJames Dong M4OSA_UInt16 callBackAfterFrameCount, 463d2d40ac83acbda8c161cae675c372595efd640eJames Dong M4OSA_Bool loop) ; 479969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 489969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4OSA_UInt32 stopPreview(); 499969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 503d2d40ac83acbda8c161cae675c372595efd640eJames Dong M4OSA_ERR renderPreviewFrame( 513d2d40ac83acbda8c161cae675c372595efd640eJames Dong const sp<Surface>& surface, 523d2d40ac83acbda8c161cae675c372595efd640eJames Dong VideoEditor_renderPreviewFrameStr* pFrameInfo, 533d2d40ac83acbda8c161cae675c372595efd640eJames Dong VideoEditorCurretEditInfo *pCurrEditInfo); 549969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 553d2d40ac83acbda8c161cae675c372595efd640eJames Dong M4OSA_ERR clearSurface( 563d2d40ac83acbda8c161cae675c372595efd640eJames Dong const sp<Surface>& surface, 573d2d40ac83acbda8c161cae675c372595efd640eJames Dong VideoEditor_renderPreviewFrameStr* pFrameInfo); 589969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 593d2d40ac83acbda8c161cae675c372595efd640eJames Dong M4OSA_Void setJniCallback( 603d2d40ac83acbda8c161cae675c372595efd640eJames Dong void* cookie, 613d2d40ac83acbda8c161cae675c372595efd640eJames Dong jni_progress_callback_fct callbackFct); 629969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 633d2d40ac83acbda8c161cae675c372595efd640eJames Dong status_t setPreviewFrameRenderingMode( 643d2d40ac83acbda8c161cae675c372595efd640eJames Dong M4xVSS_MediaRendering mode, 653d2d40ac83acbda8c161cae675c372595efd640eJames Dong M4VIDEOEDITING_VideoFrameSize outputVideoSize); 669969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 679969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Changprivate: 683d2d40ac83acbda8c161cae675c372595efd640eJames Dong enum { 693d2d40ac83acbda8c161cae675c372595efd640eJames Dong kTotalNumPlayerInstances = 2, 703d2d40ac83acbda8c161cae675c372595efd640eJames Dong kPreviewThreadStackSize = 65536, 713d2d40ac83acbda8c161cae675c372595efd640eJames Dong }; 723d2d40ac83acbda8c161cae675c372595efd640eJames Dong 733d2d40ac83acbda8c161cae675c372595efd640eJames Dong typedef enum { 743d2d40ac83acbda8c161cae675c372595efd640eJames Dong VePlayerIdle = 0, 753d2d40ac83acbda8c161cae675c372595efd640eJames Dong VePlayerBusy, 763d2d40ac83acbda8c161cae675c372595efd640eJames Dong VePlayerAutoStop 773d2d40ac83acbda8c161cae675c372595efd640eJames Dong } PlayerState; 783d2d40ac83acbda8c161cae675c372595efd640eJames Dong 793d2d40ac83acbda8c161cae675c372595efd640eJames Dong typedef enum { 803d2d40ac83acbda8c161cae675c372595efd640eJames Dong OVERLAY_UPDATE = 0, 813d2d40ac83acbda8c161cae675c372595efd640eJames Dong OVERLAY_CLEAR 823d2d40ac83acbda8c161cae675c372595efd640eJames Dong } OverlayState; 833d2d40ac83acbda8c161cae675c372595efd640eJames Dong 843d2d40ac83acbda8c161cae675c372595efd640eJames Dong sp<VideoEditorPlayer> mVePlayer[kTotalNumPlayerInstances]; 853d2d40ac83acbda8c161cae675c372595efd640eJames Dong int mCurrentPlayer; // player instance currently being used 869969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang sp<Surface> mSurface; 879969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang mutable Mutex mLock; 889969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4OSA_Context mThreadContext; 893d2d40ac83acbda8c161cae675c372595efd640eJames Dong PlayerState mPlayerState; 909969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4OSA_Bool mPrepareReqest; 913d2d40ac83acbda8c161cae675c372595efd640eJames Dong M4VSS3GPP_ClipSettings **mClipList; 929969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4OSA_UInt32 mNumberClipsInStoryBoard; 939969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4OSA_UInt32 mNumberClipsToPreview; 949969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4OSA_UInt32 mStartingClipIndex; 959969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4OSA_Bool mPreviewLooping; 969969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4OSA_UInt32 mCallBackAfterFrameCnt; 979969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4VSS3GPP_EffectSettings* mEffectsSettings; 989969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4OSA_UInt32 mNumberEffects; 999969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4OSA_Int32 mCurrentClipNumber; 1009969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4OSA_UInt32 mClipTotalDuration; 1019969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4OSA_UInt32 mCurrentVideoEffect; 1029969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4xVSS_AudioMixingSettings* mBackgroundAudioSetting; 1039969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4OSA_Context mAudioMixPCMFileHandle; 1049969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang PreviewRenderer *mTarget; 1059969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4OSA_Context mJniCookie; 1069969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang jni_progress_callback_fct mJniCallback; 1079969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang VideoEditor_renderPreviewFrameStr mFrameStr; 1089969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4OSA_UInt32 mCurrentPlayedDuration; 1099969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4OSA_UInt32 mCurrentClipDuration; 1109969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4VIDEOEDITING_VideoFrameSize mOutputVideoSize; 1119969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4OSA_UInt32 mFirstPreviewClipBeginTime; 1129969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4OSA_UInt32 mLastPreviewClipEndTime; 1139969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4OSA_UInt32 mVideoStoryBoardTimeMsUptoFirstPreviewClip; 1149969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang OverlayState mOverlayState; 1159969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang int mActivePlayerIndex; 1169969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 1179969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4xVSS_MediaRendering mRenderingMode; 1189969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang uint32_t mOutputVideoWidth; 1199969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang uint32_t mOutputVideoHeight; 1209969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang bool bStopThreadInProgress; 1219969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4OSA_Context mSemThreadWait; 1229969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang bool mIsFiftiesEffectStarted; 1239969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 1249969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang sp<VideoEditorPlayer::VeAudioOutput> mVEAudioSink; 1259969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang VideoEditorAudioPlayer *mVEAudioPlayer; 12643fcc396614a587851e2b7c4cea2876ec58b8648Chih-Chung Chang NativeWindowRenderer* mNativeWindowRenderer; 1279969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 1289969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4VIFI_UInt8* mFrameRGBBuffer; 1299969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4VIFI_UInt8* mFrameYUVBuffer; 1309969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang mutable Mutex mLockSem; 1313d2d40ac83acbda8c161cae675c372595efd640eJames Dong 1323d2d40ac83acbda8c161cae675c372595efd640eJames Dong 1339969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang static M4OSA_ERR preparePlayer(void* param, int playerInstance, int index); 1349969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang static M4OSA_ERR threadProc(M4OSA_Void* param); 1359969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang static void notify(void* cookie, int msg, int ext1, int ext2); 1369969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 1379969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang void setVideoEffectType(M4VSS3GPP_VideoEffectType type, M4OSA_Bool enable); 1389969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 1393d2d40ac83acbda8c161cae675c372595efd640eJames Dong M4OSA_ERR applyVideoEffect( 1403d2d40ac83acbda8c161cae675c372595efd640eJames Dong M4OSA_Void * dataPtr, M4OSA_UInt32 colorFormat, 1413d2d40ac83acbda8c161cae675c372595efd640eJames Dong M4OSA_UInt32 videoWidth, M4OSA_UInt32 videoHeight, 1423d2d40ac83acbda8c161cae675c372595efd640eJames Dong M4OSA_UInt32 timeMs, M4OSA_Void* outPtr); 1439969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 1443d2d40ac83acbda8c161cae675c372595efd640eJames Dong M4OSA_ERR doImageRenderingMode( 1453d2d40ac83acbda8c161cae675c372595efd640eJames Dong M4OSA_Void * dataPtr, 1463d2d40ac83acbda8c161cae675c372595efd640eJames Dong M4OSA_UInt32 colorFormat, M4OSA_UInt32 videoWidth, 1473d2d40ac83acbda8c161cae675c372595efd640eJames Dong M4OSA_UInt32 videoHeight, M4OSA_Void* outPtr); 1489969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 1493d2d40ac83acbda8c161cae675c372595efd640eJames Dong // Don't call me! 1509969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang VideoEditorPreviewController(const VideoEditorPreviewController &); 1513d2d40ac83acbda8c161cae675c372595efd640eJames Dong VideoEditorPreviewController &operator=( 1523d2d40ac83acbda8c161cae675c372595efd640eJames Dong const VideoEditorPreviewController &); 1539969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang}; 1549969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 1559969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang} 1569969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 1573d2d40ac83acbda8c161cae675c372595efd640eJames Dong#endif // ANDROID_VE_PREVIEWCONTROLLER_H 158