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