• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2011 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef ANDROID_VE_PREVIEWCONTROLLER_H
18 #define ANDROID_VE_PREVIEWCONTROLLER_H
19 
20 #include "VideoEditorPlayer.h"
21 #include "VideoEditorTools.h"
22 
23 namespace android {
24 
25 // Callback mechanism from PreviewController to Jni  */
26 typedef void (*jni_progress_callback_fct)(void* cookie, M4OSA_UInt32 msgType, void *argc);
27 
28 struct Surface;
29 struct PreviewRenderer;
30 
31 class VideoEditorPreviewController {
32 
33 public:
34     VideoEditorPreviewController();
35     ~VideoEditorPreviewController();
36 
37     M4OSA_ERR loadEditSettings(
38             M4VSS3GPP_EditSettings* pSettings,
39             M4xVSS_AudioMixingSettings* bgmSettings);
40 
41     M4OSA_ERR setSurface(const sp<Surface>& surface);
42 
43     M4OSA_ERR startPreview(
44             M4OSA_UInt32 fromMS, M4OSA_Int32 toMs,
45             M4OSA_UInt16 callBackAfterFrameCount,
46             M4OSA_Bool loop) ;
47 
48     M4OSA_UInt32 stopPreview();
49 
50     M4OSA_ERR renderPreviewFrame(
51             const sp<Surface>& surface,
52             VideoEditor_renderPreviewFrameStr* pFrameInfo,
53             VideoEditorCurretEditInfo *pCurrEditInfo);
54 
55     M4OSA_ERR clearSurface(
56             const sp<Surface>& surface,
57             VideoEditor_renderPreviewFrameStr* pFrameInfo);
58 
59     M4OSA_Void setJniCallback(
60             void* cookie,
61             jni_progress_callback_fct callbackFct);
62 
63     status_t setPreviewFrameRenderingMode(
64             M4xVSS_MediaRendering mode,
65             M4VIDEOEDITING_VideoFrameSize outputVideoSize);
66 
67 private:
68     enum {
69         kTotalNumPlayerInstances = 2,
70         kPreviewThreadStackSize = 65536,
71     };
72 
73     typedef enum {
74         VePlayerIdle = 0,
75         VePlayerBusy,
76         VePlayerAutoStop
77     } PlayerState;
78 
79     typedef enum {
80         OVERLAY_UPDATE = 0,
81         OVERLAY_CLEAR
82     } OverlayState;
83 
84     sp<VideoEditorPlayer> mVePlayer[kTotalNumPlayerInstances];
85     int mCurrentPlayer;  // player instance currently being used
86     sp<Surface>  mSurface;
87     mutable Mutex mLock;
88     M4OSA_Context mThreadContext;
89     PlayerState mPlayerState;
90     M4OSA_Bool    mPrepareReqest;
91     M4VSS3GPP_ClipSettings **mClipList;
92     M4OSA_UInt32 mNumberClipsInStoryBoard;
93     M4OSA_UInt32 mNumberClipsToPreview;
94     M4OSA_UInt32 mStartingClipIndex;
95     M4OSA_Bool mPreviewLooping;
96     M4OSA_UInt32 mCallBackAfterFrameCnt;
97     M4VSS3GPP_EffectSettings* mEffectsSettings;
98     M4OSA_UInt32 mNumberEffects;
99     M4OSA_Int32 mCurrentClipNumber;
100     M4OSA_UInt32 mClipTotalDuration;
101     M4OSA_UInt32 mCurrentVideoEffect;
102     M4xVSS_AudioMixingSettings* mBackgroundAudioSetting;
103     M4OSA_Context mAudioMixPCMFileHandle;
104     PreviewRenderer *mTarget;
105     M4OSA_Context mJniCookie;
106     jni_progress_callback_fct mJniCallback;
107     VideoEditor_renderPreviewFrameStr mFrameStr;
108     M4OSA_UInt32 mCurrentPlayedDuration;
109     M4OSA_UInt32 mCurrentClipDuration;
110     M4VIDEOEDITING_VideoFrameSize mOutputVideoSize;
111     M4OSA_UInt32 mFirstPreviewClipBeginTime;
112     M4OSA_UInt32 mLastPreviewClipEndTime;
113     M4OSA_UInt32 mVideoStoryBoardTimeMsUptoFirstPreviewClip;
114     OverlayState mOverlayState;
115     int mActivePlayerIndex;
116 
117     M4xVSS_MediaRendering mRenderingMode;
118     uint32_t mOutputVideoWidth;
119     uint32_t mOutputVideoHeight;
120     bool bStopThreadInProgress;
121     M4OSA_Context mSemThreadWait;
122     bool mIsFiftiesEffectStarted;
123 
124     sp<VideoEditorPlayer::VeAudioOutput> mVEAudioSink;
125     VideoEditorAudioPlayer *mVEAudioPlayer;
126     NativeWindowRenderer* mNativeWindowRenderer;
127 
128     M4VIFI_UInt8*  mFrameRGBBuffer;
129     M4VIFI_UInt8*  mFrameYUVBuffer;
130     mutable Mutex mLockSem;
131 
132 
133     static M4OSA_ERR preparePlayer(void* param, int playerInstance, int index);
134     static M4OSA_ERR threadProc(M4OSA_Void* param);
135     static void notify(void* cookie, int msg, int ext1, int ext2);
136 
137     void setVideoEffectType(M4VSS3GPP_VideoEffectType type, M4OSA_Bool enable);
138 
139     M4OSA_ERR applyVideoEffect(
140             M4OSA_Void * dataPtr, M4OSA_UInt32 colorFormat,
141             M4OSA_UInt32 videoWidth, M4OSA_UInt32 videoHeight,
142             M4OSA_UInt32 timeMs, M4OSA_Void* outPtr);
143 
144     M4OSA_ERR doImageRenderingMode(
145             M4OSA_Void * dataPtr,
146             M4OSA_UInt32 colorFormat, M4OSA_UInt32 videoWidth,
147             M4OSA_UInt32 videoHeight, M4OSA_Void* outPtr);
148 
149     // Don't call me!
150     VideoEditorPreviewController(const VideoEditorPreviewController &);
151     VideoEditorPreviewController &operator=(
152             const VideoEditorPreviewController &);
153 };
154 
155 }
156 
157 #endif // ANDROID_VE_PREVIEWCONTROLLER_H
158