VideoEditorPreviewController.cpp revision 2d44979102ca85d5c4ee68d0388ee2fe37c4ec1a
1be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi/*
2be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi * Copyright (C) 2011 NXP Software
3be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project
4be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi *
5be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License");
6be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi * you may not use this file except in compliance with the License.
7be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi * You may obtain a copy of the License at
8be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi *
9be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi *      http://www.apache.org/licenses/LICENSE-2.0
10be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi *
11be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software
12be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS,
13be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi * See the License for the specific language governing permissions and
15be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi * limitations under the License.
16be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi */
17be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
18be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi#define LOG_NDEBUG 1
19be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi#define LOG_TAG "VideoEditorPreviewController"
20be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi#include "VideoEditorPreviewController.h"
21be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
22be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundarginamespace android {
234c9874dc75d596e095109df21718325a5603d225Dharmaray Kundargi
24be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi#define PREVIEW_THREAD_STACK_SIZE                           (65536)
25be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
26be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray KundargiVideoEditorPreviewController::VideoEditorPreviewController()
27be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    : mCurrentPlayer(0),
28be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi      mThreadContext(NULL),
29be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi      mPlayerState(VePlayerIdle),
3009949afb1c686c4b4ee7d1520b90d793cb8ee869Dharmaray Kundargi      mPrepareReqest(M4OSA_FALSE),
31be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi      mClipList(NULL),
32be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi      mNumberClipsInStoryBoard(0),
33be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi      mNumberClipsToPreview(0),
34be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi      mStartingClipIndex(0),
35be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi      mPreviewLooping(M4OSA_FALSE),
36be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi      mCallBackAfterFrameCnt(0),
37be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi      mEffectsSettings(NULL),
38be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi      mNumberEffects(0),
39be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi      mCurrentClipNumber(-1),
40be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi      mClipTotalDuration(0),
41be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi      mCurrentVideoEffect(VIDEO_EFFECT_NONE),
421156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru      mBackgroundAudioSetting(NULL),
431156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru      mAudioMixPCMFileHandle(NULL),
44be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi      mTarget(NULL),
45be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi      mJniCookie(NULL),
46be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi      mJniCallback(NULL),
47be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi      mCurrentPlayedDuration(0),
48be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi      mCurrentClipDuration(0),
491156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru      mVideoStoryBoardTimeMsUptoFirstPreviewClip(0),
501156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru      mOverlayState(OVERLAY_CLEAR),
511156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru      mActivePlayerIndex(0),
52be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi      mOutputVideoWidth(0),
53be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi      mOutputVideoHeight(0),
54be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi      bStopThreadInProgress(false),
55be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi      mSemThreadWait(NULL) {
56be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    LOGV("VideoEditorPreviewController");
57be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    mRenderingMode = M4xVSS_kBlackBorders;
58be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    mIsFiftiesEffectStarted = false;
59be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
60be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    for (int i=0; i<NBPLAYER_INSTANCES; i++) {
61be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mVePlayer[i] = NULL;
62be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
63be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi}
64be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
65be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray KundargiVideoEditorPreviewController::~VideoEditorPreviewController() {
66be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4OSA_UInt32 i = 0;
67be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
68be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    LOGV("~VideoEditorPreviewController");
69be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
70be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    // Stop the thread if its still running
71be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if(mThreadContext != NULL) {
72be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        err = M4OSA_threadSyncStop(mThreadContext);
73be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        if(err != M4NO_ERROR) {
74be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            LOGV("~VideoEditorPreviewController: error 0x%x \
75be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            in trying to stop thread", err);
76be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            // Continue even if error
77be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
78be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
79be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        err = M4OSA_threadSyncClose(mThreadContext);
80be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        if(err != M4NO_ERROR) {
81be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            LOGE("~VideoEditorPreviewController: error 0x%x \
821156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru            in trying to close thread", (unsigned int) err);
83be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            // Continue even if error
84be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
85be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
86be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mThreadContext = NULL;
87be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
88be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
89be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    for (int playerInst=0; playerInst<NBPLAYER_INSTANCES;
90be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi         playerInst++) {
91be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        if(mVePlayer[playerInst] != NULL) {
92be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            LOGV("clearing mVePlayer %d", playerInst);
93be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mVePlayer[playerInst].clear();
94be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
95be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
96be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
97be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if(mClipList != NULL) {
98be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        // Clean up
99be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        for(i=0;i<mNumberClipsInStoryBoard;i++)
100be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        {
101be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            if(mClipList[i]->pFile != NULL) {
102be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                M4OSA_free((M4OSA_MemAddr32)mClipList[i]->pFile);
103be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                mClipList[i]->pFile = NULL;
104be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            }
105be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
106be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            M4OSA_free((M4OSA_MemAddr32)mClipList[i]);
107be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
108be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        M4OSA_free((M4OSA_MemAddr32)mClipList);
109be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mClipList = NULL;
110be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
111be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
112be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if(mEffectsSettings) {
113be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        for(i=0;i<mNumberEffects;i++) {
114be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            if(mEffectsSettings[i].xVSS.pFramingBuffer != NULL) {
115be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                M4OSA_free(
116be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                (M4OSA_MemAddr32)mEffectsSettings[i].xVSS.pFramingBuffer->pac_data);
117be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
118be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                M4OSA_free(
119be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                (M4OSA_MemAddr32)mEffectsSettings[i].xVSS.pFramingBuffer);
120be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
121be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                mEffectsSettings[i].xVSS.pFramingBuffer = NULL;
122be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            }
123be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
124be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        M4OSA_free((M4OSA_MemAddr32)mEffectsSettings);
125be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mEffectsSettings = NULL;
126be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
127be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
128c46e0e43762debf25e2c10953a0f420850891531Dheeraj Sharma    if (mAudioMixPCMFileHandle) {
129c46e0e43762debf25e2c10953a0f420850891531Dheeraj Sharma        err = M4OSA_fileReadClose (mAudioMixPCMFileHandle);
130c46e0e43762debf25e2c10953a0f420850891531Dheeraj Sharma        mAudioMixPCMFileHandle = M4OSA_NULL;
131c46e0e43762debf25e2c10953a0f420850891531Dheeraj Sharma    }
132c46e0e43762debf25e2c10953a0f420850891531Dheeraj Sharma
133f842b7f341b76511b7bcd634c4cccd2eba728ef0Santosh Madhava    if (mBackgroundAudioSetting != NULL) {
134f842b7f341b76511b7bcd634c4cccd2eba728ef0Santosh Madhava        M4OSA_free((M4OSA_MemAddr32)mBackgroundAudioSetting);
135f842b7f341b76511b7bcd634c4cccd2eba728ef0Santosh Madhava        mBackgroundAudioSetting = NULL;
136f842b7f341b76511b7bcd634c4cccd2eba728ef0Santosh Madhava    }
137f842b7f341b76511b7bcd634c4cccd2eba728ef0Santosh Madhava
138be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if(mTarget != NULL) {
139be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        delete mTarget;
140be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mTarget = NULL;
141be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
142be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
14372eee21a70ab5aa54eb752918cf02b6d2cc3a6c2Dheeraj Sharma    mOverlayState = OVERLAY_CLEAR;
14472eee21a70ab5aa54eb752918cf02b6d2cc3a6c2Dheeraj Sharma
145be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    LOGV("~VideoEditorPreviewController returns");
146be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi}
147be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
148be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray KundargiM4OSA_ERR VideoEditorPreviewController::loadEditSettings(
149be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4VSS3GPP_EditSettings* pSettings,M4xVSS_AudioMixingSettings* bgmSettings) {
150be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
151be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4OSA_UInt32 i = 0, iClipDuration = 0, rgbSize = 0;
152be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4VIFI_UInt8 *tmp = NULL;
153be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
154be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
155be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    LOGV("loadEditSettings");
156be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    LOGV("loadEditSettings Channels = %d, sampling Freq %d",
157be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi          bgmSettings->uiNbChannels, bgmSettings->uiSamplingFrequency  );
158be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi          bgmSettings->uiSamplingFrequency = 32000;
159be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
160be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    LOGV("loadEditSettings Channels = %d, sampling Freq %d",
161be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi          bgmSettings->uiNbChannels, bgmSettings->uiSamplingFrequency  );
162be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    Mutex::Autolock autoLock(mLock);
163be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
164be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    // Clean up any previous Edit settings before loading new ones
165be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    mCurrentVideoEffect = VIDEO_EFFECT_NONE;
166be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
167be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if(mAudioMixPCMFileHandle) {
168be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        err = M4OSA_fileReadClose (mAudioMixPCMFileHandle);
169be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mAudioMixPCMFileHandle = M4OSA_NULL;
170be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
171be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
172be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if(mBackgroundAudioSetting != NULL) {
173be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        M4OSA_free((M4OSA_MemAddr32)mBackgroundAudioSetting);
174be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mBackgroundAudioSetting = NULL;
175be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
176be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
177be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if(mClipList != NULL) {
178be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        // Clean up
179be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        for(i=0;i<mNumberClipsInStoryBoard;i++)
180be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        {
181be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            if(mClipList[i]->pFile != NULL) {
182be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                M4OSA_free((M4OSA_MemAddr32)mClipList[i]->pFile);
183be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                mClipList[i]->pFile = NULL;
184be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            }
185be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
186be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            M4OSA_free((M4OSA_MemAddr32)mClipList[i]);
187be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
188be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        M4OSA_free((M4OSA_MemAddr32)mClipList);
189be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mClipList = NULL;
190be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
191be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
192be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if(mEffectsSettings) {
193be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        for(i=0;i<mNumberEffects;i++) {
194be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            if(mEffectsSettings[i].xVSS.pFramingBuffer != NULL) {
195be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                M4OSA_free(
196be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                (M4OSA_MemAddr32)mEffectsSettings[i].xVSS.pFramingBuffer->pac_data);
197be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
198be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                M4OSA_free(
199be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                (M4OSA_MemAddr32)mEffectsSettings[i].xVSS.pFramingBuffer);
200be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
201be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                mEffectsSettings[i].xVSS.pFramingBuffer = NULL;
202be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            }
203be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
204be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        M4OSA_free((M4OSA_MemAddr32)mEffectsSettings);
205be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mEffectsSettings = NULL;
206be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
207be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
208be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if(mClipList == NULL) {
209be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mNumberClipsInStoryBoard = pSettings->uiClipNumber;
210be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        LOGV("loadEditSettings: # of Clips = %d", mNumberClipsInStoryBoard);
211be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
212be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mClipList = (M4VSS3GPP_ClipSettings**)M4OSA_malloc(
213be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi         sizeof(M4VSS3GPP_ClipSettings*)*pSettings->uiClipNumber, M4VS,
214be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi         (M4OSA_Char*)"LvPP, copy of pClipList");
215be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
216be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        if(NULL == mClipList) {
217be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            LOGE("loadEditSettings: Malloc error");
218be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            return M4ERR_ALLOC;
219be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
220be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        M4OSA_memset((M4OSA_MemAddr8)mClipList,
221be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi         sizeof(M4VSS3GPP_ClipSettings*)*pSettings->uiClipNumber, 0);
222be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
223be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        for(i=0;i<pSettings->uiClipNumber;i++) {
224be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
225be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            // Allocate current clip
226be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mClipList[i] =
227be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             (M4VSS3GPP_ClipSettings*)M4OSA_malloc(
228be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi              sizeof(M4VSS3GPP_ClipSettings),M4VS,(M4OSA_Char*)"clip settings");
229be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
230be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            if(mClipList[i] == NULL) {
231be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
2321156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru                LOGE("loadEditSettings: Allocation error for mClipList[%d]", (int)i);
233be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                return M4ERR_ALLOC;
234be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            }
235be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            // Copy plain structure
236be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            M4OSA_memcpy((M4OSA_MemAddr8)mClipList[i],
237be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             (M4OSA_MemAddr8)pSettings->pClipList[i],
238be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             sizeof(M4VSS3GPP_ClipSettings));
239be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
240be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            if(NULL != pSettings->pClipList[i]->pFile) {
241be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                mClipList[i]->pFile = (M4OSA_Char*)M4OSA_malloc(
242be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                pSettings->pClipList[i]->filePathSize, M4VS,
243be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                (M4OSA_Char*)"pClipSettingsDest->pFile");
244be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
245be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                if(NULL == mClipList[i]->pFile)
246be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                {
247be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    LOGE("loadEditSettings : ERROR allocating filename");
248be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    return M4ERR_ALLOC;
249be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                }
250be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
251be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                M4OSA_memcpy((M4OSA_MemAddr8)mClipList[i]->pFile,
252be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                 (M4OSA_MemAddr8)pSettings->pClipList[i]->pFile,
253be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                 pSettings->pClipList[i]->filePathSize);
254be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            }
255be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            else {
256be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                LOGE("NULL file path");
257be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                return M4ERR_PARAMETER;
258be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            }
259be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
260be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            // Calculate total duration of all clips
261be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            iClipDuration = pSettings->pClipList[i]->uiEndCutTime -
262be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             pSettings->pClipList[i]->uiBeginCutTime;
263be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
264be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mClipTotalDuration = mClipTotalDuration+iClipDuration;
265be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
266be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
267be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
268be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if(mEffectsSettings == NULL) {
269be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mNumberEffects = pSettings->nbEffects;
270be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        LOGV("loadEditSettings: mNumberEffects = %d", mNumberEffects);
271be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
272be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        if(mNumberEffects != 0) {
273be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mEffectsSettings = (M4VSS3GPP_EffectSettings*)M4OSA_malloc(
274be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             mNumberEffects*sizeof(M4VSS3GPP_EffectSettings),
275be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             M4VS, (M4OSA_Char*)"effects settings");
276be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
277be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            if(mEffectsSettings == NULL) {
278be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                LOGE("loadEffectsSettings: Allocation error");
279be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                return M4ERR_ALLOC;
280be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            }
281be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
282be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            M4OSA_memset((M4OSA_MemAddr8)mEffectsSettings,
283be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             mNumberEffects*sizeof(M4VSS3GPP_EffectSettings), 0);
284be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
285be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            for(i=0;i<mNumberEffects;i++) {
286be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
287be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                mEffectsSettings[i].xVSS.pFramingFilePath = NULL;
288be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                mEffectsSettings[i].xVSS.pFramingBuffer = NULL;
289be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                mEffectsSettings[i].xVSS.pTextBuffer = NULL;
290be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
291be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                M4OSA_memcpy((M4OSA_MemAddr8)&(mEffectsSettings[i]),
292be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                 (M4OSA_MemAddr8)&(pSettings->Effects[i]),
293be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                 sizeof(M4VSS3GPP_EffectSettings));
294be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
295be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                if(pSettings->Effects[i].VideoEffectType ==
2961156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru                 (M4VSS3GPP_VideoEffectType)M4xVSS_kVideoEffectType_Framing) {
297be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    // Allocate the pFraming RGB buffer
298be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    mEffectsSettings[i].xVSS.pFramingBuffer =
299be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    (M4VIFI_ImagePlane *)M4OSA_malloc(sizeof(M4VIFI_ImagePlane),
300be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                     M4VS, (M4OSA_Char*)"lvpp framing buffer");
301be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
302be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    if(mEffectsSettings[i].xVSS.pFramingBuffer == NULL) {
303be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                        LOGE("loadEffectsSettings:Alloc error for pFramingBuf");
304be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                        M4OSA_free((M4OSA_MemAddr32)mEffectsSettings);
305be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                        mEffectsSettings = NULL;
306be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                        return M4ERR_ALLOC;
307be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    }
308be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
309be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    // Allocate the pac_data (RGB)
310be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    if(pSettings->Effects[i].xVSS.rgbType == M4VSS3GPP_kRGB565){
311be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                        rgbSize =
312be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                         pSettings->Effects[i].xVSS.pFramingBuffer->u_width *
313be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                         pSettings->Effects[i].xVSS.pFramingBuffer->u_height*2;
314be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    }
315be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    else if(
316be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                     pSettings->Effects[i].xVSS.rgbType == M4VSS3GPP_kRGB888) {
317be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                        rgbSize =
318be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                         pSettings->Effects[i].xVSS.pFramingBuffer->u_width *
319be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                         pSettings->Effects[i].xVSS.pFramingBuffer->u_height*3;
320be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    }
321be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    else {
322be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                        LOGE("loadEffectsSettings: wrong RGB type");
323be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                        M4OSA_free((M4OSA_MemAddr32)mEffectsSettings);
324be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                        mEffectsSettings = NULL;
325be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                        return M4ERR_PARAMETER;
326be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    }
327be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
328be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    tmp = (M4VIFI_UInt8 *)M4OSA_malloc(rgbSize, M4VS,
329be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                     (M4OSA_Char*)"framing buffer pac_data");
330be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
331be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    if(tmp == NULL) {
332be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                        LOGE("loadEffectsSettings:Alloc error pFramingBuf pac");
333be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                        M4OSA_free((M4OSA_MemAddr32)mEffectsSettings);
334be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                        mEffectsSettings = NULL;
335be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                        M4OSA_free(
336be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                        (M4OSA_MemAddr32)mEffectsSettings[i].xVSS.pFramingBuffer);
337be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
338be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                        mEffectsSettings[i].xVSS.pFramingBuffer = NULL;
339be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                        return M4ERR_ALLOC;
340be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    }
341be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    /* Initialize the pFramingBuffer*/
342be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    mEffectsSettings[i].xVSS.pFramingBuffer->pac_data = tmp;
343be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    mEffectsSettings[i].xVSS.pFramingBuffer->u_height =
344be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                     pSettings->Effects[i].xVSS.pFramingBuffer->u_height;
345be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
346be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    mEffectsSettings[i].xVSS.pFramingBuffer->u_width =
347be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                     pSettings->Effects[i].xVSS.pFramingBuffer->u_width;
348be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
349be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    mEffectsSettings[i].xVSS.pFramingBuffer->u_stride =
350be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                     pSettings->Effects[i].xVSS.pFramingBuffer->u_stride;
351be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
352be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    mEffectsSettings[i].xVSS.pFramingBuffer->u_topleft =
353be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                     pSettings->Effects[i].xVSS.pFramingBuffer->u_topleft;
354be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
355be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    mEffectsSettings[i].xVSS.uialphaBlendingStart =
356be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                     pSettings->Effects[i].xVSS.uialphaBlendingStart;
357be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
358be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    mEffectsSettings[i].xVSS.uialphaBlendingMiddle =
359be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                     pSettings->Effects[i].xVSS.uialphaBlendingMiddle;
360be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
361be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    mEffectsSettings[i].xVSS.uialphaBlendingEnd =
362be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                     pSettings->Effects[i].xVSS.uialphaBlendingEnd;
363be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
364be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    mEffectsSettings[i].xVSS.uialphaBlendingFadeInTime =
365be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                     pSettings->Effects[i].xVSS.uialphaBlendingFadeInTime;
366be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    mEffectsSettings[i].xVSS.uialphaBlendingFadeOutTime =
367be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                     pSettings->Effects[i].xVSS.uialphaBlendingFadeOutTime;
368be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
369be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    // Copy the pFraming data
370be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    M4OSA_memcpy((M4OSA_MemAddr8)
371be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    mEffectsSettings[i].xVSS.pFramingBuffer->pac_data,
372be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    (M4OSA_MemAddr8)pSettings->Effects[i].xVSS.pFramingBuffer->pac_data,
373be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    rgbSize);
374be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
375be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    mEffectsSettings[i].xVSS.rgbType =
376be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                     pSettings->Effects[i].xVSS.rgbType;
377be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                }
378be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            }
379be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
380be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
381be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
382be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if (mBackgroundAudioSetting == NULL) {
383be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
384be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mBackgroundAudioSetting = (M4xVSS_AudioMixingSettings*)M4OSA_malloc(
385be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        sizeof(M4xVSS_AudioMixingSettings), M4VS,
386be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        (M4OSA_Char*)"LvPP, copy of bgmSettings");
387be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
388be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        if(NULL == mBackgroundAudioSetting) {
389be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            LOGE("loadEditSettings: mBackgroundAudioSetting Malloc failed");
390be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            return M4ERR_ALLOC;
391be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
392be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
393be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        M4OSA_memset((M4OSA_MemAddr8)mBackgroundAudioSetting, sizeof(M4xVSS_AudioMixingSettings*), 0);
394be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        M4OSA_memcpy((M4OSA_MemAddr8)mBackgroundAudioSetting, (M4OSA_MemAddr8)bgmSettings, sizeof(M4xVSS_AudioMixingSettings));
395be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
396be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        if ( mBackgroundAudioSetting->pFile != M4OSA_NULL ) {
397be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
398be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mBackgroundAudioSetting->pFile = (M4OSA_Void*) bgmSettings->pPCMFilePath;
399be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mBackgroundAudioSetting->uiNbChannels = 2;
400be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mBackgroundAudioSetting->uiSamplingFrequency = 32000;
401be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
402be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
403be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        // Open the BG file
404be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        if ( mBackgroundAudioSetting->pFile != M4OSA_NULL ) {
405be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            err = M4OSA_fileReadOpen(&mAudioMixPCMFileHandle,
406be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             mBackgroundAudioSetting->pFile, M4OSA_kFileRead);
407be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
408be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            if (err != M4NO_ERROR) {
409be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                LOGE("loadEditSettings: mBackgroundAudio PCM File open failed");
410be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                return M4ERR_PARAMETER;
411be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            }
412be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
413be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
414be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
415be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    mOutputVideoSize = pSettings->xVSS.outputVideoSize;
416be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    mFrameStr.pBuffer = M4OSA_NULL;
417be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    return M4NO_ERROR;
418be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi}
419be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
420be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray KundargiM4OSA_ERR VideoEditorPreviewController::setSurface(const sp<Surface> &surface) {
421be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    LOGV("setSurface");
422be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    Mutex::Autolock autoLock(mLock);
423be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
424be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    mSurface = surface;
425be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    mISurface = surface->getISurface();
426be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    LOGV("setSurface: mISurface = %p", mISurface.get());
427be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    return M4NO_ERROR;
428be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi}
429be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
430be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray KundargiM4OSA_ERR VideoEditorPreviewController::startPreview(
431be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4OSA_UInt32 fromMS, M4OSA_Int32 toMs, M4OSA_UInt16 callBackAfterFrameCount,
432be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4OSA_Bool loop) {
433be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
434be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
435be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4OSA_UInt32 i = 0, iIncrementedDuration = 0;
436be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    LOGV("startPreview");
437be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
4381156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru    if(fromMS > (M4OSA_UInt32)toMs) {
439be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        LOGE("startPreview: fromMS > toMs");
440be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        return M4ERR_PARAMETER;
441be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
442be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
443be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if(toMs == 0) {
444be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        LOGE("startPreview: toMs is 0");
445be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        return M4ERR_PARAMETER;
446be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
447be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
448be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    // If already started, then stop preview first
449be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    for(int playerInst=0; playerInst<NBPLAYER_INSTANCES; playerInst++) {
450be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        if(mVePlayer[playerInst] != NULL) {
451be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            LOGV("startPreview: stopping previously started preview playback");
452be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            stopPreview();
453be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
454be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
455be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
456be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
457be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    // If renderPreview was called previously, then delete Renderer object first
458be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if(mTarget != NULL) {
459be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        LOGV("startPreview: delete previous PreviewRenderer");
460be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        delete mTarget;
461be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mTarget = NULL;
462be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
463be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
46476719ec141dfe877351b123fd7886971625d4ddcRajneesh Chowdury    // Create Audio player to be used for entire
46576719ec141dfe877351b123fd7886971625d4ddcRajneesh Chowdury    // storyboard duration
46676719ec141dfe877351b123fd7886971625d4ddcRajneesh Chowdury    mVEAudioSink = new VideoEditorPlayer::VeAudioOutput();
46776719ec141dfe877351b123fd7886971625d4ddcRajneesh Chowdury    mVEAudioPlayer = new VideoEditorAudioPlayer(mVEAudioSink);
46876719ec141dfe877351b123fd7886971625d4ddcRajneesh Chowdury    mVEAudioPlayer->setAudioMixSettings(mBackgroundAudioSetting);
46976719ec141dfe877351b123fd7886971625d4ddcRajneesh Chowdury    mVEAudioPlayer->setAudioMixPCMFileHandle(mAudioMixPCMFileHandle);
47076719ec141dfe877351b123fd7886971625d4ddcRajneesh Chowdury
471be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    LOGV("startPreview: loop = %d", loop);
472be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    mPreviewLooping = loop;
473be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
474be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    LOGV("startPreview: callBackAfterFrameCount = %d", callBackAfterFrameCount);
475be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    mCallBackAfterFrameCnt = callBackAfterFrameCount;
476be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
477be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    for (int playerInst=0; playerInst<NBPLAYER_INSTANCES; playerInst++) {
478be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mVePlayer[playerInst] = new VideoEditorPlayer();
479be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        if(mVePlayer[playerInst] == NULL) {
480be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            LOGE("startPreview:Error creating VideoEditorPlayer %d",playerInst);
481be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            return M4ERR_ALLOC;
482be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
483be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        LOGV("startPreview: object created");
484be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
485be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mVePlayer[playerInst]->setNotifyCallback(this,(notify_callback_f)notify);
486be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        LOGV("startPreview: notify callback set");
487be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
488be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mVePlayer[playerInst]->loadEffectsSettings(mEffectsSettings,
489be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi         mNumberEffects);
490be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        LOGV("startPreview: effects settings loaded");
491be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
492be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mVePlayer[playerInst]->loadAudioMixSettings(mBackgroundAudioSetting);
493be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        LOGV("startPreview: AudioMixSettings settings loaded");
494be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
495be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mVePlayer[playerInst]->setAudioMixPCMFileHandle(mAudioMixPCMFileHandle);
496be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        LOGV("startPreview: AudioMixPCMFileHandle set");
497be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
498be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mVePlayer[playerInst]->setProgressCallbackInterval(
499be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi         mCallBackAfterFrameCnt);
500be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        LOGV("startPreview: setProgressCallBackInterval");
501be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
502be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
503be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    mPlayerState = VePlayerIdle;
50409949afb1c686c4b4ee7d1520b90d793cb8ee869Dharmaray Kundargi    mPrepareReqest = M4OSA_FALSE;
505be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
506be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if(fromMS == 0) {
507be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mCurrentClipNumber = -1;
508be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        // Save original value
509be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mFirstPreviewClipBeginTime = mClipList[0]->uiBeginCutTime;
510be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mVideoStoryBoardTimeMsUptoFirstPreviewClip = 0;
511be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
512be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    else {
513be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        LOGV("startPreview: fromMS=%d", fromMS);
514be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        if(fromMS >= mClipTotalDuration) {
515be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            LOGE("startPreview: fromMS >= mClipTotalDuration");
516be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            return M4ERR_PARAMETER;
517be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
518be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        for(i=0;i<mNumberClipsInStoryBoard;i++) {
519be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            if(fromMS < (iIncrementedDuration + (mClipList[i]->uiEndCutTime -
520be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             mClipList[i]->uiBeginCutTime))) {
521be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                // Set to 1 index below,
522be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                // as threadProcess first increments the clip index
523be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                // and then processes clip in thread loop
524be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                mCurrentClipNumber = i-1;
525be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                LOGV("startPreview:mCurrentClipNumber = %d fromMS=%d",i,fromMS);
526be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
527be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                // Save original value
528be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                mFirstPreviewClipBeginTime = mClipList[i]->uiBeginCutTime;
529be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
530be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                // Set correct begin time to start playback
531be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                if((fromMS+mClipList[i]->uiBeginCutTime) >
532be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                (iIncrementedDuration+mClipList[i]->uiBeginCutTime)) {
533be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
534be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    mClipList[i]->uiBeginCutTime =
535be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                     mClipList[i]->uiBeginCutTime +
536be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                     (fromMS - iIncrementedDuration);
537be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                }
538be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                break;
539be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            }
540be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            else {
541be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                iIncrementedDuration = iIncrementedDuration +
542be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                 (mClipList[i]->uiEndCutTime - mClipList[i]->uiBeginCutTime);
543be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            }
544be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
545be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mVideoStoryBoardTimeMsUptoFirstPreviewClip = iIncrementedDuration;
546be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
547be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
548be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    for (int playerInst=0; playerInst<NBPLAYER_INSTANCES; playerInst++) {
549be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mVePlayer[playerInst]->setAudioMixStoryBoardParam(fromMS,
550be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi         mFirstPreviewClipBeginTime,
551be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi         mClipList[i]->ClipProperties.uiClipAudioVolumePercentage);
552be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
553be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        LOGV("startPreview:setAudioMixStoryBoardSkimTimeStamp set %d cuttime \
554be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi         %d", fromMS, mFirstPreviewClipBeginTime);
555be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
556be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
557be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    mStartingClipIndex = mCurrentClipNumber+1;
558be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
559be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    // Start playing with player instance 0
560be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    mCurrentPlayer = 0;
56174c3e29b43e088a08e12ddc9783c268af7c465b0Santosh Madhava    mActivePlayerIndex = 0;
562be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
563be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if(toMs == -1) {
564be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        LOGV("startPreview: Preview till end of storyboard");
565be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mNumberClipsToPreview = mNumberClipsInStoryBoard;
566be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        // Save original value
567be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mLastPreviewClipEndTime =
568be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi         mClipList[mNumberClipsToPreview-1]->uiEndCutTime;
569be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
570be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    else {
571be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        LOGV("startPreview: toMs=%d", toMs);
5721156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru        if((M4OSA_UInt32)toMs > mClipTotalDuration) {
573be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            LOGE("startPreview: toMs > mClipTotalDuration");
574be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            return M4ERR_PARAMETER;
575be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
576be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
577be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        iIncrementedDuration = 0;
578be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
579be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        for(i=0;i<mNumberClipsInStoryBoard;i++) {
5801156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru            if((M4OSA_UInt32)toMs <= (iIncrementedDuration +
581be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             (mClipList[i]->uiEndCutTime - mClipList[i]->uiBeginCutTime))) {
582be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                // Save original value
583be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                mLastPreviewClipEndTime = mClipList[i]->uiEndCutTime;
584be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                // Set the end cut time of clip index i to toMs
585be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                mClipList[i]->uiEndCutTime = toMs;
586be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
587be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                // Number of clips to be previewed is from index 0 to i
588be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                // increment by 1 as i starts from 0
589be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                mNumberClipsToPreview = i+1;
590be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                break;
591be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            }
592be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            else {
593be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                iIncrementedDuration = iIncrementedDuration +
594be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                 (mClipList[i]->uiEndCutTime - mClipList[i]->uiBeginCutTime);
595be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            }
596be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
597be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
598be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
599be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    // Open the thread semaphore
600be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4OSA_semaphoreOpen(&mSemThreadWait, 1);
601be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
602be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    // Open the preview process thread
603be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    err = M4OSA_threadSyncOpen(&mThreadContext, (M4OSA_ThreadDoIt)threadProc);
604be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if (M4NO_ERROR != err) {
6051156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru        LOGE("VideoEditorPreviewController:M4OSA_threadSyncOpen error %d", (int) err);
606be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        return err;
607be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
608be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
609be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    // Set the stacksize
610be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    err = M4OSA_threadSyncSetOption(mThreadContext, M4OSA_ThreadStackSize,
611be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi     (M4OSA_DataOption)PREVIEW_THREAD_STACK_SIZE);
612be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
613be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if (M4NO_ERROR != err) {
6141156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru        LOGE("VideoEditorPreviewController: threadSyncSetOption error %d", (int) err);
615be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        M4OSA_threadSyncClose(mThreadContext);
616be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mThreadContext = NULL;
617be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        return err;
618be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
619be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
620be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi     // Start the thread
621be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi     err = M4OSA_threadSyncStart(mThreadContext, (M4OSA_Void*)this);
622be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi     if (M4NO_ERROR != err) {
6231156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru        LOGE("VideoEditorPreviewController: threadSyncStart error %d", (int) err);
624be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        M4OSA_threadSyncClose(mThreadContext);
625be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mThreadContext = NULL;
626be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        return err;
627be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
628be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    bStopThreadInProgress = false;
629be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
630be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    LOGV("startPreview: process thread started");
631be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    return M4NO_ERROR;
632be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi}
633be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
63474c3e29b43e088a08e12ddc9783c268af7c465b0Santosh MadhavaM4OSA_UInt32 VideoEditorPreviewController::stopPreview() {
635be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
63674c3e29b43e088a08e12ddc9783c268af7c465b0Santosh Madhava    uint32_t lastRenderedFrameTimeMs = 0;
637be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    LOGV("stopPreview");
638be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
639be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    // Stop the thread
640be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if(mThreadContext != NULL) {
641be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        bStopThreadInProgress = true;
6424aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury        {
6434aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury            Mutex::Autolock autoLock(mLockSem);
6444aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury            if (mSemThreadWait != NULL) {
6454aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury                err = M4OSA_semaphorePost(mSemThreadWait);
6464aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury            }
6474aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury        }
648be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
649be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        err = M4OSA_threadSyncStop(mThreadContext);
650be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        if(err != M4NO_ERROR) {
651be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            LOGV("stopPreview: error 0x%x in trying to stop thread", err);
652be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            // Continue even if error
653be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
654be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
655be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        err = M4OSA_threadSyncClose(mThreadContext);
656be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        if(err != M4NO_ERROR) {
6571156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru            LOGE("stopPreview: error 0x%x in trying to close thread", (unsigned int)err);
658be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            // Continue even if error
659be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
660be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
661be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mThreadContext = NULL;
662be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
663be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
664be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    // Close the semaphore first
6654aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury    {
6664aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury        Mutex::Autolock autoLock(mLockSem);
6674aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury        if(mSemThreadWait != NULL) {
6684aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury            err = M4OSA_semaphoreClose(mSemThreadWait);
6694aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury            LOGV("stopPreview: close semaphore returns 0x%x", err);
6704aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury            mSemThreadWait = NULL;
6714aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury        }
672be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
673be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
674be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    for (int playerInst=0; playerInst<NBPLAYER_INSTANCES; playerInst++) {
675be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        if(mVePlayer[playerInst] != NULL) {
676be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            if(mVePlayer[playerInst]->isPlaying()) {
677be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                LOGV("stop the player first");
678be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                mVePlayer[playerInst]->stop();
679be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            }
68074c3e29b43e088a08e12ddc9783c268af7c465b0Santosh Madhava            if (playerInst == mActivePlayerIndex) {
68174c3e29b43e088a08e12ddc9783c268af7c465b0Santosh Madhava                // Return the last rendered frame time stamp
68274c3e29b43e088a08e12ddc9783c268af7c465b0Santosh Madhava                mVePlayer[mActivePlayerIndex]->getLastRenderedTimeMs(&lastRenderedFrameTimeMs);
68374c3e29b43e088a08e12ddc9783c268af7c465b0Santosh Madhava            }
6842d44979102ca85d5c4ee68d0388ee2fe37c4ec1aRaghavender Palla
6852d44979102ca85d5c4ee68d0388ee2fe37c4ec1aRaghavender Palla            //This is used to syncronize onStreamDone() in PreviewPlayer and
6862d44979102ca85d5c4ee68d0388ee2fe37c4ec1aRaghavender Palla            //stopPreview() in PreviewController
6872d44979102ca85d5c4ee68d0388ee2fe37c4ec1aRaghavender Palla            sp<VideoEditorPlayer> temp = mVePlayer[playerInst];
6882d44979102ca85d5c4ee68d0388ee2fe37c4ec1aRaghavender Palla            temp->acquireLock();
6892d44979102ca85d5c4ee68d0388ee2fe37c4ec1aRaghavender Palla            LOGV("stopPreview: clearing mVePlayer");
6902d44979102ca85d5c4ee68d0388ee2fe37c4ec1aRaghavender Palla            mVePlayer[playerInst].clear();
691be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mVePlayer[playerInst] = NULL;
6922d44979102ca85d5c4ee68d0388ee2fe37c4ec1aRaghavender Palla            temp->releaseLock();
693be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
694be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
69576719ec141dfe877351b123fd7886971625d4ddcRajneesh Chowdury    LOGV("stopPreview: clear audioSink and audioPlayer");
69676719ec141dfe877351b123fd7886971625d4ddcRajneesh Chowdury    mVEAudioSink.clear();
69776719ec141dfe877351b123fd7886971625d4ddcRajneesh Chowdury    if (mVEAudioPlayer) {
69876719ec141dfe877351b123fd7886971625d4ddcRajneesh Chowdury        delete mVEAudioPlayer;
69976719ec141dfe877351b123fd7886971625d4ddcRajneesh Chowdury        mVEAudioPlayer = NULL;
70076719ec141dfe877351b123fd7886971625d4ddcRajneesh Chowdury    }
701be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
702be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    // If image file playing, then free the buffer pointer
703be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if(mFrameStr.pBuffer != M4OSA_NULL) {
704be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        M4OSA_free((M4OSA_MemAddr32)mFrameStr.pBuffer);
705be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mFrameStr.pBuffer = M4OSA_NULL;
706be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
707be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
708be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    // Reset original begin cuttime of first previewed clip*/
709be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    mClipList[mStartingClipIndex]->uiBeginCutTime = mFirstPreviewClipBeginTime;
710be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    // Reset original end cuttime of last previewed clip*/
711be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    mClipList[mNumberClipsToPreview-1]->uiEndCutTime = mLastPreviewClipEndTime;
712be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
713be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    mPlayerState = VePlayerIdle;
71409949afb1c686c4b4ee7d1520b90d793cb8ee869Dharmaray Kundargi    mPrepareReqest = M4OSA_FALSE;
715be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
716be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    mCurrentPlayedDuration = 0;
717be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    mCurrentClipDuration = 0;
718be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    mRenderingMode = M4xVSS_kBlackBorders;
719be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    mOutputVideoWidth = 0;
720be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    mOutputVideoHeight = 0;
721be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
72274c3e29b43e088a08e12ddc9783c268af7c465b0Santosh Madhava    LOGV("stopPreview() lastRenderedFrameTimeMs %ld", lastRenderedFrameTimeMs);
72374c3e29b43e088a08e12ddc9783c268af7c465b0Santosh Madhava    return lastRenderedFrameTimeMs;
724be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi}
725be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
7267ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj SharmaM4OSA_ERR VideoEditorPreviewController::clearSurface(
7277ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    const sp<Surface> &surface, VideoEditor_renderPreviewFrameStr* pFrameInfo) {
7287ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma
7297ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    M4OSA_ERR err = M4NO_ERROR;
7307ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    VideoEditor_renderPreviewFrameStr* pFrameStr = pFrameInfo;
7317ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    M4OSA_UInt32 outputBufferWidth =0, outputBufferHeight=0;
7327ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    M4VIFI_ImagePlane planeOut[3];
7337ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    LOGV("Inside preview clear frame");
7347ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma
7357ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    Mutex::Autolock autoLock(mLock);
7367ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma
7377ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    // Get the Isurface to be passed to renderer
7387ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    mISurface = surface->getISurface();
7397ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma
7407ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    // Delete previous renderer instance
7417ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    if(mTarget != NULL) {
7427ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma        delete mTarget;
7437ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma        mTarget = NULL;
7447ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    }
7457ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma
746895c438b105186e812203f75e9ae7865a584f13dDheeraj Sharma    outputBufferWidth = pFrameStr->uiFrameWidth;
747895c438b105186e812203f75e9ae7865a584f13dDheeraj Sharma    outputBufferHeight = pFrameStr->uiFrameHeight;
7487ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma
7497ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    // Initialize the renderer
7507ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    if(mTarget == NULL) {
751b70708552e0d20b007b815c60968e6e2f5d21ce5Santosh Madhava
752b70708552e0d20b007b815c60968e6e2f5d21ce5Santosh Madhava        mTarget = PreviewRenderer::CreatePreviewRenderer(
753895c438b105186e812203f75e9ae7865a584f13dDheeraj Sharma            OMX_COLOR_FormatYUV420Planar, surface, outputBufferWidth, outputBufferHeight,
754895c438b105186e812203f75e9ae7865a584f13dDheeraj Sharma            outputBufferWidth, outputBufferHeight, 0);
755b70708552e0d20b007b815c60968e6e2f5d21ce5Santosh Madhava
7567ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma        if(mTarget == NULL) {
7577ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma            LOGE("renderPreviewFrame: cannot create PreviewRenderer");
7587ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma            return M4ERR_ALLOC;
7597ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma        }
7607ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    }
7617ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma
7627ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    // Out plane
7637ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    uint8_t* outBuffer;
7647ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    size_t outBufferStride = 0;
7657ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma
7667ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    LOGV("doMediaRendering CALL getBuffer()");
7677ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    mTarget->getBufferYV12(&outBuffer, &outBufferStride);
7687ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma
7697ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    // Set the output YUV420 plane to be compatible with YV12 format
7707ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    //In YV12 format, sizes must be even
771895c438b105186e812203f75e9ae7865a584f13dDheeraj Sharma    M4OSA_UInt32 yv12PlaneWidth = ((outputBufferWidth +1)>>1)<<1;
772895c438b105186e812203f75e9ae7865a584f13dDheeraj Sharma    M4OSA_UInt32 yv12PlaneHeight = ((outputBufferHeight+1)>>1)<<1;
7737ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma
7747ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    prepareYV12ImagePlane(planeOut, yv12PlaneWidth, yv12PlaneHeight,
7757ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma     (M4OSA_UInt32)outBufferStride, (M4VIFI_UInt8 *)outBuffer);
7767ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma
7777ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    /* Fill the surface with black frame */
7787ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    M4OSA_memset((M4OSA_MemAddr8)planeOut[0].pac_data,planeOut[0].u_width *
7797ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma                            planeOut[0].u_height * 1.5,0x00);
7807ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    M4OSA_memset((M4OSA_MemAddr8)planeOut[1].pac_data,planeOut[1].u_width *
7817ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma                            planeOut[1].u_height,128);
7827ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    M4OSA_memset((M4OSA_MemAddr8)planeOut[2].pac_data,planeOut[2].u_width *
7837ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma                             planeOut[2].u_height,128);
7847ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma
7857ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    mTarget->renderYV12();
7867ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma    return err;
7877ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma}
7887ef2fa5706b1193b66b1ad4e0646afd4edd6f233Dheeraj Sharma
789be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray KundargiM4OSA_ERR VideoEditorPreviewController::renderPreviewFrame(
790246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi            const sp<Surface> &surface,
791246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi            VideoEditor_renderPreviewFrameStr* pFrameInfo,
792246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi            VideoEditorCurretEditInfo *pCurrEditInfo) {
793be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
794be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
795be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4OSA_UInt32 i = 0, iIncrementedDuration = 0, tnTimeMs=0, framesize =0;
796be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    VideoEditor_renderPreviewFrameStr* pFrameStr = pFrameInfo;
797be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4VIFI_UInt8 *pixelArray = NULL;
798be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    Mutex::Autolock autoLock(mLock);
799be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
800be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    // Get the Isurface to be passed to renderer
801be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    mISurface = surface->getISurface();
802246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi    if (pCurrEditInfo != NULL) {
803246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi        pCurrEditInfo->overlaySettingsIndex = -1;
804246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi    }
805be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    // Delete previous renderer instance
806be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if(mTarget != NULL) {
807be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        delete mTarget;
808be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mTarget = NULL;
809be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
810be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
811be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if(mOutputVideoWidth == 0) {
812be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mOutputVideoWidth = pFrameStr->uiFrameWidth;
813be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
8144c9874dc75d596e095109df21718325a5603d225Dharmaray Kundargi
815be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if(mOutputVideoHeight == 0) {
816be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mOutputVideoHeight = pFrameStr->uiFrameHeight;
817be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
818be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
819be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    // Initialize the renderer
820be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if(mTarget == NULL) {
821b70708552e0d20b007b815c60968e6e2f5d21ce5Santosh Madhava        /*mTarget = new PreviewRenderer(
822b70708552e0d20b007b815c60968e6e2f5d21ce5Santosh Madhava            OMX_COLOR_FormatYUV420Planar, surface, mOutputVideoWidth, mOutputVideoHeight,
823b70708552e0d20b007b815c60968e6e2f5d21ce5Santosh Madhava            mOutputVideoWidth, mOutputVideoHeight, 0);*/
824b70708552e0d20b007b815c60968e6e2f5d21ce5Santosh Madhava
825b70708552e0d20b007b815c60968e6e2f5d21ce5Santosh Madhava         mTarget = PreviewRenderer::CreatePreviewRenderer(
826be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            OMX_COLOR_FormatYUV420Planar, surface, mOutputVideoWidth, mOutputVideoHeight,
827be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoWidth, mOutputVideoHeight, 0);
828b70708552e0d20b007b815c60968e6e2f5d21ce5Santosh Madhava
829be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        if(mTarget == NULL) {
830be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            LOGE("renderPreviewFrame: cannot create PreviewRenderer");
831be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            return M4ERR_ALLOC;
832be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
833be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
834be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
835be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    pixelArray = NULL;
836be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
837be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    // Postprocessing (apply video effect)
838be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if(pFrameStr->bApplyEffect == M4OSA_TRUE) {
839be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
840be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        for(i=0;i<mNumberEffects;i++) {
841be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            // First check if effect starttime matches the clip being previewed
842be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            if((mEffectsSettings[i].uiStartTime < pFrameStr->clipBeginCutTime)
843be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             ||(mEffectsSettings[i].uiStartTime >= pFrameStr->clipEndCutTime)) {
844be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                // This effect doesn't belong to this clip, check next one
845be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                continue;
846be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            }
847be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            if((mEffectsSettings[i].uiStartTime <= pFrameStr->timeMs) &&
848be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            ((mEffectsSettings[i].uiStartTime+mEffectsSettings[i].uiDuration) >=
849be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             pFrameStr->timeMs) && (mEffectsSettings[i].uiDuration != 0)) {
850be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                setVideoEffectType(mEffectsSettings[i].VideoEffectType, TRUE);
851be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            }
852be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            else {
853be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                setVideoEffectType(mEffectsSettings[i].VideoEffectType, FALSE);
854be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            }
855be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
856be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
857246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi        //Provide the overlay Update indication when there is an overlay effect
8584c9874dc75d596e095109df21718325a5603d225Dharmaray Kundargi        if (mCurrentVideoEffect & VIDEO_EFFECT_FRAMING) {
8591156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru            M4OSA_UInt32 index;
8604c9874dc75d596e095109df21718325a5603d225Dharmaray Kundargi            mCurrentVideoEffect &= ~VIDEO_EFFECT_FRAMING; //never apply framing here.
861246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi
862246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi            // Find the effect in effectSettings array
863246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi            for (index = 0; index < mNumberEffects; index++) {
864246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi                if(mEffectsSettings[index].VideoEffectType ==
8651156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru                    (M4VSS3GPP_VideoEffectType)M4xVSS_kVideoEffectType_Framing) {
866246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi
867246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi                    if((mEffectsSettings[index].uiStartTime <= pFrameInfo->timeMs) &&
868246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi                        ((mEffectsSettings[index].uiStartTime+
869246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi                        mEffectsSettings[index].uiDuration) >= pFrameInfo->timeMs))
870246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi                    {
871246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi                        break;
872246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi                    }
873246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi                }
874246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi            }
875246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi            if ((index < mNumberEffects) && (pCurrEditInfo != NULL)) {
876246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi                pCurrEditInfo->overlaySettingsIndex = index;
877246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi                LOGV("Framing index = %d", index);
878246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi            } else {
879246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi                LOGV("No framing effects found");
880246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi            }
881246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi        }
882246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi
883be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        if(mCurrentVideoEffect != VIDEO_EFFECT_NONE) {
884be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            err = applyVideoEffect((M4OSA_Void *)pFrameStr->pBuffer,
885be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             OMX_COLOR_FormatYUV420Planar, pFrameStr->uiFrameWidth,
886be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             pFrameStr->uiFrameHeight, pFrameStr->timeMs,
887be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             (M4OSA_Void *)pixelArray);
888be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
889be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            if(err != M4NO_ERROR) {
8901156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru                LOGE("renderPreviewFrame: applyVideoEffect error 0x%x", (unsigned int)err);
891be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                delete mTarget;
892be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                mTarget = NULL;
893be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                M4OSA_free((M4OSA_MemAddr32)pixelArray);
894be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                pixelArray = NULL;
895be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                return err;
896be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi           }
897be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi           mCurrentVideoEffect = VIDEO_EFFECT_NONE;
898be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
899be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        else {
900be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            // Apply the rendering mode
901be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            err = doImageRenderingMode((M4OSA_Void *)pFrameStr->pBuffer,
902be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             OMX_COLOR_FormatYUV420Planar, pFrameStr->uiFrameWidth,
903be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             pFrameStr->uiFrameHeight, (M4OSA_Void *)pixelArray);
904be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
905be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            if(err != M4NO_ERROR) {
9061156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru                LOGE("renderPreviewFrame:doImageRenderingMode error 0x%x", (unsigned int)err);
907be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                delete mTarget;
908be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                mTarget = NULL;
909be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                M4OSA_free((M4OSA_MemAddr32)pixelArray);
910be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                pixelArray = NULL;
911be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                return err;
912be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            }
913be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
914be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
915be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    else {
916be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        // Apply the rendering mode
917be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        err = doImageRenderingMode((M4OSA_Void *)pFrameStr->pBuffer,
918be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi         OMX_COLOR_FormatYUV420Planar, pFrameStr->uiFrameWidth,
919be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi         pFrameStr->uiFrameHeight, (M4OSA_Void *)pixelArray);
920be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
921be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        if(err != M4NO_ERROR) {
9221156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru            LOGE("renderPreviewFrame: doImageRenderingMode error 0x%x", (unsigned int)err);
923be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            delete mTarget;
924be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mTarget = NULL;
925be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            M4OSA_free((M4OSA_MemAddr32)pixelArray);
926be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            pixelArray = NULL;
927be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            return err;
928be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
929be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
930be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
931be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    mTarget->renderYV12();
932be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    return err;
933be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi}
934be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
935be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray KundargiM4OSA_Void VideoEditorPreviewController::setJniCallback(void* cookie,
936be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    jni_progress_callback_fct callbackFct) {
937be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    //LOGV("setJniCallback");
938be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    mJniCookie = cookie;
939be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    mJniCallback = callbackFct;
940be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi}
941be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
942be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray KundargiM4OSA_ERR VideoEditorPreviewController::preparePlayer(
943be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    void* param, int playerInstance, int index) {
944be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
945be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
946be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    VideoEditorPreviewController *pController =
947be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi     (VideoEditorPreviewController *)param;
948be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
949be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    LOGV("preparePlayer: instance %d file %d", playerInstance, index);
950be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
951be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    pController->mVePlayer[playerInstance]->setDataSource(
952be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    (const char *)pController->mClipList[index]->pFile, NULL);
953be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    LOGV("preparePlayer: setDataSource instance %s",
954be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi     (const char *)pController->mClipList[index]->pFile);
955be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
956be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    pController->mVePlayer[playerInstance]->setVideoISurface(
957be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi     pController->mISurface);
958be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    LOGV("preparePlayer: setVideoISurface");
959be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
960be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    pController->mVePlayer[playerInstance]->setVideoSurface(
961be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi     pController->mSurface);
962be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    LOGV("preparePlayer: setVideoSurface");
963be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
964be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    pController->mVePlayer[playerInstance]->setMediaRenderingMode(
965be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi     pController->mClipList[index]->xVSS.MediaRendering,
966be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi     pController->mOutputVideoSize);
967be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    LOGV("preparePlayer: setMediaRenderingMode");
968be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
9691156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru    if((M4OSA_UInt32)index == pController->mStartingClipIndex) {
970be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        pController->mVePlayer[playerInstance]->setPlaybackBeginTime(
971be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        pController->mFirstPreviewClipBeginTime);
972be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
973be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    else {
974be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        pController->mVePlayer[playerInstance]->setPlaybackBeginTime(
975be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        pController->mClipList[index]->uiBeginCutTime);
976be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
977be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    LOGV("preparePlayer: setPlaybackBeginTime(%d)",
978be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi     pController->mClipList[index]->uiBeginCutTime);
979be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
980be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    pController->mVePlayer[playerInstance]->setPlaybackEndTime(
981be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi     pController->mClipList[index]->uiEndCutTime);
982be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    LOGV("preparePlayer: setPlaybackEndTime(%d)",
983be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi     pController->mClipList[index]->uiEndCutTime);
984be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
985be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if(pController->mClipList[index]->FileType == M4VIDEOEDITING_kFileType_ARGB8888) {
986be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        pController->mVePlayer[playerInstance]->setImageClipProperties(
987be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                 pController->mClipList[index]->ClipProperties.uiVideoWidth,
988be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                 pController->mClipList[index]->ClipProperties.uiVideoHeight);
989be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        LOGV("preparePlayer: setImageClipProperties");
990be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
991be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
992be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    pController->mVePlayer[playerInstance]->prepare();
993be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    LOGV("preparePlayer: prepared");
994be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
995be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if(pController->mClipList[index]->uiBeginCutTime > 0) {
996be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        pController->mVePlayer[playerInstance]->seekTo(
997be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi         pController->mClipList[index]->uiBeginCutTime);
998be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
999be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        LOGV("preparePlayer: seekTo(%d)",
1000be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi         pController->mClipList[index]->uiBeginCutTime);
1001be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
100276719ec141dfe877351b123fd7886971625d4ddcRajneesh Chowdury    pController->mVePlayer[pController->mCurrentPlayer]->setAudioPlayer(pController->mVEAudioPlayer);
1003be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1004be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    pController->mVePlayer[playerInstance]->readFirstVideoFrame();
1005be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    LOGV("preparePlayer: readFirstVideoFrame of clip");
1006be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1007be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    return err;
1008be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi}
1009be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1010be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray KundargiM4OSA_ERR VideoEditorPreviewController::threadProc(M4OSA_Void* param) {
1011be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
1012be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4OSA_Int32 index = 0;
1013be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    VideoEditorPreviewController *pController =
1014be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi     (VideoEditorPreviewController *)param;
1015be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1016be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    LOGV("inside threadProc");
1017be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if(pController->mPlayerState == VePlayerIdle) {
1018be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        (pController->mCurrentClipNumber)++;
1019be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1020be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        LOGV("threadProc: playing file index %d total clips %d",
1021be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi         pController->mCurrentClipNumber, pController->mNumberClipsToPreview);
1022be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
10231156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru        if((M4OSA_UInt32)pController->mCurrentClipNumber >=
1024be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi         pController->mNumberClipsToPreview) {
1025be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1026be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            LOGV("All clips previewed");
1027be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1028be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            pController->mCurrentPlayedDuration = 0;
1029be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            pController->mCurrentClipDuration = 0;
1030be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            pController->mCurrentPlayer = 0;
1031be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1032be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            if(pController->mPreviewLooping == M4OSA_TRUE) {
1033be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                pController->mCurrentClipNumber =
1034be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                 pController->mStartingClipIndex;
1035be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1036be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                LOGV("Preview looping TRUE, restarting from clip index %d",
1037be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                 pController->mCurrentClipNumber);
1038be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1039be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                // Reset the story board timestamp inside the player
1040be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                for (int playerInst=0; playerInst<NBPLAYER_INSTANCES;
1041be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                 playerInst++) {
1042be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    pController->mVePlayer[playerInst]->resetJniCallbackTimeStamp();
1043be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                }
1044be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            }
1045be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            else {
1046246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi                M4OSA_UInt32 endArgs = 0;
1047be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                if(pController->mJniCallback != NULL) {
1048be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    pController->mJniCallback(
1049246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi                     pController->mJniCookie, MSG_TYPE_PREVIEW_END, &endArgs);
1050be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                }
1051be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                pController->mPlayerState = VePlayerAutoStop;
1052be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1053be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                // Reset original begin cuttime of first previewed clip
1054be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                pController->mClipList[pController->mStartingClipIndex]->uiBeginCutTime =
1055be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                 pController->mFirstPreviewClipBeginTime;
1056be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                // Reset original end cuttime of last previewed clip
1057be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                pController->mClipList[pController->mNumberClipsToPreview-1]->uiEndCutTime =
1058be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                 pController->mLastPreviewClipEndTime;
1059be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1060be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                // Return a warning to M4OSA thread handler
1061be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                // so that thread is moved from executing state to open state
1062be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                return M4WAR_NO_MORE_STREAM;
1063be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            }
1064be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
1065be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1066be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        index=pController->mCurrentClipNumber;
10671156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru        if((M4OSA_UInt32)pController->mCurrentClipNumber == pController->mStartingClipIndex) {
1068be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            pController->mCurrentPlayedDuration +=
1069be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             pController->mVideoStoryBoardTimeMsUptoFirstPreviewClip;
1070be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1071be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            pController->mCurrentClipDuration =
1072be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             pController->mClipList[pController->mCurrentClipNumber]->uiEndCutTime
1073be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi              - pController->mFirstPreviewClipBeginTime;
1074be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1075be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            preparePlayer((void*)pController, pController->mCurrentPlayer, index);
1076be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
1077be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        else {
1078be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            pController->mCurrentPlayedDuration +=
1079be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             pController->mCurrentClipDuration;
1080be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1081be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            pController->mCurrentClipDuration =
1082be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             pController->mClipList[pController->mCurrentClipNumber]->uiEndCutTime -
1083be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             pController->mClipList[pController->mCurrentClipNumber]->uiBeginCutTime;
1084be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
1085be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1086be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        pController->mVePlayer[pController->mCurrentPlayer]->setStoryboardStartTime(
1087be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi         pController->mCurrentPlayedDuration);
1088be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        LOGV("threadProc: setStoryboardStartTime");
1089be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1090be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        // Set the next clip duration for Audio mix here
10911156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru        if((M4OSA_UInt32)pController->mCurrentClipNumber != pController->mStartingClipIndex) {
1092be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1093be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            pController->mVePlayer[pController->mCurrentPlayer]->setAudioMixStoryBoardParam(
1094be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             pController->mCurrentPlayedDuration,
1095be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             pController->mClipList[index]->uiBeginCutTime,
1096be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             pController->mClipList[index]->ClipProperties.uiClipAudioVolumePercentage);
1097be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1098be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            LOGV("threadProc: setAudioMixStoryBoardParam fromMS %d \
1099be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             ClipBeginTime %d", pController->mCurrentPlayedDuration +
1100be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             pController->mClipList[index]->uiBeginCutTime,
1101be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             pController->mClipList[index]->uiBeginCutTime,
1102be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             pController->mClipList[index]->ClipProperties.uiClipAudioVolumePercentage);
1103be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
110474c3e29b43e088a08e12ddc9783c268af7c465b0Santosh Madhava        // Capture the active player being used
110574c3e29b43e088a08e12ddc9783c268af7c465b0Santosh Madhava        pController->mActivePlayerIndex = pController->mCurrentPlayer;
1106be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1107be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        pController->mVePlayer[pController->mCurrentPlayer]->start();
1108be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        LOGV("threadProc: started");
1109be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1110be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        pController->mPlayerState = VePlayerBusy;
1111be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
111209949afb1c686c4b4ee7d1520b90d793cb8ee869Dharmaray Kundargi    } else if(pController->mPlayerState == VePlayerAutoStop) {
1113be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        LOGV("Preview completed..auto stop the player");
111409949afb1c686c4b4ee7d1520b90d793cb8ee869Dharmaray Kundargi    } else if ((pController->mPlayerState == VePlayerBusy) && (pController->mPrepareReqest)) {
111509949afb1c686c4b4ee7d1520b90d793cb8ee869Dharmaray Kundargi        // Prepare the player here
111609949afb1c686c4b4ee7d1520b90d793cb8ee869Dharmaray Kundargi        pController->mPrepareReqest = M4OSA_FALSE;
111709949afb1c686c4b4ee7d1520b90d793cb8ee869Dharmaray Kundargi        preparePlayer((void*)pController, pController->mCurrentPlayer,
111809949afb1c686c4b4ee7d1520b90d793cb8ee869Dharmaray Kundargi            pController->mCurrentClipNumber+1);
11194aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury        if (pController->mSemThreadWait != NULL) {
11204aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury            err = M4OSA_semaphoreWait(pController->mSemThreadWait,
11214aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury                M4OSA_WAIT_FOREVER);
11224aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury        }
112309949afb1c686c4b4ee7d1520b90d793cb8ee869Dharmaray Kundargi    } else {
112409949afb1c686c4b4ee7d1520b90d793cb8ee869Dharmaray Kundargi        if (!pController->bStopThreadInProgress) {
1125be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            LOGV("threadProc: state busy...wait for sem");
11264aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury            if (pController->mSemThreadWait != NULL) {
11274aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury                err = M4OSA_semaphoreWait(pController->mSemThreadWait,
11284aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury                 M4OSA_WAIT_FOREVER);
11294aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury             }
1130be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        }
1131be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        LOGV("threadProc: sem wait returned err = 0x%x", err);
11322d44979102ca85d5c4ee68d0388ee2fe37c4ec1aRaghavender Palla    }
1133be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1134be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    //Always return M4NO_ERROR to ensure the thread keeps running
1135be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    return M4NO_ERROR;
1136be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi}
1137be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1138be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargivoid VideoEditorPreviewController::notify(
1139be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    void* cookie, int msg, int ext1, int ext2)
1140be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi{
1141be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    VideoEditorPreviewController *pController =
1142be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi     (VideoEditorPreviewController *)cookie;
1143be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1144be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
1145be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    uint32_t clipDuration = 0;
1146be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    switch (msg) {
1147be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case MEDIA_NOP: // interface test message
1148be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            LOGV("MEDIA_NOP");
1149be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1150be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case MEDIA_PREPARED:
1151be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            LOGV("MEDIA_PREPARED");
1152be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1153be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case MEDIA_PLAYBACK_COMPLETE:
1154246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi        {
1155be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            LOGV("notify:MEDIA_PLAYBACK_COMPLETE");
1156be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            pController->mPlayerState = VePlayerIdle;
1157be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1158be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            //send progress callback with last frame timestamp
11591156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru            if((M4OSA_UInt32)pController->mCurrentClipNumber ==
1160be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             pController->mStartingClipIndex) {
1161be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                clipDuration =
1162be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                 pController->mClipList[pController->mCurrentClipNumber]->uiEndCutTime
1163be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                  - pController->mFirstPreviewClipBeginTime;
1164be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            }
1165be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            else {
1166be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                clipDuration =
1167be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                 pController->mClipList[pController->mCurrentClipNumber]->uiEndCutTime
1168be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                  - pController->mClipList[pController->mCurrentClipNumber]->uiBeginCutTime;
1169be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            }
1170246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi
1171246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi            M4OSA_UInt32 playedDuration = clipDuration+pController->mCurrentPlayedDuration;
1172be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            pController->mJniCallback(
1173246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi                 pController->mJniCookie, MSG_TYPE_PROGRESS_INDICATION,
1174246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi                 &playedDuration);
1175be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
117672eee21a70ab5aa54eb752918cf02b6d2cc3a6c2Dheeraj Sharma            if ((pController->mOverlayState == OVERLAY_UPDATE) &&
11771156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru                ((M4OSA_UInt32)pController->mCurrentClipNumber !=
117872eee21a70ab5aa54eb752918cf02b6d2cc3a6c2Dheeraj Sharma                (pController->mNumberClipsToPreview-1))) {
117972eee21a70ab5aa54eb752918cf02b6d2cc3a6c2Dheeraj Sharma                VideoEditorCurretEditInfo *pEditInfo =
118072eee21a70ab5aa54eb752918cf02b6d2cc3a6c2Dheeraj Sharma                    (VideoEditorCurretEditInfo*)M4OSA_malloc(sizeof(VideoEditorCurretEditInfo),
118172eee21a70ab5aa54eb752918cf02b6d2cc3a6c2Dheeraj Sharma                    M4VS, (M4OSA_Char*)"Current Edit info");
118272eee21a70ab5aa54eb752918cf02b6d2cc3a6c2Dheeraj Sharma                pEditInfo->overlaySettingsIndex = ext2;
118372eee21a70ab5aa54eb752918cf02b6d2cc3a6c2Dheeraj Sharma                pEditInfo->clipIndex = pController->mCurrentClipNumber;
118472eee21a70ab5aa54eb752918cf02b6d2cc3a6c2Dheeraj Sharma                pController->mOverlayState == OVERLAY_CLEAR;
118572eee21a70ab5aa54eb752918cf02b6d2cc3a6c2Dheeraj Sharma                if (pController->mJniCallback != NULL) {
118672eee21a70ab5aa54eb752918cf02b6d2cc3a6c2Dheeraj Sharma                        pController->mJniCallback(pController->mJniCookie,
118772eee21a70ab5aa54eb752918cf02b6d2cc3a6c2Dheeraj Sharma                            MSG_TYPE_OVERLAY_CLEAR, pEditInfo);
118872eee21a70ab5aa54eb752918cf02b6d2cc3a6c2Dheeraj Sharma                }
118972eee21a70ab5aa54eb752918cf02b6d2cc3a6c2Dheeraj Sharma                M4OSA_free((M4OSA_MemAddr32)pEditInfo);
119072eee21a70ab5aa54eb752918cf02b6d2cc3a6c2Dheeraj Sharma            }
11914aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury            {
11924aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury                Mutex::Autolock autoLock(pController->mLockSem);
11934aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury                if (pController->mSemThreadWait != NULL) {
11942d44979102ca85d5c4ee68d0388ee2fe37c4ec1aRaghavender Palla                    M4OSA_semaphorePost(pController->mSemThreadWait);
11952d44979102ca85d5c4ee68d0388ee2fe37c4ec1aRaghavender Palla                    return;
11964aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury                }
11974aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury            }
11984aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury
1199be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1200246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi        }
1201246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi        case MEDIA_ERROR:
1202246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi        {
1203246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi            int err_val = ext1;
1204be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi          // Always log errors.
1205be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi          // ext1: Media framework error code.
1206be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi          // ext2: Implementation dependant error code.
1207be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            LOGE("MEDIA_ERROR; error (%d, %d)", ext1, ext2);
1208be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            if(pController->mJniCallback != NULL) {
1209be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                pController->mJniCallback(pController->mJniCookie,
1210246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi                 MSG_TYPE_PLAYER_ERROR, &err_val);
1211be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            }
1212be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1213246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi        }
1214be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case MEDIA_INFO:
1215246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi        {
1216246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi            int info_val = ext2;
1217be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            // ext1: Media framework error code.
1218be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            // ext2: Implementation dependant error code.
1219be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            //LOGW("MEDIA_INFO; info/warning (%d, %d)", ext1, ext2);
1220be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            if(pController->mJniCallback != NULL) {
1221be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                pController->mJniCallback(pController->mJniCookie,
1222246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi                 MSG_TYPE_PROGRESS_INDICATION, &info_val);
1223be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            }
1224be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1225246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi        }
1226be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case MEDIA_SEEK_COMPLETE:
1227be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            LOGV("MEDIA_SEEK_COMPLETE; Received seek complete");
1228be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1229be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case MEDIA_BUFFERING_UPDATE:
1230be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            LOGV("MEDIA_BUFFERING_UPDATE; buffering %d", ext1);
1231be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1232be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case MEDIA_SET_VIDEO_SIZE:
1233be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            LOGV("MEDIA_SET_VIDEO_SIZE; New video size %d x %d", ext1, ext2);
1234be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1235be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case 0xAAAAAAAA:
1236be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            LOGV("VIDEO PLAYBACK ALMOST over, prepare next player");
1237be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            // Select next player and prepare it
1238be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            // If there is a clip after this one
12391156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru            if ((M4OSA_UInt32)(pController->mCurrentClipNumber+1) <
1240be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi             pController->mNumberClipsToPreview) {
1241e553fc6c1ce3b8a9b22b8e2118dba356d44b10dcDharmaray Kundargi                pController->mPrepareReqest = M4OSA_TRUE;
1242be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                pController->mCurrentPlayer++;
1243be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                if (pController->mCurrentPlayer >= NBPLAYER_INSTANCES) {
1244be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                    pController->mCurrentPlayer = 0;
1245be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                }
1246be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                // Prepare the first clip to be played
12474aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury                {
12484aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury                    Mutex::Autolock autoLock(pController->mLockSem);
12494aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury                    if (pController->mSemThreadWait != NULL) {
12504aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury                        M4OSA_semaphorePost(pController->mSemThreadWait);
12514aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury                    }
12524aac50e11d76c43f1b6ba9f9e042aada46ba02b7Rajneesh Chowdury                }
1253be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            }
1254be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1255246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi        case 0xBBBBBBBB:
1256246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi        {
1257246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi            LOGV("VIDEO PLAYBACK, Update Overlay");
1258246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi            int overlayIndex = ext2;
1259246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi            VideoEditorCurretEditInfo *pEditInfo =
1260246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi                    (VideoEditorCurretEditInfo*)M4OSA_malloc(sizeof(VideoEditorCurretEditInfo),
1261246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi                    M4VS, (M4OSA_Char*)"Current Edit info");
1262246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi            //ext1 = 1; start the overlay display
1263246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi            //     = 2; Clear the overlay.
1264246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi            pEditInfo->overlaySettingsIndex = ext2;
1265246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi            pEditInfo->clipIndex = pController->mCurrentClipNumber;
1266246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi            LOGV("pController->mCurrentClipNumber = %d",pController->mCurrentClipNumber);
1267246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi            if (pController->mJniCallback != NULL) {
1268246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi                if (ext1 == 1) {
126972eee21a70ab5aa54eb752918cf02b6d2cc3a6c2Dheeraj Sharma                    pController->mOverlayState = OVERLAY_UPDATE;
1270246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi                    pController->mJniCallback(pController->mJniCookie,
1271246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi                        MSG_TYPE_OVERLAY_UPDATE, pEditInfo);
1272246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi                } else {
127372eee21a70ab5aa54eb752918cf02b6d2cc3a6c2Dheeraj Sharma                    pController->mOverlayState = OVERLAY_CLEAR;
1274246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi                    pController->mJniCallback(pController->mJniCookie,
1275246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi                        MSG_TYPE_OVERLAY_CLEAR, pEditInfo);
1276246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi                }
1277246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi            }
1278246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi            M4OSA_free((M4OSA_MemAddr32)pEditInfo);
1279246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi            break;
1280246108db97a5ebfbc7e555fc5c81f10476cd9fbbDharmaray Kundargi        }
1281be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        default:
1282be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            LOGV("unrecognized message: (%d, %d, %d)", msg, ext1, ext2);
1283be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1284be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
1285be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi}
1286be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1287be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargivoid VideoEditorPreviewController::setVideoEffectType(
1288be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4VSS3GPP_VideoEffectType type, M4OSA_Bool enable) {
1289be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1290be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4OSA_UInt32 effect = VIDEO_EFFECT_NONE;
1291be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1292be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    // map M4VSS3GPP_VideoEffectType to local enum
1293be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    switch(type) {
1294be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case M4VSS3GPP_kVideoEffectType_FadeFromBlack:
1295be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            effect = VIDEO_EFFECT_FADEFROMBLACK;
1296be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1297be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1298be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case M4VSS3GPP_kVideoEffectType_FadeToBlack:
1299be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            effect = VIDEO_EFFECT_FADETOBLACK;
1300be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1301be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1302be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case M4VSS3GPP_kVideoEffectType_CurtainOpening:
1303be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            effect = VIDEO_EFFECT_CURTAINOPEN;
1304be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1305be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1306be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case M4VSS3GPP_kVideoEffectType_CurtainClosing:
1307be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            effect = VIDEO_EFFECT_CURTAINCLOSE;
1308be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1309be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1310be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case M4xVSS_kVideoEffectType_BlackAndWhite:
1311be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            effect = VIDEO_EFFECT_BLACKANDWHITE;
1312be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1313be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1314be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case M4xVSS_kVideoEffectType_Pink:
1315be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            effect = VIDEO_EFFECT_PINK;
1316be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1317be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1318be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case M4xVSS_kVideoEffectType_Green:
1319be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            effect = VIDEO_EFFECT_GREEN;
1320be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1321be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1322be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case M4xVSS_kVideoEffectType_Sepia:
1323be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            effect = VIDEO_EFFECT_SEPIA;
1324be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1325be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1326be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case M4xVSS_kVideoEffectType_Negative:
1327be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            effect = VIDEO_EFFECT_NEGATIVE;
1328be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1329be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1330be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case M4xVSS_kVideoEffectType_Framing:
1331be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            effect = VIDEO_EFFECT_FRAMING;
1332be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1333be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1334be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case M4xVSS_kVideoEffectType_Fifties:
1335be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            effect = VIDEO_EFFECT_FIFTIES;
1336be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1337be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1338be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case M4xVSS_kVideoEffectType_ColorRGB16:
1339be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            effect = VIDEO_EFFECT_COLOR_RGB16;
1340be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1341be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1342be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case M4xVSS_kVideoEffectType_Gradient:
1343be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            effect = VIDEO_EFFECT_GRADIENT;
1344be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1345be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1346be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        default:
1347be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            effect = VIDEO_EFFECT_NONE;
1348be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1349be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
1350be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1351be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if(enable == M4OSA_TRUE) {
1352be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        // If already set, then no need to set again
1353be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        if(!(mCurrentVideoEffect & effect))
1354be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mCurrentVideoEffect |= effect;
1355be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            if(effect == VIDEO_EFFECT_FIFTIES) {
1356be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi                mIsFiftiesEffectStarted = true;
1357be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            }
1358be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
1359be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    else  {
1360be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        // Reset only if already set
1361be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        if(mCurrentVideoEffect & effect)
1362be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mCurrentVideoEffect &= ~effect;
1363be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
1364be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1365be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    return;
1366be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi}
1367be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1368be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1369be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray KundargiM4OSA_ERR VideoEditorPreviewController::applyVideoEffect(
1370be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4OSA_Void * dataPtr, M4OSA_UInt32 colorFormat, M4OSA_UInt32 videoWidth,
1371be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4OSA_UInt32 videoHeight, M4OSA_UInt32 timeMs, M4OSA_Void* outPtr) {
1372be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1373be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
1374be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    vePostProcessParams postProcessParams;
1375be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1376be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    postProcessParams.vidBuffer = (M4VIFI_UInt8*)dataPtr;
1377be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    postProcessParams.videoWidth = videoWidth;
1378be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    postProcessParams.videoHeight = videoHeight;
1379be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    postProcessParams.timeMs = timeMs;
1380be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    postProcessParams.timeOffset = 0; //Since timeMS already takes care of offset in this case
1381be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    postProcessParams.effectsSettings = mEffectsSettings;
1382be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    postProcessParams.numberEffects = mNumberEffects;
1383be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    postProcessParams.outVideoWidth = mOutputVideoWidth;
1384be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    postProcessParams.outVideoHeight = mOutputVideoHeight;
1385be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    postProcessParams.currentVideoEffect = mCurrentVideoEffect;
1386be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    postProcessParams.renderingMode = mRenderingMode;
1387be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if(mIsFiftiesEffectStarted == M4OSA_TRUE) {
1388be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        postProcessParams.isFiftiesEffectStarted = M4OSA_TRUE;
1389be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        mIsFiftiesEffectStarted = M4OSA_FALSE;
1390be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
1391be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    else {
1392be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi       postProcessParams.isFiftiesEffectStarted = M4OSA_FALSE;
1393be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
1394be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    //postProcessParams.renderer = mTarget;
1395be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    postProcessParams.overlayFrameRGBBuffer = NULL;
1396be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    postProcessParams.overlayFrameYUVBuffer = NULL;
1397be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1398be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    mTarget->getBufferYV12(&(postProcessParams.pOutBuffer), &(postProcessParams.outBufferStride));
1399be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
14004c9874dc75d596e095109df21718325a5603d225Dharmaray Kundargi    err = applyEffectsAndRenderingMode(&postProcessParams, videoWidth, videoHeight);
1401be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    return err;
1402be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi}
1403be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1404be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray KundargiM4OSA_ERR VideoEditorPreviewController::setPreviewFrameRenderingMode(
1405be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4xVSS_MediaRendering mode, M4VIDEOEDITING_VideoFrameSize outputVideoSize) {
1406be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
14074c9874dc75d596e095109df21718325a5603d225Dharmaray Kundargi    LOGV("setMediaRenderingMode: outputVideoSize = %d", outputVideoSize);
1408be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    mRenderingMode = mode;
1409be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1410be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    switch(outputVideoSize) {
1411be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case M4VIDEOEDITING_kSQCIF:
1412be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoWidth = 128;
1413be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoHeight = 96;
1414be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1415be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1416be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case M4VIDEOEDITING_kQQVGA:
1417be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoWidth = 160;
1418be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoHeight = 120;
1419be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1420be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1421be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case M4VIDEOEDITING_kQCIF:
1422be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoWidth = 176;
1423be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoHeight = 144;
1424be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1425be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1426be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case M4VIDEOEDITING_kQVGA:
1427be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoWidth = 320;
1428be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoHeight = 240;
1429be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1430be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1431be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case M4VIDEOEDITING_kCIF:
1432be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoWidth = 352;
1433be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoHeight = 288;
1434be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1435be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1436be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case M4VIDEOEDITING_kVGA:
1437be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoWidth = 640;
1438be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoHeight = 480;
1439be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1440be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1441be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case M4VIDEOEDITING_kWVGA:
1442be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoWidth = 800;
1443be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoHeight = 480;
1444be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1445be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1446be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case M4VIDEOEDITING_kNTSC:
1447be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoWidth = 720;
1448be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoHeight = 480;
1449be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1450be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1451be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case M4VIDEOEDITING_k640_360:
1452be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoWidth = 640;
1453be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoHeight = 360;
1454be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1455be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1456be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case M4VIDEOEDITING_k854_480:
1457be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoWidth = 854;
1458be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoHeight = 480;
1459be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1460be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1461be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case M4VIDEOEDITING_kHD1280:
1462be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoWidth = 1280;
1463be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoHeight = 720;
1464be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1465be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1466be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case M4VIDEOEDITING_kHD1080:
1467be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoWidth = 1080;
1468be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoHeight = 720;
1469be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1470be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1471be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        case M4VIDEOEDITING_kHD960:
1472be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoWidth = 960;
1473be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoHeight = 720;
1474be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1475be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1476be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi        default:
1477be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoWidth = 0;
1478be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            mOutputVideoHeight = 0;
1479be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi            break;
1480be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
1481be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1482be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    return OK;
1483be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi}
1484be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1485be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray KundargiM4OSA_ERR VideoEditorPreviewController::doImageRenderingMode(
1486be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4OSA_Void * dataPtr, M4OSA_UInt32 colorFormat, M4OSA_UInt32 videoWidth,
1487be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4OSA_UInt32 videoHeight, M4OSA_Void* outPtr) {
1488be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1489be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
1490be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4VIFI_ImagePlane planeIn[3], planeOut[3];
1491be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4VIFI_UInt8 *inBuffer = M4OSA_NULL;
1492be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4OSA_UInt32 outputBufferWidth =0, outputBufferHeight=0;
1493be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1494be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    //frameSize = (videoWidth*videoHeight*3) >> 1;
1495be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    inBuffer = (M4OSA_UInt8 *)dataPtr;
1496be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1497be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    // In plane
1498be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    prepareYUV420ImagePlane(planeIn, videoWidth,
1499eb69601111ca9b14e58c4d1f6738bfde2db422afDharmaray Kundargi      videoHeight, (M4VIFI_UInt8 *)inBuffer, videoWidth, videoHeight);
1500be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1501be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    outputBufferWidth = mOutputVideoWidth;
1502be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    outputBufferHeight = mOutputVideoHeight;
1503be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1504be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    // Out plane
1505be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    uint8_t* outBuffer;
1506be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    size_t outBufferStride = 0;
1507be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1508be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    LOGV("doMediaRendering CALL getBuffer()");
1509be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    mTarget->getBufferYV12(&outBuffer, &outBufferStride);
1510be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1511be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    // Set the output YUV420 plane to be compatible with YV12 format
1512be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    //In YV12 format, sizes must be even
1513be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4OSA_UInt32 yv12PlaneWidth = ((mOutputVideoWidth +1)>>1)<<1;
1514be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    M4OSA_UInt32 yv12PlaneHeight = ((mOutputVideoHeight+1)>>1)<<1;
1515be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1516be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    prepareYV12ImagePlane(planeOut, yv12PlaneWidth, yv12PlaneHeight,
1517be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi     (M4OSA_UInt32)outBufferStride, (M4VIFI_UInt8 *)outBuffer);
1518be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1519be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    err = applyRenderingMode(planeIn, planeOut, mRenderingMode);
1520be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    if(err != M4NO_ERROR) {
15211156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru        LOGE("doImageRenderingMode: applyRenderingMode returned err=0x%x", (unsigned int)err);
1522be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    }
1523be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi    return err;
1524be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi}
1525be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi
1526be47966ced9cfbbd522f2d12dfca2dffd44394a9Dharmaray Kundargi} //namespace android
1527