VideoEditorMain.cpp revision 1ac760afabeb19ced48a788c7b675baba47d4db3
1cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi/* 2cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project 3cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * 4cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License"); 5cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * you may not use this file except in compliance with the License. 6cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * You may obtain a copy of the License at 7cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * 8cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * http://www.apache.org/licenses/LICENSE-2.0 9cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * 10cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software 11cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS, 12cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * See the License for the specific language governing permissions and 14cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * limitations under the License. 15cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi */ 16cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 17cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <dlfcn.h> 18cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <stdio.h> 19cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <unistd.h> 20cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <utils/Log.h> 21cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <utils/threads.h> 22cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <VideoEditorClasses.h> 23cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <VideoEditorJava.h> 24cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <VideoEditorOsal.h> 25cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <VideoEditorLogging.h> 26cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <marker.h> 27cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <VideoEditorClasses.h> 28cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <VideoEditorThumbnailMain.h> 29cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4OSA_Debug.h> 30cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4xVSS_Internal.h> 31cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <surfaceflinger/Surface.h> 32cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <surfaceflinger/ISurface.h> 33cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include "VideoEditorPreviewController.h" 34cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 35cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include "VideoEditorMain.h" 36cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 37cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargiextern "C" { 38cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4OSA_Clock.h> 39cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4OSA_CharStar.h> 40cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4OSA_Error.h> 41cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4OSA_FileCommon.h> 42cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4OSA_FileReader.h> 43cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4OSA_FileWriter.h> 44cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4OSA_FileExtra.h> 45cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4OSA_Memory.h> 46cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4OSA_String.h> 47cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4OSA_Thread.h> 48cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4xVSS_API.h> 49cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4VSS3GPP_ErrorCodes.h> 50cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4MCS_API.h> 51cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4MCS_ErrorCodes.h> 52cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4MDP_API.h> 53cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4READER_Common.h> 54cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4WRITER_common.h> 55cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi}; 56cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 57cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 58cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargiusing namespace android; 59cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 60cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#define THREAD_STACK_SIZE (65536) 61cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 62cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#define VIDEOEDITOR_VERSION_MAJOR 0 63cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#define VIDEOEDITOR_VERSION_MINOR 0 64cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#define VIDEOEDITOR_VERSION_REVISION 1 65cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 66cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 67cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargitypedef enum 68cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 69cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditState_NOT_INITIALIZED, 70cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditState_INITIALIZED, 71cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditState_ANALYZING, 72cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditState_ANALYZING_ERROR, 73cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditState_OPENED, 74cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditState_SAVING, 75cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditState_SAVING_ERROR, 76cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditState_SAVED, 77cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditState_STOPPING 78cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} ManualEditState; 79cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 80cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargitypedef struct 81cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 82cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JavaVM* pVM; 83cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject engine; 84cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jmethodID onCompletionMethodId; 85cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jmethodID onErrorMethodId; 86cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jmethodID onWarningMethodId; 87cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jmethodID onProgressUpdateMethodId; 88cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jmethodID onPreviewProgressUpdateMethodId; 89cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4xVSS_InitParams initParams; 90cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi void* pTextRendererHandle; 91cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4xVSS_getTextRgbBufferFct pTextRendererFunction; 92cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context engineContext; 93cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditState state; 94cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4VSS3GPP_EditSettings* pEditSettings; 95cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context threadContext; 96cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR threadResult; 97cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt8 threadProgress; 98cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VideoEditorPreviewController *mPreviewController; 99cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4xVSS_AudioMixingSettings *mAudioSettings; 100cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* Audio Graph changes */ 101cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context pAudioGraphMCSCtx; 102cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Bool bSkipState; 103cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jmethodID onAudioGraphProgressUpdateMethodId; 104cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi Mutex mLock; 105cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} ManualEditContext; 106cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 107cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargiextern "C" M4OSA_ERR M4MCS_open_normalMode( 108cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4MCS_Context pContext, 109cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Void* pFileIn, 110cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4VIDEOEDITING_FileType InputFileType, 111cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Void* pFileOut, 112cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Void* pTempFile); 113cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 114cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic M4OSA_ERR videoEditor_toUTF8Fct( 115cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Void* pBufferIn, 116cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt8* pBufferOut, 117cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32* bufferOutSize); 118cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 119cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic M4OSA_ERR videoEditor_fromUTF8Fct( 120cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt8* pBufferIn, 121cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Void* pBufferOut, 122cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32* bufferOutSize); 123cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 124cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic M4OSA_ERR videoEditor_getTextRgbBufferFct( 125cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Void* pRenderingData, 126cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Void* pTextBuffer, 127cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 textBufferSize, 128cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4VIFI_ImagePlane** pOutputPlane); 129cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 130cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void videoEditor_callOnProgressUpdate( 131cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext, 132cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int task, 133cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int progress); 134cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 135cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void videoEditor_freeContext( 136cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 137cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext** ppContext); 138cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 139cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic M4OSA_ERR videoEditor_threadProc( 140cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Void* param); 141cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 142cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic jobject videoEditor_getVersion( 143cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 144cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz); 145cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 146cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void videoEditor_init( 147cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 148cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 149cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring tempPath, 150cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring textRendererPath); 151cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 152cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void videoEditor_loadSettings( 153cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 154cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 155cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject settings); 156cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 157cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void videoEditor_unloadSettings( 158cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 159cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz); 160cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 161cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 162cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void videoEditor_stopEncoding( 163cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 164cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz); 165cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 166cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void videoEditor_release( 167cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 168cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz); 169cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int videoEditor_getPixels( 170cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* env, 171cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 172cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring path, 173cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jintArray pixelArray, 174cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 width, 175cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 height, 176cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 timeMS); 177cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int videoEditor_getPixelsList( 178cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* env, 179cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 180cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring path, 181cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jintArray pixelArray, 182cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 width, 183cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 height, 184cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 deltatimeMS, 185cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 noOfThumbnails, 186cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 startTime, 187cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 endTime); 188cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 189cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void 190cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_startPreview( 191cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 192cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 193cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject mSurface, 194cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jlong fromMs, 195cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jlong toMs, 196cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint callbackInterval, 197cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jboolean loop); 198cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 199cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void 200cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_populateSettings( 201cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 202cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 203cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject settings, 204cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject object, 205cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject audioSettingObject); 206cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 207cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void videoEditor_stopPreview(JNIEnv* pEnv, 208cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz); 209cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 210cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic jobject 211cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_getProperties( 212cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 213cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 214cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring file); 215cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 216cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int videoEditor_renderPreviewFrame(JNIEnv* pEnv, 217cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 218cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject mSurface, 219cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jlong fromMs, 220cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint surfaceWidth, 221cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint surfaceHeight); 222cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 223cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int videoEditor_registerManualEditMethods( 224cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv); 225cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 226cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void jniPreviewProgressCallback(void* cookie, M4OSA_UInt32 msgType, 227cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 argc); 228cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 22905d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharmastatic int videoEditor_renderMediaItemPreviewFrame(JNIEnv* pEnv, 230cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 231cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject mSurface, 232cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring filePath, 233cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint frameWidth, 234cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint frameHeight, 235cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint surfaceWidth, 236cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint surfaceHeight, 237cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jlong fromMs); 238cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 239cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int videoEditor_generateAudioWaveFormSync ( JNIEnv* pEnv, 240cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 241cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring pcmfilePath, 242cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring outGraphfilePath, 243cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint frameDuration, 244cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint channels, 245cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint samplesCount); 246cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 247cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int videoEditor_generateAudioRawFile(JNIEnv* pEnv, 248cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 249cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring infilePath, 250cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring pcmfilePath ); 251cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 252cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargiM4OSA_ERR videoEditor_generateAudio(JNIEnv* pEnv,ManualEditContext* pContext, 253cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* infilePath, 254cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* pcmfilePath ); 255cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 256cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int 257cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_generateClip( 258cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 259cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 260cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject settings); 261cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 26205d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharmastatic void videoEditor_clearSurface(JNIEnv* pEnv, 26305d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma jobject thiz, 2641ac760afabeb19ced48a788c7b675baba47d4db3Dheeraj Sharma jobject surface); 265cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 266cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic JNINativeMethod gManualEditMethods[] = { 267cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi {"getVersion", "()L"VERSION_CLASS_NAME";", 268cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (void *)videoEditor_getVersion }, 269cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi {"_init", "(Ljava/lang/String;Ljava/lang/String;)V", 270cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (void *)videoEditor_init }, 271cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi {"nativeStartPreview", "(Landroid/view/Surface;JJIZ)V", 272cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (void *)videoEditor_startPreview }, 273cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi {"nativePopulateSettings", 274cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "(L"EDIT_SETTINGS_CLASS_NAME";L"PREVIEW_PROPERTIES_CLASS_NAME";L" 275cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi AUDIO_SETTINGS_CLASS_NAME";)V", 276cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (void *)videoEditor_populateSettings }, 277cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi {"nativeRenderPreviewFrame", "(Landroid/view/Surface;JII)I", 278cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (int *)videoEditor_renderPreviewFrame }, 279cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi {"nativeRenderMediaItemPreviewFrame", 280cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "(Landroid/view/Surface;Ljava/lang/String;IIIIJ)I", 281cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (int *)videoEditor_renderMediaItemPreviewFrame }, 282cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi {"nativeStopPreview", "()V", 283cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (void *)videoEditor_stopPreview }, 284cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi {"stopEncoding", "()V", 285cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (void *)videoEditor_stopEncoding }, 286cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi {"release", "()V", 287cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (void *)videoEditor_release }, 288cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi {"nativeGetPixels", "(Ljava/lang/String;[IIIJ)I", 289cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (void*)videoEditor_getPixels }, 290cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi {"nativeGetPixelsList", "(Ljava/lang/String;[IIIIIJJ)I", 291cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (void*)videoEditor_getPixelsList }, 292cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi {"getMediaProperties", 293cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "(Ljava/lang/String;)Landroid/media/videoeditor/MediaArtistNativeHelper$Properties;", 294cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (void *)videoEditor_getProperties }, 295cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi {"nativeGenerateAudioGraph","(Ljava/lang/String;Ljava/lang/String;III)I", 296cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (int *)videoEditor_generateAudioWaveFormSync }, 297cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi {"nativeGenerateRawAudio", "(Ljava/lang/String;Ljava/lang/String;)I", 298cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (int *)videoEditor_generateAudioRawFile }, 299cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi {"nativeGenerateClip", "(L"EDIT_SETTINGS_CLASS_NAME";)I", 300cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (void *)videoEditor_generateClip }, 3011ac760afabeb19ced48a788c7b675baba47d4db3Dheeraj Sharma {"nativeClearSurface", "(Landroid/view/Surface;)V", 30205d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma (void *)videoEditor_clearSurface }, 303cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi}; 304cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 305cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi// temp file name of VSS out file 306cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#define TEMP_MCS_OUT_FILE_PATH "/tmpOut.3gp" 307cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 308cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargivoid 309cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargigetClipSetting( 310cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 311cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject object, 312cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4VSS3GPP_ClipSettings* pSettings) 313cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 314cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 315cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jfieldID fid; 316cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int field = 0; 317cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool needToBeLoaded = true; 318cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jclass clazz = pEnv->FindClass(PROPERTIES_CLASS_NAME); 319cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 320cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 321cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == clazz), 322cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 323cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 324cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(clazz,"duration","I"); 325cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.uiClipDuration = pEnv->GetIntField(object,fid); 326cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("duration = %d",pSettings->ClipProperties.uiClipDuration); 327cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 328cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(clazz,"videoFormat","I"); 329cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.VideoStreamType = 330cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4VIDEOEDITING_VideoFormat)pEnv->GetIntField(object,fid); 331cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("videoFormat = %d",pSettings->ClipProperties.VideoStreamType); 332cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 333cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(clazz,"videoDuration","I"); 334cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.uiClipVideoDuration = pEnv->GetIntField(object,fid); 335cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("videoDuration = %d", 336cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.uiClipVideoDuration); 337cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 338cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(clazz,"width","I"); 339cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.uiVideoWidth = pEnv->GetIntField(object,fid); 340cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("width = %d",pSettings->ClipProperties.uiVideoWidth); 341cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 342cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(clazz,"height","I"); 343cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.uiVideoHeight = pEnv->GetIntField(object,fid); 344cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("height = %d",pSettings->ClipProperties.uiVideoHeight); 345cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 346cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(clazz,"audioFormat","I"); 347cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.AudioStreamType = 348cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4VIDEOEDITING_AudioFormat)pEnv->GetIntField(object,fid); 349cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("audioFormat = %d",pSettings->ClipProperties.AudioStreamType); 350cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 351cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(clazz,"audioDuration","I"); 352cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.uiClipAudioDuration = pEnv->GetIntField(object,fid); 353cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("audioDuration = %d", 354cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.uiClipAudioDuration); 355cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 356cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(clazz,"audioBitrate","I"); 357cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.uiAudioBitrate = pEnv->GetIntField(object,fid); 358cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("audioBitrate = %d",pSettings->ClipProperties.uiAudioBitrate); 359cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 360cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(clazz,"audioChannels","I"); 361cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.uiNbChannels = pEnv->GetIntField(object,fid); 362cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("audioChannels = %d",pSettings->ClipProperties.uiNbChannels); 363cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 364cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(clazz,"audioSamplingFrequency","I"); 365cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.uiSamplingFrequency = pEnv->GetIntField(object,fid); 366cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("audioSamplingFrequency = %d", 367cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.uiSamplingFrequency); 368cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 369cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(clazz,"audioVolumeValue","I"); 370cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.uiClipAudioVolumePercentage = 371cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->GetIntField(object,fid); 372cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("audioVolumeValue = %d", 373cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.uiClipAudioVolumePercentage); 374cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 375cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 376cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void jniPreviewProgressCallback (void* cookie, M4OSA_UInt32 msgType, 377cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 argc) 378cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 379cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext *pContext = (ManualEditContext *)cookie; 380cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv = NULL; 381cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool isFinished = false; 382cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int currentMs = 0; 383cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int error = M4NO_ERROR; 384cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 385cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Attach the current thread. 386cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pVM->AttachCurrentThread(&pEnv, NULL); 387cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi switch(msgType) 388cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 389cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi case MSG_TYPE_PROGRESS_INDICATION: 390cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi currentMs = argc; 391cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi break; 392cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi case MSG_TYPE_PLAYER_ERROR: 393cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi currentMs = -1; 394cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi error = argc; 395cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi break; 396cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi case MSG_TYPE_PREVIEW_END: 397cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi isFinished = true; 398cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi break; 399cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi default: 400cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi break; 401cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 402cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 403cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->CallVoidMethod(pContext->engine, 404cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->onPreviewProgressUpdateMethodId, 405cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi currentMs,isFinished); 406cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 407cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Detach the current thread. 408cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pVM->DetachCurrentThread(); 409cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 410cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 411cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void videoEditor_stopPreview(JNIEnv* pEnv, 412cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz) 413cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 414cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = M4OSA_NULL; 415cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool needToBeLoaded = true; 416cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the context. 417cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = 418cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded, pEnv, thiz); 419cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 420cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was set. 421cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 422cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext), 423cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 424cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mPreviewController->stopPreview(); 425cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 426cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 42705d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharmastatic void videoEditor_clearSurface(JNIEnv* pEnv, 42805d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma jobject thiz, 4291ac760afabeb19ced48a788c7b675baba47d4db3Dheeraj Sharma jobject surface) 43005d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma{ 43105d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma bool needToBeLoaded = true; 43205d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma M4OSA_ERR result = M4NO_ERROR; 43305d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma VideoEditor_renderPreviewFrameStr frameStr; 43405d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma const char* pMessage = NULL; 4351ac760afabeb19ced48a788c7b675baba47d4db3Dheeraj Sharma // Let the size be QVGA 4361ac760afabeb19ced48a788c7b675baba47d4db3Dheeraj Sharma int width = 320; 4371ac760afabeb19ced48a788c7b675baba47d4db3Dheeraj Sharma int height = 240; 43805d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma ManualEditContext* pContext = M4OSA_NULL; 43905d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma 44005d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma // Get the context. 44105d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma pContext = (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded, pEnv, thiz); 44205d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, 44305d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma "VIDEO_EDITOR","pContext = 0x%x",pContext); 44405d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma 44505d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma // Make sure that the context was set. 44605d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 44705d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma (M4OSA_NULL == pContext), 44805d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma "not initialized"); 44905d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma 45005d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma // Make sure that the context was set. 45105d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 45205d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma (M4OSA_NULL == pContext->mPreviewController), 45305d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma "not initialized"); 45405d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma 45505d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma // Validate the surface parameter. 45605d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma videoEditJava_checkAndThrowIllegalArgumentException(&needToBeLoaded, pEnv, 45705d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma (NULL == surface), 45805d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma "surface is null"); 45905d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma 46005d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma jclass surfaceClass = pEnv->FindClass("android/view/Surface"); 46105d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 46205d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma (M4OSA_NULL == surfaceClass), 46305d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma "not initialized"); 46405d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma 46505d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma jfieldID surface_native = 46605d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma pEnv->GetFieldID(surfaceClass, ANDROID_VIEW_SURFACE_JNI_ID, "I"); 46705d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 46805d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma (M4OSA_NULL == surface_native), 46905d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma "not initialized"); 47005d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma 47105d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma Surface* const p = (Surface*)pEnv->GetIntField(surface, surface_native); 47205d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma sp<Surface> previewSurface = sp<Surface>(p); 47305d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma 4741ac760afabeb19ced48a788c7b675baba47d4db3Dheeraj Sharma frameStr.pBuffer = M4OSA_NULL; 47505d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma frameStr.timeMs = 0; 47605d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma frameStr.uiSurfaceWidth = width; 47705d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma frameStr.uiSurfaceHeight = height; 47805d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma frameStr.uiFrameWidth = width; 47905d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma frameStr.uiFrameHeight = height; 48005d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma frameStr.bApplyEffect = M4OSA_FALSE; 48105d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma frameStr.clipBeginCutTime = 0; 48205d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma frameStr.clipEndCutTime = 0; 48305d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma 4841ac760afabeb19ced48a788c7b675baba47d4db3Dheeraj Sharma result = pContext->mPreviewController->clearSurface(previewSurface, 48505d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma &frameStr); 48605d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 48705d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma (M4NO_ERROR != result), result); 48805d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma 48905d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma } 49005d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma 491cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int videoEditor_renderPreviewFrame(JNIEnv* pEnv, 492cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 493cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject mSurface, 494cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jlong fromMs, 495cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint surfaceWidth, 496cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint surfaceHeight ) 497cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 498cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool needToBeLoaded = true; 499cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 500cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 timeMs = (M4OSA_UInt32)fromMs; 501cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 i=0,tnTimeMs = 0, framesizeYuv =0; 502cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4VIFI_UInt8 *pixelArray = M4OSA_NULL; 503cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 iCurrentClipIndex = 0, uiNumberOfClipsInStoryBoard =0, 504cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi uiClipDuration = 0, uiTotalClipDuration = 0, 505cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi iIncrementedDuration = 0; 506cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VideoEditor_renderPreviewFrameStr frameStr; 507cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context tnContext = M4OSA_NULL; 508cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi const char* pMessage = NULL; 509581cad2221cb367e9e3ef6991c565cd37ced994fJames Dong M4VIFI_ImagePlane *yuvPlane = NULL; 510cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 511cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, 512cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "VIDEO_EDITOR", "surfaceWidth = %d",surfaceWidth); 513cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, 514cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "VIDEO_EDITOR", "surfaceHeight = %d",surfaceHeight); 515cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = M4OSA_NULL; 516cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the context. 517cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = 518cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded, pEnv, thiz); 519cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, 520cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "VIDEO_EDITOR","pContext = 0x%x",pContext); 521cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 522cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was set. 523cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 524cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext), 525cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 526cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 527cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was set. 528cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 529cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext->mPreviewController), 530cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 531cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 532cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Validate the mSurface parameter. 533cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalArgumentException(&needToBeLoaded, pEnv, 534cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (NULL == mSurface), 535cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "mSurface is null"); 536cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jclass surfaceClass = pEnv->FindClass("android/view/Surface"); 537cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 538cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == surfaceClass), 539cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 540cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 541cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jfieldID surface_native = 542cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->GetFieldID(surfaceClass, ANDROID_VIEW_SURFACE_JNI_ID, "I"); 543cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 544cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == surface_native), 545cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 546cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 547cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi Surface* const p = (Surface*)pEnv->GetIntField(mSurface, surface_native); 548cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi sp<Surface> previewSurface = sp<Surface>(p); 549cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 550cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* Determine the total number of clips, total duration*/ 551cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi uiNumberOfClipsInStoryBoard = pContext->pEditSettings->uiClipNumber; 552cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 553cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi for (i = 0; i < uiNumberOfClipsInStoryBoard; i++) { 554cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi uiClipDuration = pContext->pEditSettings->pClipList[i]->uiEndCutTime - 555cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->pClipList[i]->uiBeginCutTime; 556cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi uiTotalClipDuration += uiClipDuration; 557cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 558cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 559cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* determine the clip whose thumbnail needs to be rendered*/ 560cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (timeMs == 0) { 561cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi iCurrentClipIndex = 0; 562cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi i=0; 563cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } else { 564cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", 565cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_renderPreviewFrame() timeMs=%d", timeMs); 566cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 567cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (timeMs > uiTotalClipDuration) { 568cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", 569cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_renderPreviewFrame() timeMs > uiTotalClipDuration"); 570cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pMessage = videoEditJava_getErrorName(M4ERR_PARAMETER); 571cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(pEnv, "java/lang/IllegalArgumentException", pMessage); 572cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return -1; 573cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 574cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 575cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi for (i = 0; i < uiNumberOfClipsInStoryBoard; i++) { 576cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (timeMs < (iIncrementedDuration + 577cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (pContext->pEditSettings->pClipList[i]->uiEndCutTime - 578cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->pClipList[i]->uiBeginCutTime))) 579cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 580cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi iCurrentClipIndex = i; 581cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", 582cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_renderPreviewFrame() iCurrentClipIndex=%d for timeMs=%d", 583cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi iCurrentClipIndex, timeMs); 584cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi break; 585cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 586cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else { 587cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi iIncrementedDuration = iIncrementedDuration + 588cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (pContext->pEditSettings->pClipList[i]->uiEndCutTime - 589cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->pClipList[i]->uiBeginCutTime); 590cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 591cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 592cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 593cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* If timestamp is beyond story board duration, return*/ 594cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (i >= uiNumberOfClipsInStoryBoard) { 595cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (timeMs == iIncrementedDuration) { 596cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi iCurrentClipIndex = i-1; 597cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } else { 598cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return -1; 599cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 600cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 601cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 602cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*+ Handle the image files here */ 603cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext->pEditSettings->pClipList[iCurrentClipIndex]->FileType == 604cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*M4VIDEOEDITING_kFileType_JPG*/ M4VIDEOEDITING_kFileType_ARGB8888 ) { 605cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", " iCurrentClipIndex %d ", iCurrentClipIndex); 606cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", 607cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi " Height = %d", 608cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->pClipList[iCurrentClipIndex]->ClipProperties.uiVideoHeight); 609cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 610cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", 611cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi " Width = %d", 612cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->pClipList[iCurrentClipIndex]->ClipProperties.uiVideoWidth); 613cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 614cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LvGetImageThumbNail((const char *)pContext->pEditSettings->\ 615cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pClipList[iCurrentClipIndex]->pFile, 616cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->pClipList[iCurrentClipIndex]->ClipProperties.uiVideoHeight, 617cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->pClipList[iCurrentClipIndex]->ClipProperties.uiVideoWidth, 618cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Void **)&frameStr.pBuffer); 619cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } else { 620cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* Handle 3gp/mp4 Clips here */ 621cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* get thumbnail*/ 622cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = ThumbnailOpen(&tnContext, 623cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (const M4OSA_Char*)pContext->pEditSettings->\ 624cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pClipList[iCurrentClipIndex]->pFile, M4OSA_TRUE); 625cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (result != M4NO_ERROR || tnContext == M4OSA_NULL) { 626cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return -1; 627cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 628cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 629cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* timeMs is relative to storyboard; in this api it shud be relative to this clip */ 630cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ((i >= uiNumberOfClipsInStoryBoard) && 631cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (timeMs == iIncrementedDuration)) { 632cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi tnTimeMs = pContext->pEditSettings->\ 633cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pClipList[iCurrentClipIndex]->uiEndCutTime; 634cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } else { 635cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi tnTimeMs = pContext->pEditSettings->\ 636cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pClipList[iCurrentClipIndex]->uiBeginCutTime 637cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi + (timeMs - iIncrementedDuration); 638cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 639cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 640cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", 641cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "video width = %d",pContext->pEditSettings->pClipList[iCurrentClipIndex]->\ 642cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ClipProperties.uiVideoWidth); 643cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", 644cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "video height = %d",pContext->pEditSettings->pClipList[iCurrentClipIndex]->\ 645cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ClipProperties.uiVideoHeight); 646cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", 647cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "current clip index = %d",iCurrentClipIndex); 648cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 649cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 width = pContext->pEditSettings->pClipList[iCurrentClipIndex]->\ 650cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ClipProperties.uiVideoWidth; 651cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 height = pContext->pEditSettings->pClipList[iCurrentClipIndex]->\ 652cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ClipProperties.uiVideoHeight; 653cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 654cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi framesizeYuv = width * height * 1.5; 655cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 656cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pixelArray = (M4VIFI_UInt8 *)M4OSA_malloc(framesizeYuv, M4VS, 657cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char*)"videoEditor pixelArray"); 658cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pixelArray == M4OSA_NULL) { 659cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", 660cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_renderPreviewFrame() malloc error"); 661cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ThumbnailClose(tnContext); 662cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pMessage = videoEditJava_getErrorName(M4ERR_ALLOC); 663cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(pEnv, "java/lang/RuntimeException", pMessage); 664cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return -1; 665cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 666cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 667cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = ThumbnailGetPixels16(tnContext, (M4OSA_Int16 *)pixelArray, 668cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->pClipList[iCurrentClipIndex]->\ 669cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ClipProperties.uiVideoWidth, 670cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->pClipList[iCurrentClipIndex]->\ 671cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ClipProperties.uiVideoHeight, 672cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi &tnTimeMs); 673cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (result != M4NO_ERROR) { 674cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)pixelArray); 675cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ThumbnailClose(tnContext); 676cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return -1; 677cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 678cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 679cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ThumbnailClose(tnContext); 680cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi tnContext = M4OSA_NULL; 681cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 682cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#ifdef DUMPTOFILE 683cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 684cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context fileContext; 685cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* fileName = (M4OSA_Char*)"/mnt/sdcard/FirstRGB565.raw"; 686cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileExtraDelete((const M4OSA_Char *)fileName); 687cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteOpen(&fileContext, (M4OSA_Void*) fileName,\ 688cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_kFileWrite|M4OSA_kFileCreate); 689cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteData(fileContext, (M4OSA_MemAddr8) pixelArray, 690cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi framesizeYuv); 691cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteClose(fileContext); 692cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 693cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#endif 694cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 695cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /** 696cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * Allocate output YUV planes 697cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi */ 698cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane = (M4VIFI_ImagePlane*)M4OSA_malloc(3*sizeof(M4VIFI_ImagePlane), M4VS, 699cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char*)"videoEditor_renderPreviewFrame Output plane YUV"); 700cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (yuvPlane == M4OSA_NULL) { 701cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", 702cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_renderPreviewFrame() malloc error for yuv plane"); 703cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)pixelArray); 704cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pMessage = videoEditJava_getErrorName(M4ERR_ALLOC); 705cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(pEnv, "java/lang/RuntimeException", pMessage); 706cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return -1; 707cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 708cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 709cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[0].u_width = width; 710cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[0].u_height = height; 711cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[0].u_topleft = 0; 712cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[0].u_stride = width; 713cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[0].pac_data = (M4VIFI_UInt8*)pixelArray; 714cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 715cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[1].u_width = width>>1; 716cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[1].u_height = height>>1; 717cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[1].u_topleft = 0; 718cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[1].u_stride = width>>1; 719cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[1].pac_data = yuvPlane[0].pac_data 720cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi + yuvPlane[0].u_width * yuvPlane[0].u_height; 721cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[2].u_width = (width)>>1; 722cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[2].u_height = (height)>>1; 723cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[2].u_topleft = 0; 724cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[2].u_stride = (width)>>1; 725cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[2].pac_data = yuvPlane[1].pac_data 726cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi + yuvPlane[1].u_width * yuvPlane[1].u_height; 727cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 728cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#ifdef DUMPTOFILE 729cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 730cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context fileContext; 731cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* fileName = (M4OSA_Char*)"/mnt/sdcard/ConvertedYuv.yuv"; 732cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileExtraDelete((const M4OSA_Char *)fileName); 733cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteOpen(&fileContext, (M4OSA_Void*) fileName,\ 734cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_kFileWrite|M4OSA_kFileCreate); 735cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteData(fileContext, 736cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_MemAddr8) yuvPlane[0].pac_data, framesizeYuv); 737cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteClose(fileContext); 738cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 739cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#endif 740cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 741cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* Fill up the render structure*/ 742cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.pBuffer = (M4OSA_Void*)yuvPlane[0].pac_data; 743cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 744cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 745cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.timeMs = timeMs; /* timestamp on storyboard*/ 746cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.uiSurfaceWidth = 747cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->pClipList[iCurrentClipIndex]->\ 748cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ClipProperties.uiVideoWidth; 749cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.uiSurfaceHeight = 750cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->pClipList[iCurrentClipIndex]->\ 751cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ClipProperties.uiVideoHeight; 752cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.uiFrameWidth = 753cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->pClipList[iCurrentClipIndex]->\ 754cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ClipProperties.uiVideoWidth; 755cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.uiFrameHeight = 756cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->pClipList[iCurrentClipIndex]->\ 757cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ClipProperties.uiVideoHeight; 758cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext->pEditSettings->nbEffects > 0) { 759cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.bApplyEffect = M4OSA_TRUE; 760cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } else { 761cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.bApplyEffect = M4OSA_FALSE; 762cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 763cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.clipBeginCutTime = iIncrementedDuration; 764cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.clipEndCutTime = 765cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi iIncrementedDuration + 766cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (pContext->pEditSettings->pClipList[iCurrentClipIndex]->uiEndCutTime -\ 767cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->pClipList[iCurrentClipIndex]->uiBeginCutTime); 768cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 769cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mPreviewController->setPreviewFrameRenderingMode( 770cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->\ 771cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pClipList[iCurrentClipIndex]->xVSS.MediaRendering, 772cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->xVSS.outputVideoSize); 773cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 774cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = pContext->mPreviewController->renderPreviewFrame(previewSurface, 775cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi &frameStr); 776cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 777cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 778cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 779cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext->pEditSettings->pClipList[iCurrentClipIndex]->FileType ==\ 780cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*M4VIDEOEDITING_kFileType_JPG */ M4VIDEOEDITING_kFileType_ARGB8888) { 781cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)frameStr.pBuffer); 782cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } else { 783cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)yuvPlane[0].pac_data); 784cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)yuvPlane); 785cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 786cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return tnTimeMs; 787cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 788cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 789cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int videoEditor_renderMediaItemPreviewFrame(JNIEnv* pEnv, 790cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 791cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject mSurface, 792cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring filePath, 793cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint frameWidth, 794cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint frameHeight, 795cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint surfaceWidth, 796cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint surfaceHeight, 797cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jlong fromMs) 798cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 799cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool needToBeLoaded = true; 800cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 801cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 timeMs = (M4OSA_UInt32)fromMs; 802cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 framesizeYuv =0; 803cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4VIFI_UInt8 *pixelArray = M4OSA_NULL; 804cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VideoEditor_renderPreviewFrameStr frameStr; 805cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context tnContext = M4OSA_NULL; 806cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi const char* pMessage = NULL; 807cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4VIFI_ImagePlane yuvPlane[3], rgbPlane; 808cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 809cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = M4OSA_NULL; 810cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the context. 811cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = 812cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded, 813cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv, thiz); 814cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 815cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was set. 816cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 817cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext), 818cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 819cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 820cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was set. 821cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 822cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext->mPreviewController), 823cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 824cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 825cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Validate the mSurface parameter. 826cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalArgumentException(&needToBeLoaded, pEnv, 827cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (NULL == mSurface), 828cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "mSurface is null"); 829cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jclass surfaceClass = pEnv->FindClass("android/view/Surface"); 830cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 831cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == surfaceClass), 832cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 833cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 834cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jfieldID surface_native = 835cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->GetFieldID(surfaceClass, ANDROID_VIEW_SURFACE_JNI_ID, "I"); 836cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 837cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == surface_native), 838cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 839cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 840cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi Surface* const p = (Surface*)pEnv->GetIntField(mSurface, surface_native); 841cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi sp<Surface> previewSurface = sp<Surface>(p); 842cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 843cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 844cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi const char *pString = pEnv->GetStringUTFChars(filePath, NULL); 845cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pString == M4OSA_NULL) { 846cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pEnv != NULL) { 847cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(pEnv, "java/lang/RuntimeException", "Input string null"); 848cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 849cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 850cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", 851cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_renderMediaItemPreviewFrame() timeMs=%d", timeMs); 852cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* get thumbnail*/ 853cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = ThumbnailOpen(&tnContext,(const M4OSA_Char*)pString, M4OSA_TRUE); 854cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (result != M4NO_ERROR || tnContext == M4OSA_NULL) { 855cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return timeMs; 856cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 857cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 858cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi framesizeYuv = ((frameWidth)*(frameHeight)*1.5); 859cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 860cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pixelArray = (M4VIFI_UInt8 *)M4OSA_malloc(framesizeYuv, M4VS,\ 861cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char*)"videoEditor pixelArray"); 862cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pixelArray == M4OSA_NULL) { 863cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", 864cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_renderPreviewFrame() malloc error"); 865cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ThumbnailClose(tnContext); 866cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pMessage = videoEditJava_getErrorName(M4ERR_ALLOC); 867cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(pEnv, "java/lang/RuntimeException", pMessage); 868cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return timeMs; 869cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 870cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 871cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = ThumbnailGetPixels16(tnContext, (M4OSA_Int16 *)pixelArray, 872cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameWidth, 873cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameHeight, &timeMs); 874cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (result != M4NO_ERROR) { 875cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)pixelArray); 876cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ThumbnailClose(tnContext); 877cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return fromMs; 878cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 879cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 880cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#ifdef DUMPTOFILESYSTEM 881cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 882cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context fileContext; 883cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* fileName = (M4OSA_Char*)"/mnt/sdcard/FirstRGB565.rgb"; 884cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteOpen(&fileContext, (M4OSA_Void*) fileName,\ 885cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_kFileWrite|M4OSA_kFileCreate); 886cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteData(fileContext, (M4OSA_MemAddr8) pixelArray, 887cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi framesizeRgb); 888cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteClose(fileContext); 889cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 890cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#endif 891cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 892cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[0].pac_data = (M4VIFI_UInt8*)pixelArray; 893cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[0].u_height = frameHeight; 894cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[0].u_width = frameWidth; 895cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[0].u_stride = yuvPlane[0].u_width; 896cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[0].u_topleft = 0; 897cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 898cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[1].u_height = frameHeight/2; 899cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[1].u_width = frameWidth/2; 900cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[1].u_stride = yuvPlane[1].u_width; 901cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[1].u_topleft = 0; 902cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[1].pac_data = yuvPlane[0].pac_data 903cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi + yuvPlane[0].u_width*yuvPlane[0].u_height; 904cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 905cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[2].u_height = frameHeight/2; 906cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[2].u_width = frameWidth/2; 907cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[2].u_stride = yuvPlane[2].u_width; 908cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[2].u_topleft = 0; 909cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[2].pac_data = yuvPlane[0].pac_data 910cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi + yuvPlane[0].u_width*yuvPlane[0].u_height + \ 911cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (yuvPlane[0].u_width/2)*(yuvPlane[0].u_height/2); 912cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#ifdef DUMPTOFILESYSTEM 913cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 914cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context fileContext; 915cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* fileName = (M4OSA_Char*)"/mnt/sdcard/ConvertedYuv.yuv"; 916cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteOpen(&fileContext, (M4OSA_Void*) fileName,\ 917cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_kFileWrite|M4OSA_kFileCreate); 918cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteData(fileContext, (M4OSA_MemAddr8) yuvPlane[0].pac_data, 919cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi framesizeYuv); 920cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteClose(fileContext); 921cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 922cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#endif 923cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 924cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* Fill up the render structure*/ 925cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.pBuffer = (M4OSA_Void*)yuvPlane[0].pac_data; 926cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.timeMs = timeMs; /* timestamp on storyboard*/ 927cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.uiSurfaceWidth = frameWidth; 928cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.uiSurfaceHeight = frameHeight; 929cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.uiFrameWidth = frameWidth; 930cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.uiFrameHeight = frameHeight; 931cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.bApplyEffect = M4OSA_FALSE; 932cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // clip begin cuttime and end cuttime set to 0 933cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // as its only required when effect needs to be applied while rendering 934cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.clipBeginCutTime = 0; 935cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.clipEndCutTime = 0; 936cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 937cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* pContext->mPreviewController->setPreviewFrameRenderingMode(M4xVSS_kBlackBorders, 938cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4VIDEOEDITING_VideoFrameSize)(M4VIDEOEDITING_kHD960+1));*/ 939cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result 940cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = pContext->mPreviewController->renderPreviewFrame(previewSurface,&frameStr); 941cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 942cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 943cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 944cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* free the pixelArray and yuvPlane[0].pac_data */ 945cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)yuvPlane[0].pac_data); 946cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 947cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ThumbnailClose(tnContext); 948cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 949cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return timeMs; 950cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 951cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 952cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargiint videoEditor_generateAudioRawFile( JNIEnv* pEnv, 953cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 954cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring infilePath, 955cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring pcmfilePath) 956cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 957cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 958cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool loaded = true; 959cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = M4OSA_NULL; 960cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 961cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 962cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 963cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi const char *pInputFile = pEnv->GetStringUTFChars(infilePath, NULL); 964cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pInputFile == M4OSA_NULL) { 965cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pEnv != NULL) { 966cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(pEnv, "java/lang/RuntimeException", "Input string null"); 967cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 968cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 969cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 970cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi const char *pStringOutPCMFilePath = pEnv->GetStringUTFChars(pcmfilePath, NULL); 971cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pStringOutPCMFilePath == M4OSA_NULL) { 972cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pEnv != NULL) { 973cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(pEnv, "java/lang/RuntimeException", "Input string null"); 974cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 975cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 976cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 977cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, 978cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "VIDEO_EDITOR", "videoEditor_generateAudioRawFile infilePath %s", 979cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pInputFile); 980cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, 981cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "VIDEO_EDITOR", "videoEditor_generateAudioRawFile pcmfilePath %s", 982cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pStringOutPCMFilePath); 983cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the context. 984cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = (ManualEditContext*)videoEditClasses_getContext(&loaded, pEnv, thiz); 985cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 986cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = videoEditor_generateAudio( pEnv, pContext, (M4OSA_Char*)pInputFile, 987cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char*)pStringOutPCMFilePath); 988cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 989cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return result; 990cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 991cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 992cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargiM4OSA_ERR videoEditor_generateAudio(JNIEnv* pEnv,ManualEditContext* pContext, 993cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* infilePath, 994cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* pcmfilePath ) 995cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 996cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool needToBeLoaded = true; 997cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 998cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4MCS_Context mcsContext; 999cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* pInputFile = M4OSA_NULL; 1000cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* pOutputFile = M4OSA_NULL; 1001cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* pTempPath = M4OSA_NULL; 1002cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4MCS_OutputParams* pOutputParams = M4OSA_NULL; 1003cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4MCS_EncodingParams* pEncodingParams = M4OSA_NULL; 1004cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Int32 pInputFileType = 0; 1005cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt8 threadProgress = 0; 1006cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* pTemp3gpFilePath = M4OSA_NULL; 1007cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1008cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_generateAudio()"); 1009cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1010cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalArgumentException(&needToBeLoaded, pEnv, 1011cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (NULL == pContext), 1012cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "ManualEditContext is null"); 1013cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1014cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "M4MCS_init()"); 1015cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1016cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputParams = (M4MCS_OutputParams *)M4OSA_malloc( 1017cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi sizeof(M4MCS_OutputParams),0x00, 1018cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char *)"M4MCS_OutputParams"); 1019cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1020cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pOutputParams), 1021cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1022cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1023cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEncodingParams = (M4MCS_EncodingParams *)M4OSA_malloc( 1024cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi sizeof(M4MCS_EncodingParams),0x00, 1025cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char *)"M4MCS_EncodingParams"); 1026cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1027cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pEncodingParams), 1028cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1029cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Initialize the MCS library. 1030cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4MCS_init(&mcsContext, pContext->initParams.pFileReadPtr, 1031cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->initParams.pFileWritePtr); 1032cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv,\ 1033cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 1034cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1035cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == mcsContext), 1036cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1037cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // generate the path for temp 3gp output file 1038cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pTemp3gpFilePath = (M4OSA_Char*) M4OSA_malloc ( 1039cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_chrLength((M4OSA_Char*)pContext->initParams.pTempPath) 1040cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi + M4OSA_chrLength ((M4OSA_Char*)TEMP_MCS_OUT_FILE_PATH)) , 0x0, 1041cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char*) "Malloc for temp 3gp file"); 1042cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ( pTemp3gpFilePath != M4OSA_NULL ) 1043cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1044cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_memset(pTemp3gpFilePath , 1045cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_chrLength((M4OSA_Char*)pContext->initParams.pTempPath) 1046cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi + M4OSA_chrLength((M4OSA_Char*)TEMP_MCS_OUT_FILE_PATH), 0); 1047cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_chrNCat ( (M4OSA_Char*)pTemp3gpFilePath, 1048cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char*)pContext->initParams.pTempPath , 1049cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_chrLength ((M4OSA_Char*)pContext->initParams.pTempPath)); 1050cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_chrNCat ( pTemp3gpFilePath , (M4OSA_Char*)TEMP_MCS_OUT_FILE_PATH, 1051cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_chrLength ((M4OSA_Char*)TEMP_MCS_OUT_FILE_PATH)); 1052cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1053cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1054cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pInputFile = (M4OSA_Char *) infilePath; //pContext->mAudioSettings->pFile; 1055cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //Delete this file later 1056cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputFile = (M4OSA_Char *) pTemp3gpFilePath; 1057cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Temp folder path for VSS use = ProjectPath 1058cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pTempPath = (M4OSA_Char *) pContext->initParams.pTempPath; 1059cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pInputFileType = (M4VIDEOEDITING_FileType)pContext->mAudioSettings->fileType; 1060cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1061cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "TEMP_MCS_OUT_FILE_PATH len %d", 1062cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_chrLength ((M4OSA_Char*)TEMP_MCS_OUT_FILE_PATH)); 1063cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "pTemp3gpFilePath %s", 1064cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputFile); 1065cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1066cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "M4MCS_open()"); 1067cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1068cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4MCS_open(mcsContext, pInputFile, 1069cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4VIDEOEDITING_FileType)pInputFileType, 1070cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputFile, pTempPath); 1071cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 1072cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 1073cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1074cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputParams->OutputFileType 1075cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = (M4VIDEOEDITING_FileType)M4VIDEOEDITING_kFileType_3GPP; 1076cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the video format. 1077cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputParams->OutputVideoFormat = 1078cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4VIDEOEDITING_VideoFormat)M4VIDEOEDITING_kNoneVideo;//M4VIDEOEDITING_kNoneVideo; 1079cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the frame size. 1080cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputParams->OutputVideoFrameSize 1081cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = (M4VIDEOEDITING_VideoFrameSize)M4VIDEOEDITING_kQCIF; 1082cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the frame rate. 1083cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputParams->OutputVideoFrameRate 1084cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = (M4VIDEOEDITING_VideoFramerate)M4VIDEOEDITING_k5_FPS; 1085cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1086cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the audio format. 1087cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputParams->OutputAudioFormat 1088cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = (M4VIDEOEDITING_AudioFormat)M4VIDEOEDITING_kAAC; 1089cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the audio sampling frequency. 1090cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputParams->OutputAudioSamplingFrequency = 1091cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4VIDEOEDITING_AudioSamplingFrequency)M4VIDEOEDITING_k32000_ASF; 1092cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the audio mono. 1093cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputParams->bAudioMono = false; 1094cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the pcm file; null for now. 1095cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputParams->pOutputPCMfile = (M4OSA_Char *)pcmfilePath; 1096cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //(M4OSA_Char *)"/sdcard/Output/AudioPcm.pcm"; 1097cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the audio sampling frequency. 1098cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputParams->MediaRendering = (M4MCS_MediaRendering)M4MCS_kCropping; 1099cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // new params after integrating MCS 2.0 1100cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the number of audio effects; 0 for now. 1101cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputParams->nbEffects = 0; 1102cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the audio effect; null for now. 1103cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputParams->pEffects = NULL; 1104cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the audio effect; null for now. 1105cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputParams->bDiscardExif = M4OSA_FALSE; 1106cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the audio effect; null for now. 1107cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputParams->bAdjustOrientation = M4OSA_FALSE; 1108cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1109cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "M4MCS_setOutputParams()"); 1110cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4MCS_setOutputParams(mcsContext, pOutputParams); 1111cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 1112cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 1113cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1114cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the video bitrate. 1115cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEncodingParams->OutputVideoBitrate = 1116cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4VIDEOEDITING_Bitrate)M4VIDEOEDITING_kUndefinedBitrate; 1117cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the audio bitrate. 1118cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEncodingParams->OutputAudioBitrate 1119cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = (M4VIDEOEDITING_Bitrate)M4VIDEOEDITING_k128_KBPS; 1120cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the end cut time in milliseconds. 1121cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEncodingParams->BeginCutTime = 0; 1122cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the end cut time in milliseconds. 1123cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEncodingParams->EndCutTime = 0; 1124cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the output file size in bytes. 1125cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEncodingParams->OutputFileSize = 0; 1126cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set video time scale. 1127cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEncodingParams->OutputVideoTimescale = 0; 1128cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1129cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", 1130cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "M4MCS_setEncodingParams()"); 1131cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4MCS_setEncodingParams(mcsContext, pEncodingParams); 1132cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 1133cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 1134cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1135cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", 1136cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "M4MCS_checkParamsAndStart()"); 1137cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4MCS_checkParamsAndStart(mcsContext); 1138cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 1139cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 1140cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1141cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "M4MCS_step()"); 1142cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1143cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*+ PROGRESS CB */ 1144cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt8 curProgress = 0; 1145cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int lastProgress = 0; 1146cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1147cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("LVME_generateAudio Current progress is =%d", curProgress); 1148cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->CallVoidMethod(pContext->engine, 1149cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->onProgressUpdateMethodId, 1/*task status*/, 1150cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi curProgress/*progress*/); 1151cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi do { 1152cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4MCS_step(mcsContext, &curProgress); 1153cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1154cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (result != M4NO_ERROR) { 1155cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("LVME_generateAudio M4MCS_step returned 0x%x",result); 1156cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1157cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (result == M4MCS_WAR_TRANSCODING_DONE) { 1158cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("LVME_generateAudio MCS process ended"); 1159cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1160cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Send a progress notification. 1161cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi curProgress = 100; 1162cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->CallVoidMethod(pContext->engine, 1163cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->onProgressUpdateMethodId, 1/*task status*/, 1164cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi curProgress); 1165cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("LVME_generateAudio Current progress is =%d", curProgress); 1166cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1167cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } else { 1168cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Send a progress notification if needed 1169cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (curProgress != lastProgress) { 1170cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi lastProgress = curProgress; 1171cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->CallVoidMethod(pContext->engine, 1172cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->onProgressUpdateMethodId, 0/*task status*/, 1173cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi curProgress/*progress*/); 1174cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("LVME_generateAudio Current progress is =%d",curProgress); 1175cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1176cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1177cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } while (result == M4NO_ERROR); 1178cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*- PROGRESS CB */ 1179cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1180cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 1181cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4MCS_WAR_TRANSCODING_DONE != result), result); 1182cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1183cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "M4MCS_abort()"); 1184cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4MCS_abort(mcsContext); 1185cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 1186cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 1187cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1188cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //pContext->mAudioSettings->pFile = pOutputParams->pOutputPCMfile; 1189cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileExtraDelete((const M4OSA_Char *) pTemp3gpFilePath); 1190cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_generateAudio() EXIT "); 1191cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1192cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)pTemp3gpFilePath); 1193cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)pOutputParams); 1194cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)pEncodingParams); 1195cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return result; 1196cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 1197cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1198cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int removeAlphafromRGB8888 ( 1199cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* pFramingFilePath, 1200cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4xVSS_FramingStruct *pFramingCtx) 1201cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 1202cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 frameSize_argb = (pFramingCtx->width * pFramingCtx->height * 4); // aRGB data 1203cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context lImageFileFp = M4OSA_NULL; 1204cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 1205cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1206cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("removeAlphafromRGB8888: width %d", pFramingCtx->width); 1207cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1208cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt8 *pTmpData = (M4OSA_UInt8*) M4OSA_malloc(frameSize_argb, M4VS, (M4OSA_Char*)"Image argb data"); 1209cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pTmpData == M4OSA_NULL) { 1210cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGE("Failed to allocate memory for Image clip"); 1211cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return M4ERR_ALLOC; 1212cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1213cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1214cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /** Read the argb data from the passed file. */ 1215cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR lerr = M4OSA_fileReadOpen(&lImageFileFp, (M4OSA_Void *) pFramingFilePath, M4OSA_kFileRead); 1216cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1217cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1218cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ((lerr != M4NO_ERROR) || (lImageFileFp == M4OSA_NULL)) 1219cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1220cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGE("removeAlphafromRGB8888: Can not open the file "); 1221cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)pTmpData); 1222cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return M4ERR_FILE_NOT_FOUND; 1223cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1224cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1225cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1226cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi lerr = M4OSA_fileReadData(lImageFileFp, (M4OSA_MemAddr8)pTmpData, &frameSize_argb); 1227cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (lerr != M4NO_ERROR) 1228cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1229cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGE("removeAlphafromRGB8888: can not read the data "); 1230cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileReadClose(lImageFileFp); 1231cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)pTmpData); 1232cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return lerr; 1233cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1234cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileReadClose(lImageFileFp); 1235cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1236cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 frameSize = (pFramingCtx->width * pFramingCtx->height * 3); //Size of RGB 888 data. 1237cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1238cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pFramingCtx->FramingRgb = (M4VIFI_ImagePlane*)M4OSA_malloc( 1239cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi sizeof(M4VIFI_ImagePlane), M4VS, (M4OSA_Char*)"Image clip RGB888 data"); 1240cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pFramingCtx->FramingRgb->pac_data = (M4VIFI_UInt8*)M4OSA_malloc( 1241cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameSize, M4VS, (M4OSA_Char*)"Image clip RGB888 data"); 1242cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1243cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pFramingCtx->FramingRgb == M4OSA_NULL) 1244cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1245cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGE("Failed to allocate memory for Image clip"); 1246cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)pTmpData); 1247cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return M4ERR_ALLOC; 1248cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1249cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1250cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /** Remove the alpha channel */ 1251581cad2221cb367e9e3ef6991c565cd37ced994fJames Dong for (size_t i = 0, j = 0; i < frameSize_argb; i++) { 1252cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ((i % 4) == 0) continue; 1253cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pFramingCtx->FramingRgb->pac_data[j] = pTmpData[i]; 1254cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi j++; 1255cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1256cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)pTmpData); 1257cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return M4NO_ERROR; 1258cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 1259cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1260cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void 1261cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_populateSettings( 1262cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 1263cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 1264cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject settings, 1265cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject object, 1266cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject audioSettingObject) 1267cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 1268cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", 1269cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_populateSettings()"); 1270cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1271cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool needToBeLoaded = true; 1272cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = M4OSA_NULL; 1273cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 1274cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring str = M4OSA_NULL; 1275cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobjectArray propertiesClipsArray = M4OSA_NULL; 1276cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject properties = M4OSA_NULL; 1277cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint* bitmapArray = M4OSA_NULL; 1278cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobjectArray effectSettingsArray = M4OSA_NULL; 1279cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject effectSettings = M4OSA_NULL; 1280cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jintArray pixelArray = M4OSA_NULL; 1281cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int width = 0; 1282cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int height = 0; 1283cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int nbOverlays = 0; 1284cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int i,j = 0; 1285cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int *pOverlayIndex = M4OSA_NULL; 1286cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1287cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Add a code marker (the condition must always be true). 1288cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ADD_CODE_MARKER_FUN(NULL != pEnv) 1289cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1290cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Validate the settings parameter. 1291cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalArgumentException(&needToBeLoaded, pEnv, 1292cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (NULL == settings), 1293cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "settings is null"); 1294cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the context. 1295cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = 1296cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded, pEnv, thiz); 1297cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1298cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was set. 1299cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1300cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext), 1301cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1302cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was set. 1303cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1304cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext->mPreviewController), 1305cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1306cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jclass mPreviewClipPropClazz = pEnv->FindClass(PREVIEW_PROPERTIES_CLASS_NAME); 1307cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1308cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == mPreviewClipPropClazz), 1309cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1310cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1311cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jfieldID fid = pEnv->GetFieldID(mPreviewClipPropClazz,"clipProperties", 1312cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "[L"PROPERTIES_CLASS_NAME";" ); 1313cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1314cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == fid), 1315cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1316cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1317cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi propertiesClipsArray = (jobjectArray)pEnv->GetObjectField(object, fid); 1318cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1319cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == propertiesClipsArray), 1320cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1321cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1322cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jclass engineClass = pEnv->FindClass(MANUAL_EDIT_ENGINE_CLASS_NAME); 1323cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1324cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == engineClass), 1325cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1326cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1327cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->onPreviewProgressUpdateMethodId = pEnv->GetMethodID(engineClass, 1328cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "onPreviewProgressUpdate", "(IZ)V"); 1329cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the context is valid (required because the context is dereferenced). 1330cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (needToBeLoaded) { 1331cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that we are in a correct state. 1332cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1333cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (pContext->state != ManualEditState_INITIALIZED), 1334cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "settings already loaded"); 1335cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Retrieve the edit settings. 1336cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext->pEditSettings != M4OSA_NULL) { 1337cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditClasses_freeEditSettings(&pContext->pEditSettings); 1338cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings = M4OSA_NULL; 1339cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1340cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditClasses_getEditSettings(&needToBeLoaded, pEnv, 1341cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi settings, &pContext->pEditSettings,false); 1342cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1343cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_0("videoEditorC_getEditSettings done"); 1344cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1345cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ( pContext->pEditSettings != NULL ) 1346cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1347cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the edit settings could be retrieved. 1348cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jclass mEditClazz = pEnv->FindClass(EDIT_SETTINGS_CLASS_NAME); 1349cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if(mEditClazz == M4OSA_NULL) 1350cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1351cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_0("cannot find object field for mEditClazz"); 1352cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return; 1353cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1354cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jclass mEffectsClazz = pEnv->FindClass(EFFECT_SETTINGS_CLASS_NAME); 1355cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if(mEffectsClazz == M4OSA_NULL) 1356cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1357cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_0("cannot find object field for mEffectsClazz"); 1358cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return; 1359cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1360cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(mEditClazz,"effectSettingsArray", "[L"EFFECT_SETTINGS_CLASS_NAME";" ); 1361cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if(fid == M4OSA_NULL) 1362cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1363cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_0("cannot find field for effectSettingsArray Array"); 1364cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return; 1365cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1366cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi effectSettingsArray = (jobjectArray)pEnv->GetObjectField(settings, fid); 1367cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if(effectSettingsArray == M4OSA_NULL) 1368cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1369cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_0("cannot find object field for effectSettingsArray"); 1370cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return; 1371cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1372cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi i = 0; 1373cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi j = 0; 1374cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //int overlayIndex[pContext->pEditSettings->nbEffects]; 1375cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ( pContext->pEditSettings->nbEffects ) 1376cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1377cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOverlayIndex 1378cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = (int*) M4OSA_malloc(pContext->pEditSettings->nbEffects, 0, 1379cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char*)"pOverlayIndex"); 1380cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1381cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1382cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("no of effects = %d",pContext->pEditSettings->nbEffects); 1383cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi while (j < pContext->pEditSettings->nbEffects) 1384cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1385cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext->pEditSettings->Effects[j].xVSS.pFramingFilePath != M4OSA_NULL) 1386cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1387cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOverlayIndex[nbOverlays] = j; 1388cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi nbOverlays++; 1389cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4xVSS_FramingStruct *aFramingCtx = M4OSA_NULL; 1390cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx 1391cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = (M4xVSS_FramingStruct*)M4OSA_malloc(sizeof(M4xVSS_FramingStruct), M4VS, 1392cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char*)"M4xVSS_internalDecodeGIF: Context of the framing effect"); 1393cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (aFramingCtx == M4OSA_NULL) 1394cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1395cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_0("Allocation error in videoEditor_populateSettings"); 1396cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1397cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->pCurrent = M4OSA_NULL; /* Only used by the first element of the chain */ 1398cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->previousClipTime = -1; 1399cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->FramingYuv = M4OSA_NULL; 1400cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->FramingRgb = M4OSA_NULL; 1401cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->topleft_x 1402cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = pContext->pEditSettings->Effects[j].xVSS.topleft_x; 1403cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->topleft_y 1404cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = pContext->pEditSettings->Effects[j].xVSS.topleft_y; 1405cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1406cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1407cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "OF u_width %d", 1408cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_width); 1409cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "OF u_height() %d", 1410cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_height); 1411cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "OF rgbType() %d", 1412cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->Effects[j].xVSS.rgbType); 1413cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1414cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->width = pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_width; 1415cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->height = pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_height; 1416cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1417cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1418cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4xVSS_internalConvertARGB888toYUV420_FrammingEffect(pContext->engineContext, 1419cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi &(pContext->pEditSettings->Effects[j]),aFramingCtx, 1420cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->Effects[j].xVSS.framingScaledSize); 1421cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (result != M4NO_ERROR) 1422cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1423cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_internalConvertARGB888toYUV420_FrammingEffect returned 0x%x", result); 1424cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1425cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1426cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //framing buffers are resized to fit the output video resolution. 1427cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_width = 1428cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->FramingRgb->u_width; 1429cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_height = 1430cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->FramingRgb->u_height; 1431cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1432cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1433cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "A framing Context aFramingCtx->width = %d", 1434cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->FramingRgb->u_width); 1435cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1436cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "A framing Context aFramingCtx->height = %d", 1437cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->FramingRgb->u_height); 1438cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1439cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1440cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi width = pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_width; 1441cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi height = pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_height; 1442cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1443cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_stride = width*3; 1444cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1445cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //for RGB888 1446cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_topleft = 0; 1447cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1448cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->pac_data = 1449cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4VIFI_UInt8 *)M4OSA_malloc(width*height*3, 1450cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 0x00,(M4OSA_Char *)"pac_data buffer"); 1451cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1452cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_memcpy((M4OSA_Int8 *)&pContext->pEditSettings->\ 1453cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi Effects[j].xVSS.pFramingBuffer->\ 1454cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pac_data[0],(M4OSA_Int8 *)&aFramingCtx->FramingRgb->pac_data[0],(width*height*3)); 1455cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1456cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //As of now rgb type is always rgb888, can be changed in future for rgb 565 1457cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->Effects[j].xVSS.rgbType = 1458cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4VSS3GPP_RGBType)M4VSS3GPP_kRGB888; //M4VSS3GPP_kRGB565; 1459cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1460cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (aFramingCtx->FramingYuv != M4OSA_NULL ) 1461cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1462cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (aFramingCtx->FramingYuv->pac_data != M4OSA_NULL) { 1463cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)aFramingCtx->FramingYuv->pac_data); 1464cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->FramingYuv->pac_data = M4OSA_NULL; 1465cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1466cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1467cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (aFramingCtx->FramingYuv != M4OSA_NULL) { 1468cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)aFramingCtx->FramingYuv); 1469cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->FramingYuv = M4OSA_NULL; 1470cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1471cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (aFramingCtx->FramingRgb->pac_data != M4OSA_NULL) { 1472cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)aFramingCtx->FramingRgb->pac_data); 1473cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->FramingRgb->pac_data = M4OSA_NULL; 1474cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1475cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (aFramingCtx->FramingRgb != M4OSA_NULL) { 1476cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)aFramingCtx->FramingRgb); 1477cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->FramingRgb = M4OSA_NULL; 1478cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1479cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (aFramingCtx != M4OSA_NULL) { 1480cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)aFramingCtx); 1481cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx = M4OSA_NULL; 1482cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1483cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1484cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi j++; 1485cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1486cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1487cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the edit settings could be retrieved. 1488cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("total clips are = %d",pContext->pEditSettings->uiClipNumber); 1489cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi for (i = 0; i < pContext->pEditSettings->uiClipNumber; i++) { 1490cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("clip no = %d",i); 1491cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi properties = pEnv->GetObjectArrayElement(propertiesClipsArray, i); 1492cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1493cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == properties), 1494cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1495cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi getClipSetting(pEnv,properties, pContext->pEditSettings->pClipList[i]); 1496cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1497cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1498cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (needToBeLoaded) { 1499cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Log the edit settings. 1500cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_EDIT_SETTINGS(pContext->pEditSettings); 1501cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1502cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1503cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1504cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (audioSettingObject != M4OSA_NULL) { 1505cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jclass audioSettingClazz = pEnv->FindClass(AUDIO_SETTINGS_CLASS_NAME); 1506cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1507cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == audioSettingClazz), 1508cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1509cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1510cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1511cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext->mAudioSettings), 1512cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1513cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1514cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"bRemoveOriginal","Z"); 1515cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->bRemoveOriginal = pEnv->GetIntField(audioSettingObject,fid); 1516cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("bRemoveOriginal = %d",pContext->mAudioSettings->bRemoveOriginal); 1517cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1518cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"channels","I"); 1519cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiNbChannels = pEnv->GetIntField(audioSettingObject,fid); 1520cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("uiNbChannels = %d",pContext->mAudioSettings->uiNbChannels); 1521cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1522cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"Fs","I"); 1523cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiSamplingFrequency = pEnv->GetIntField(audioSettingObject,fid); 1524cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("uiSamplingFrequency = %d",pContext->mAudioSettings->uiSamplingFrequency); 1525cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1526cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"ExtendedFs","I"); 1527cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiExtendedSamplingFrequency = 1528cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->GetIntField(audioSettingObject,fid); 1529cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("uiExtendedSamplingFrequency = %d", 1530cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiExtendedSamplingFrequency); 1531cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1532cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"startMs","J"); 1533cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiAddCts 1534cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = pEnv->GetIntField(audioSettingObject,fid); 1535cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("uiAddCts = %d",pContext->mAudioSettings->uiAddCts); 1536cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1537cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"volume","I"); 1538cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiAddVolume 1539cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = pEnv->GetIntField(audioSettingObject,fid); 1540cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("uiAddVolume = %d",pContext->mAudioSettings->uiAddVolume); 1541cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1542cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"loop","Z"); 1543cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->bLoop 1544cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = pEnv->GetIntField(audioSettingObject,fid); 1545cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("bLoop = %d",pContext->mAudioSettings->bLoop); 1546cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1547cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"beginCutTime","J"); 1548cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->beginCutMs 1549cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = pEnv->GetIntField(audioSettingObject,fid); 1550cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("begin cut time = %d",pContext->mAudioSettings->beginCutMs); 1551cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1552cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"endCutTime","J"); 1553cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->endCutMs 1554cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = pEnv->GetIntField(audioSettingObject,fid); 1555cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("end cut time = %d",pContext->mAudioSettings->endCutMs); 1556cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1557cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"fileType","I"); 1558cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->fileType 1559cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = pEnv->GetIntField(audioSettingObject,fid); 1560cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("fileType = %d",pContext->mAudioSettings->fileType); 1561cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"pFile","Ljava/lang/String;"); 1562cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi str = (jstring)pEnv->GetObjectField(audioSettingObject,fid); 1563cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->pFile 1564cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = (M4OSA_Char*)pEnv->GetStringUTFChars(str, M4OSA_NULL); 1565cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("file name = %s",pContext->mAudioSettings->pFile); 1566cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEOEDITOR", "regenerateAudio() file name = %s",\ 1567cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->pFile); 1568cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"pcmFilePath","Ljava/lang/String;"); 1569cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi str = (jstring)pEnv->GetObjectField(audioSettingObject,fid); 1570cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->pPCMFilePath = 1571cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char*)pEnv->GetStringUTFChars(str, M4OSA_NULL); 1572cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEOEDITOR", "pPCMFilePath -- %s ",\ 1573cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->pPCMFilePath); 1574cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(engineClass,"mRegenerateAudio","Z"); 1575cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool regenerateAudio = pEnv->GetBooleanField(thiz,fid); 1576cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEOEDITOR", "regenerateAudio -- %d ",\ 1577cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi regenerateAudio); 1578cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (regenerateAudio) { 1579cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_0("Calling Generate Audio now"); 1580cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = videoEditor_generateAudio(pEnv, 1581cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext, 1582cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char*)pContext->mAudioSettings->pFile, 1583cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char*)pContext->mAudioSettings->pPCMFilePath); 1584cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi regenerateAudio = false; 1585cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->SetBooleanField(thiz,fid,regenerateAudio); 1586cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1587cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEOEDITOR", "regenerateAudio()"); 1588cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1589cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* Audio mix and duck */ 1590cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"ducking_threshold","I"); 1591cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiInDucking_threshold 1592cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = pEnv->GetIntField(audioSettingObject,fid); 1593cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("ducking threshold = %d", 1594cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiInDucking_threshold); 1595cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1596cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"ducking_lowVolume","I"); 1597cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiInDucking_lowVolume 1598cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = pEnv->GetIntField(audioSettingObject,fid); 1599cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("ducking lowVolume = %d", 1600cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiInDucking_lowVolume); 1601cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1602cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"bInDucking_enable","Z"); 1603cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->bInDucking_enable 1604cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = pEnv->GetBooleanField(audioSettingObject,fid); 1605cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("ducking lowVolume = %d", 1606cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->bInDucking_enable); 1607cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } else { 1608cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext->mAudioSettings != M4OSA_NULL) { 1609cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->pFile = M4OSA_NULL; 1610cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->bRemoveOriginal = 0; 1611cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiNbChannels = 0; 1612cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiSamplingFrequency = 0; 1613cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiExtendedSamplingFrequency = 0; 1614cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiAddCts = 0; 1615cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiAddVolume = 0; 1616cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->beginCutMs = 0; 1617cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->endCutMs = 0; 1618cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->fileType = 0; 1619cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->bLoop = 0; 1620cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiInDucking_lowVolume = 0; 1621cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->bInDucking_enable = 0; 1622cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiBTChannelCount = 0; 1623cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiInDucking_threshold = 0; 1624cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1625cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(engineClass,"mRegenerateAudio","Z"); 1626cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool regenerateAudio = pEnv->GetBooleanField(thiz,fid); 1627cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if(!regenerateAudio) { 1628cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi regenerateAudio = true; 1629cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->SetBooleanField(thiz,fid,regenerateAudio); 1630cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1631cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1632cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1633cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext->pEditSettings != NULL ) 1634cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1635cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = pContext->mPreviewController->loadEditSettings(pContext->pEditSettings, 1636cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings); 1637cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 1638cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 1639cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1640cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mPreviewController->setJniCallback((void*)pContext, 1641cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (jni_progress_callback_fct)jniPreviewProgressCallback); 1642cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1643cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi j = 0; 1644cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi while (j < nbOverlays) 1645cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1646cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext->pEditSettings->Effects[pOverlayIndex[j]].xVSS.pFramingBuffer->pac_data != \ 1647cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_NULL) { 1648cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)pContext->pEditSettings->\ 1649cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi Effects[pOverlayIndex[j]].xVSS.pFramingBuffer->pac_data); 1650cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->\ 1651cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi Effects[pOverlayIndex[j]].xVSS.pFramingBuffer->pac_data = M4OSA_NULL; 1652cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1653cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext->pEditSettings->Effects[pOverlayIndex[j]].xVSS.pFramingBuffer != M4OSA_NULL) { 1654cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)pContext->pEditSettings->\ 1655cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi Effects[pOverlayIndex[j]].xVSS.pFramingBuffer); 1656cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->Effects[pOverlayIndex[j]].xVSS.pFramingBuffer = M4OSA_NULL; 1657cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1658cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi j++; 1659cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1660cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1661cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pOverlayIndex != M4OSA_NULL) 1662cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1663cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)pOverlayIndex); 1664cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOverlayIndex = M4OSA_NULL; 1665cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1666cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return; 1667cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 1668cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1669cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void 1670cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_startPreview( 1671cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 1672cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 1673cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject mSurface, 1674cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jlong fromMs, 1675cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jlong toMs, 1676cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint callbackInterval, 1677cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jboolean loop) 1678cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 1679cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool needToBeLoaded = true; 1680cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 1681cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_startPreview()"); 1682cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1683cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = M4OSA_NULL; 1684cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the context. 1685cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded, pEnv, thiz); 1686cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1687cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was set. 1688cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1689cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext), 1690cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1691cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1692cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1693cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext->mAudioSettings), 1694cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1695cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was set. 1696cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1697cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext->mPreviewController), 1698cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1699cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1700cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Validate the mSurface parameter. 1701cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalArgumentException(&needToBeLoaded, pEnv, 1702cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (NULL == mSurface), 1703cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "mSurface is null"); 1704cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1705cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jclass surfaceClass = pEnv->FindClass("android/view/Surface"); 1706cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1707cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == surfaceClass), 1708cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1709cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //jfieldID surface_native = pEnv->GetFieldID(surfaceClass, "mSurface", "I"); 1710cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jfieldID surface_native 1711cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = pEnv->GetFieldID(surfaceClass, ANDROID_VIEW_SURFACE_JNI_ID, "I"); 1712cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1713cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1714cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == surface_native), 1715cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1716cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1717cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi Surface* const p = (Surface*)pEnv->GetIntField(mSurface, surface_native); 1718cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1719cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi sp<Surface> previewSurface = sp<Surface>(p); 1720cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1721cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = pContext->mPreviewController->setSurface(previewSurface); 1722cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 1723cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 1724cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "fromMs=%ld, toMs=%ld", 1725cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_UInt32)fromMs, (M4OSA_Int32)toMs); 1726cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1727cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = pContext->mPreviewController->startPreview((M4OSA_UInt32)fromMs, 1728cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Int32)toMs, 1729cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_UInt16)callbackInterval, 1730cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Bool)loop); 1731cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, (M4NO_ERROR != result), result); 1732cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 1733cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1734cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1735cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic jobject 1736cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_getProperties( 1737cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 1738cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 1739cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring file) 1740cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 1741cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject object = M4OSA_NULL; 1742cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi object = videoEditProp_getProperties(pEnv,thiz,file); 1743cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1744cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return object; 1745cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1746cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 1747cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int videoEditor_getPixels( 1748cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* env, 1749cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 1750cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring path, 1751cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jintArray pixelArray, 1752cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 width, 1753cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 height, 1754cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 timeMS) 1755cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 1756cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1757cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 1758cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context mContext = M4OSA_NULL; 1759cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint* m_dst32 = M4OSA_NULL; 1760cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1761cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1762cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Add a text marker (the condition must always be true). 1763cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ADD_TEXT_MARKER_FUN(NULL != env) 1764cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1765cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi const char *pString = env->GetStringUTFChars(path, NULL); 1766cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pString == M4OSA_NULL) { 1767cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (env != NULL) { 1768cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(env, "java/lang/RuntimeException", "Input string null"); 1769cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1770cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return M4ERR_ALLOC; 1771cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1772cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1773cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = ThumbnailOpen(&mContext,(const M4OSA_Char*)pString, M4OSA_FALSE); 1774cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (err != M4NO_ERROR || mContext == M4OSA_NULL) { 1775cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pString != NULL) { 1776cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi env->ReleaseStringUTFChars(path, pString); 1777cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1778cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (env != NULL) { 1779cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(env, "java/lang/RuntimeException", "ThumbnailOpen failed"); 1780cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1781cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1782cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1783cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi m_dst32 = env->GetIntArrayElements(pixelArray, NULL); 1784cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1785cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = ThumbnailGetPixels32(mContext, (M4OSA_Int32 *)m_dst32, width,height,&timeMS); 1786cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (err != M4NO_ERROR ) { 1787cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (env != NULL) { 1788cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(env, "java/lang/RuntimeException",\ 1789cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "ThumbnailGetPixels32 failed"); 1790cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1791cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1792cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi env->ReleaseIntArrayElements(pixelArray, m_dst32, 0); 1793cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1794cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ThumbnailClose(mContext); 1795cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pString != NULL) { 1796cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi env->ReleaseStringUTFChars(path, pString); 1797cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1798cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1799cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return timeMS; 1800cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 1801cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1802cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int videoEditor_getPixelsList( 1803cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* env, 1804cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 1805cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring path, 1806cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jintArray pixelArray, 1807cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 width, 1808cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 height, 1809cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 deltatimeMS, 1810cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 noOfThumbnails, 1811cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 startTime, 1812cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 endTime) 1813cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 1814cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1815cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR err; 1816cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context mContext = M4OSA_NULL; 1817cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint* m_dst32; 1818cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 timeMS = startTime; 1819cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int arrayOffset = 0; 1820cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1821cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1822cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1823cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Add a text marker (the condition must always be true). 1824cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ADD_TEXT_MARKER_FUN(NULL != env) 1825cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1826cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi const char *pString = env->GetStringUTFChars(path, NULL); 1827cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pString == M4OSA_NULL) { 1828cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (env != NULL) { 1829cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(env, "java/lang/RuntimeException", "Input string null"); 1830cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1831cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return M4ERR_ALLOC; 1832cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1833cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1834cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = ThumbnailOpen(&mContext,(const M4OSA_Char*)pString, M4OSA_FALSE); 1835cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (err != M4NO_ERROR || mContext == M4OSA_NULL) { 1836cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (env != NULL) { 1837cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(env, "java/lang/RuntimeException", "ThumbnailOpen failed"); 1838cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1839cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pString != NULL) { 1840cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi env->ReleaseStringUTFChars(path, pString); 1841cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1842cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return err; 1843cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1844cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1845cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi m_dst32 = env->GetIntArrayElements(pixelArray, NULL); 1846cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1847cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi do { 1848cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = ThumbnailGetPixels32(mContext, ((M4OSA_Int32 *)m_dst32 + arrayOffset), 1849cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi width,height,&timeMS); 1850cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (err != M4NO_ERROR ) { 1851cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (env != NULL) { 1852cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(env, "java/lang/RuntimeException",\ 1853cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "ThumbnailGetPixels32 failed"); 1854cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1855cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return err; 1856cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1857cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi timeMS += deltatimeMS; 1858cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi arrayOffset += (width * height * 4); 1859cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi noOfThumbnails--; 1860cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } while(noOfThumbnails > 0); 1861cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1862cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi env->ReleaseIntArrayElements(pixelArray, m_dst32, 0); 1863cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1864cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ThumbnailClose(mContext); 1865cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pString != NULL) { 1866cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi env->ReleaseStringUTFChars(path, pString); 1867cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1868cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1869cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return err; 1870cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1871cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 1872cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1873cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic M4OSA_ERR 1874cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_toUTF8Fct( 1875cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Void* pBufferIn, 1876cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt8* pBufferOut, 1877cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32* bufferOutSize) 1878cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 1879cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 1880cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 length = 0; 1881cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1882cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_toUTF8Fct()"); 1883cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1884cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Determine the length of the input buffer. 1885cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL != pBufferIn) 1886cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1887cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi length = M4OSA_chrLength((M4OSA_Char *)pBufferIn); 1888cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1889cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1890cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the output buffer is large enough to hold the input buffer. 1891cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ((*bufferOutSize) > length) 1892cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1893cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the input buffer is not M4OSA_NULL. 1894cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL != pBufferIn) 1895cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1896cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Copy the temp path, ignore the result. 1897cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_chrNCopy((M4OSA_Char *)pBufferOut, (M4OSA_Char *)pBufferIn, length); 1898cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1899cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else 1900cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1901cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the output buffer to an empty string. 1902cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (*(M4OSA_Char *)pBufferOut) = 0; 1903cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1904cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1905cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else 1906cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1907cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // The buffer is too small. 1908cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4xVSSWAR_BUFFER_OUT_TOO_SMALL; 1909cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1910cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1911cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Return the buffer output size. 1912cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (*bufferOutSize) = length + 1; 1913cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1914cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Return the result. 1915cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return(result); 1916cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 1917cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1918cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic M4OSA_ERR 1919cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_fromUTF8Fct( 1920cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt8* pBufferIn, 1921cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Void* pBufferOut, 1922cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32* bufferOutSize) 1923cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 1924cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 1925cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 length = 0; 1926cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1927cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_fromUTF8Fct()"); 1928cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1929cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Determine the length of the input buffer. 1930cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL != pBufferIn) 1931cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1932cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi length = M4OSA_chrLength((M4OSA_Char *)pBufferIn); 1933cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1934cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1935cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the output buffer is large enough to hold the input buffer. 1936cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ((*bufferOutSize) > length) 1937cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1938cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the input buffer is not M4OSA_NULL. 1939cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL != pBufferIn) 1940cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1941cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Copy the temp path, ignore the result. 1942cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_chrNCopy((M4OSA_Char *)pBufferOut, (M4OSA_Char *)pBufferIn, length); 1943cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1944cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else 1945cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1946cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the output buffer to an empty string. 1947cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (*(M4OSA_Char *)pBufferOut) = 0; 1948cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1949cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1950cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else 1951cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1952cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // The buffer is too small. 1953cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4xVSSWAR_BUFFER_OUT_TOO_SMALL; 1954cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1955cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1956cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Return the buffer output size. 1957cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (*bufferOutSize) = length + 1; 1958cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1959cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Return the result. 1960cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return(result); 1961cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 1962cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1963cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic M4OSA_ERR 1964cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_getTextRgbBufferFct( 1965cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Void* pRenderingData, 1966cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Void* pTextBuffer, 1967cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 textBufferSize, 1968cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4VIFI_ImagePlane** pOutputPlane) 1969cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 1970cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 1971cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1972cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_getTextRgbBufferFct()"); 1973cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1974cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Return the result. 1975cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return(result); 1976cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 1977cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1978cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void 1979cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_callOnProgressUpdate( 1980cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext, 1981cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int task, 1982cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int progress) 1983cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 1984cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv = NULL; 1985cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1986cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1987cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Attach the current thread. 1988cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pVM->AttachCurrentThread(&pEnv, NULL); 1989cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1990cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1991cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Call the on completion callback. 1992cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->CallVoidMethod(pContext->engine, pContext->onProgressUpdateMethodId, 1993cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_getEngineCToJava(task), progress); 1994cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1995cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1996cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Detach the current thread. 1997cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pVM->DetachCurrentThread(); 1998cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 1999cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2000cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void 2001cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_freeContext( 2002cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 2003cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext** ppContext) 2004cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 2005cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = M4OSA_NULL; 2006cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2007cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_freeContext"); 2008cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2009cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the context pointer. 2010cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = (*ppContext); 2011cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2012cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the context was set. 2013cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL != pContext) 2014cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2015cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if a global reference to the engine object was set. 2016cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (NULL != pContext->engine) 2017cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2018cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Free the global reference. 2019cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->DeleteGlobalRef(pContext->engine); 2020cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->engine = NULL; 2021cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2022cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2023cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the temp path was set. 2024cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL != pContext->initParams.pTempPath) 2025cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2026cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Free the memory allocated for the temp path. 2027cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditOsal_free(pContext->initParams.pTempPath); 2028cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->initParams.pTempPath = M4OSA_NULL; 2029cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2030cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2031cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the file writer was set. 2032cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL != pContext->initParams.pFileWritePtr) 2033cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2034cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Free the memory allocated for the file writer. 2035cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditOsal_free(pContext->initParams.pFileWritePtr); 2036cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->initParams.pFileWritePtr = M4OSA_NULL; 2037cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2038cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2039cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the file reader was set. 2040cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL != pContext->initParams.pFileReadPtr) 2041cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2042cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Free the memory allocated for the file reader. 2043cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditOsal_free(pContext->initParams.pFileReadPtr); 2044cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->initParams.pFileReadPtr = M4OSA_NULL; 2045cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2046cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2047cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Free the memory allocated for the context. 2048cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditOsal_free(pContext); 2049cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = M4OSA_NULL; 2050cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2051cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Reset the context pointer. 2052cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (*ppContext) = M4OSA_NULL; 2053cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2054cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 2055cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2056cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic jobject 2057cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_getVersion( 2058cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 2059cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz) 2060cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 2061cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool isSuccessful = true; 2062cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject version = NULL; 2063cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4_VersionInfo versionInfo = {0, 0, 0, 0}; 2064cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 2065cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2066cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_getVersion()"); 2067cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2068cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi versionInfo.m_structSize = sizeof(versionInfo); 2069cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi versionInfo.m_major = VIDEOEDITOR_VERSION_MAJOR; 2070cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi versionInfo.m_minor = VIDEOEDITOR_VERSION_MINOR; 2071cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi versionInfo.m_revision = VIDEOEDITOR_VERSION_REVISION; 2072cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2073cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_getVersion() major %d,\ 2074cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi minor %d, revision %d", versionInfo.m_major, versionInfo.m_minor, versionInfo.m_revision); 2075cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2076cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Create a version object. 2077cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditClasses_createVersion(&isSuccessful, pEnv, &versionInfo, &version); 2078cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2079cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Return the version object. 2080cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return(version); 2081cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 2082cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2083cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void 2084cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_init( 2085cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 2086cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 2087cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring tempPath, 2088cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring libraryPath) 2089cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 2090cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool initialized = true; 2091cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = M4OSA_NULL; 2092cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VideoEditJava_EngineMethodIds methodIds = {NULL}; 2093cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* pLibraryPath = M4OSA_NULL; 2094cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* pTextRendererPath = M4OSA_NULL; 2095cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 textRendererPathLength = 0; 2096cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 2097cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2098cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_init()"); 2099cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2100cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Add a text marker (the condition must always be true). 2101cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ADD_TEXT_MARKER_FUN(NULL != pEnv) 2102cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2103cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the context. 2104cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = (ManualEditContext*)videoEditClasses_getContext(&initialized, pEnv, thiz); 2105cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2106cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the engine method ids. 2107cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_getEngineMethodIds(&initialized, pEnv, &methodIds); 2108cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2109cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Validate the tempPath parameter. 2110cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalArgumentException(&initialized, pEnv, 2111cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (NULL == tempPath), 2112cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "tempPath is null"); 2113cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2114cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was not set already. 2115cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&initialized, pEnv, 2116cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL != pContext), 2117cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "already initialized"); 2118cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2119cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the initialization succeeded (required because of dereferencing of psContext, 2120cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // and freeing when initialization fails). 2121cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (initialized) 2122cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2123cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Allocate a new context. 2124cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = new ManualEditContext; 2125cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2126cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the initialization succeeded (required because of dereferencing of psContext). 2127cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //if (initialized) 2128cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext != NULL) 2129cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2130cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the state to not initialized. 2131cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->state = ManualEditState_NOT_INITIALIZED; 2132cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2133cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Allocate a file read pointer structure. 2134cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->initParams.pFileReadPtr = 2135cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_FileReadPointer*)videoEditOsal_alloc(&initialized, pEnv, 2136cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi sizeof(M4OSA_FileReadPointer), "FileReadPointer"); 2137cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2138cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Allocate a file write pointer structure. 2139cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->initParams.pFileWritePtr = 2140cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_FileWriterPointer*)videoEditOsal_alloc(&initialized, pEnv, 2141cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi sizeof(M4OSA_FileWriterPointer), "FileWriterPointer"); 2142cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2143cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the temp path. 2144cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* tmpString = 2145cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char *)videoEditJava_getString(&initialized, pEnv, tempPath, 2146cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi NULL, M4OSA_NULL); 2147cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->initParams.pTempPath = (M4OSA_Char *) 2148cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_malloc(M4OSA_chrLength(tmpString) + 1, 0x0, 2149cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char *)"tempPath"); 2150cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //initialize the first char. so that strcat works. 2151cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char *ptmpChar = (M4OSA_Char*)pContext->initParams.pTempPath; 2152cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ptmpChar[0] = 0x00; 2153cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_chrNCat((M4OSA_Char*)pContext->initParams.pTempPath, tmpString, M4OSA_chrLength(tmpString)); 2154cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_chrNCat((M4OSA_Char*)pContext->initParams.pTempPath, (M4OSA_Char*)"/", 1); 2155cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)tmpString); 2156cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2157cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2158cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the initialization succeeded 2159cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // (required because of dereferencing of pContext, pFileReadPtr and pFileWritePtr). 2160cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (initialized) 2161cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2162cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2163cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Initialize the OSAL file system function pointers. 2164cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditOsal_getFilePointers(pContext->initParams.pFileReadPtr , 2165cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->initParams.pFileWritePtr); 2166cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2167cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the UTF8 conversion functions. 2168cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->initParams.pConvToUTF8Fct = videoEditor_toUTF8Fct; 2169cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->initParams.pConvFromUTF8Fct = videoEditor_fromUTF8Fct; 2170cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2171cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the callback method ids. 2172cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->onProgressUpdateMethodId = methodIds.onProgressUpdate; 2173cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2174cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the virtual machine. 2175cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->GetJavaVM(&(pContext->pVM)); 2176cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2177cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Create a global reference to the engine object. 2178cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->engine = pEnv->NewGlobalRef(thiz); 2179cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2180cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the global reference could be created. 2181cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&initialized, pEnv, 2182cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (NULL == pContext->engine), M4NO_ERROR); 2183cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2184cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2185cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the initialization succeeded (required because of dereferencing of pContext). 2186cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (initialized) 2187cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2188cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Log the API call. 2189cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "M4xVSS_Init()"); 2190cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2191cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Initialize the visual studio library. 2192cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4xVSS_Init(&pContext->engineContext, &pContext->initParams); 2193cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2194cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Log the result. 2195cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_RESULT(ANDROID_LOG_INFO, "VIDEO_EDITOR", 2196cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditOsal_getResultString(result)); 2197cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2198cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the library could be initialized. 2199cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&initialized, pEnv, 2200cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 2201cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2202cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2203cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if(initialized) 2204cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2205cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mPreviewController = new VideoEditorPreviewController(); 2206cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&initialized, pEnv, 2207cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext->mPreviewController), 2208cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 2209cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings = 2210cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4xVSS_AudioMixingSettings *) 2211cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_malloc(sizeof(M4xVSS_AudioMixingSettings),0x0, 2212cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char *)"mAudioSettings"); 2213cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&initialized, pEnv, 2214cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext->mAudioSettings), 2215cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 2216cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->pFile = M4OSA_NULL; 2217cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->bRemoveOriginal = 0; 2218cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiNbChannels = 0; 2219cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiSamplingFrequency = 0; 2220cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiExtendedSamplingFrequency = 0; 2221cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiAddCts = 0; 2222cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiAddVolume = 0; 2223cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->beginCutMs = 0; 2224cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->endCutMs = 0; 2225cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->fileType = 0; 2226cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->bLoop = 0; 2227cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiInDucking_lowVolume = 0; 2228cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->bInDucking_enable = 0; 2229cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiBTChannelCount = 0; 2230cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiInDucking_threshold = 0; 2231cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2232cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the library could be initialized. 2233cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (initialized) 2234cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2235cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the state to initialized. 2236cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->state = ManualEditState_INITIALIZED; 2237cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2238cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2239cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the context. 2240cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditClasses_setContext(&initialized, pEnv, thiz, (void* )pContext); 2241cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pLibraryPath = M4OSA_NULL; 2242cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2243cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings = M4OSA_NULL; 2244cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Cleanup if anything went wrong during initialization. 2245cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (!initialized) 2246cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2247cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Free the context. 2248cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditor_freeContext(pEnv, &pContext); 2249cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2250cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2251cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 2252cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2253cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi/*+ PROGRESS CB */ 2254cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic 2255cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargiM4OSA_ERR videoEditor_processClip( 2256cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 2257cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 2258cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int unuseditemID) { 2259cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2260cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool loaded = true; 2261cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = NULL; 2262cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt8 progress = 0; 2263cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt8 progressBase = 0; 2264cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt8 lastProgress = 0; 2265cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 2266cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2267cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the context. 2268cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = (ManualEditContext*)videoEditClasses_getContext(&loaded, pEnv, thiz); 2269cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2270cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was set. 2271cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&loaded, pEnv, 2272cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext), 2273cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 2274cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2275cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // We start in Analyzing state 2276cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->state = ManualEditState_ANALYZING; 2277cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR completionResult = M4VSS3GPP_WAR_ANALYZING_DONE; 2278cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditState completionState = ManualEditState_OPENED; 2279cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditState errorState = ManualEditState_ANALYZING_ERROR; 2280cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2281cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // While analyzing progress goes from 0 to 50 2282cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi progressBase = 0; 2283cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2284cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the text rendering function. 2285cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL != pContext->pTextRendererFunction) 2286cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2287cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Use the text renderer function in the library. 2288cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->xVSS.pTextRenderingFct = pContext->pTextRendererFunction; 2289cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2290cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else 2291cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2292cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Use the internal text renderer function. 2293cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->xVSS.pTextRenderingFct = videoEditor_getTextRgbBufferFct; 2294cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2295cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2296cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Send the command. 2297cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_processClip ITEM %d Calling M4xVSS_SendCommand()", unuseditemID); 2298cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4xVSS_SendCommand(pContext->engineContext, pContext->pEditSettings); 2299cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_processClip ITEM %d M4xVSS_SendCommand() returned 0x%x", 2300cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi unuseditemID, (unsigned int) result); 2301cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2302cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Remove warnings indications (we only care about errors here) 2303cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ((result == M4VSS3GPP_WAR_TRANSCODING_NECESSARY) 2304cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi || (result == M4VSS3GPP_WAR_OUTPUTFILESIZE_EXCEED)) { 2305cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4NO_ERROR; 2306cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2307cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2308cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Send the first progress indication (=0) 2309cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("VERY FIRST PROGRESS videoEditor_processClip ITEM %d Progress indication %d", 2310cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi unuseditemID, progress); 2311cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->CallVoidMethod(pContext->engine, pContext->onProgressUpdateMethodId, 2312cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi unuseditemID, progress); 2313cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2314cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if a task is being performed. 2315cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // ??? ADD STOPPING MECHANISM 2316cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_processClip Entering processing loop"); 2317cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi while((result == M4NO_ERROR) 2318cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi &&(pContext->state!=ManualEditState_SAVED) 2319cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi &&(pContext->state!=ManualEditState_STOPPING)) { 2320cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2321cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Perform the next processing step. 2322cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //LOGV("LVME_processClip Entering M4xVSS_Step()"); 2323cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4xVSS_Step(pContext->engineContext, &progress); 2324cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //LOGV("LVME_processClip M4xVSS_Step() returned 0x%x", (unsigned int)result); 2325cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2326cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Log the the 1 % .. 100 % progress after processing. 2327cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi progress = progressBase + progress/2; 2328cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (progress != lastProgress) 2329cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2330cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Send a progress notification. 2331cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_processClip ITEM %d Progress indication %d", 2332cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi unuseditemID, progress); 2333cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->CallVoidMethod(pContext->engine, 2334cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->onProgressUpdateMethodId, 2335cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi unuseditemID, progress); 2336cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi lastProgress = progress; 2337cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2338cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2339cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if processing has been completed. 2340cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (result == completionResult) 2341cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2342cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the state to the completions state. 2343cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->state = completionState; 2344cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_processClip ITEM %d STATE changed to %d", 2345cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi unuseditemID, pContext->state); 2346cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2347cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Reset progress indication, as we switch to next state 2348cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi lastProgress = 0; 2349cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2350cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Reset error code, as we start a new round of processing 2351cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4NO_ERROR; 2352cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2353cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if we are analyzing input 2354cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext->state == ManualEditState_OPENED) { 2355cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // File is opened, we must start saving it 2356cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_processClip Calling M4xVSS_SaveStart()"); 2357cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4xVSS_SaveStart(pContext->engineContext, 2358cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char*)pContext->pEditSettings->pOutputFile, 2359cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_UInt32)pContext->pEditSettings->uiOutputPathSize); 2360cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_processClip ITEM %d SaveStart() returned 0x%x", 2361cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi unuseditemID, (unsigned int) result); 2362cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2363cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the state to saving. 2364cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->state = ManualEditState_SAVING; 2365cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi completionState = ManualEditState_SAVED; 2366cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi completionResult = M4VSS3GPP_WAR_SAVING_DONE; 2367cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi errorState = ManualEditState_SAVING_ERROR; 2368cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2369cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // While saving progress goes from 50 to 100 2370cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi progressBase = 50; 2371cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2372cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if we encoding is ongoing 2373cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (pContext->state == ManualEditState_SAVED) { 2374cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (progress != 100) { 2375cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Send a progress notification. 2376cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi progress = 100; 2377cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGI("videoEditor_processClip ITEM %d Last progress indication %d", 2378cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi unuseditemID, progress); 2379cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->CallVoidMethod(pContext->engine, 2380cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->onProgressUpdateMethodId, 2381cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi unuseditemID, progress); 2382cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2383cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2384cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Stop the encoding. 2385cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_processClip Calling M4xVSS_SaveStop()"); 2386cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4xVSS_SaveStop(pContext->engineContext); 2387cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_processClip M4xVSS_SaveStop() returned 0x%x", result); 2388cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2389cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Other states are unexpected 2390cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else { 2391cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4ERR_STATE; 2392cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGE("videoEditor_processClip ITEM %d State ERROR 0x%x", 2393cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi unuseditemID, (unsigned int) result); 2394cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2395cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2396cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2397cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if an error occurred. 2398cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (result != M4NO_ERROR) 2399cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2400cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the state to the error state. 2401cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->state = errorState; 2402cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2403cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Log the result. 2404cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGE("videoEditor_processClip ITEM %d Processing ERROR 0x%x", 2405cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi unuseditemID, (unsigned int) result); 2406cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2407cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2408cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2409cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Return the error result 2410cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGE("videoEditor_processClip ITEM %d END 0x%x", unuseditemID, (unsigned int) result); 2411cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return result; 2412cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 2413cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi/*+ PROGRESS CB */ 2414cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2415cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int 2416cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_generateClip( 2417cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 2418cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 2419cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject settings) { 2420cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool loaded = true; 2421cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = M4OSA_NULL; 2422cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 2423cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2424cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_generateClip START"); 2425cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2426cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the context. 2427cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = (ManualEditContext*)videoEditClasses_getContext(&loaded, pEnv, thiz); 2428cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2429cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi Mutex::Autolock autoLock(pContext->mLock); 2430cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2431cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Validate the settings parameter. 2432cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalArgumentException(&loaded, pEnv, 2433cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (NULL == settings), 2434cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "settings is null"); 2435cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2436cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was set. 2437cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&loaded, pEnv, 2438cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext), 2439cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 2440cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2441cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Load the clip settings 2442cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_generateClip Calling videoEditor_loadSettings"); 2443cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditor_loadSettings(pEnv, thiz, settings); 2444cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_generateClip videoEditor_loadSettings returned"); 2445cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2446cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Generate the clip 2447cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_generateClip Calling LVME_processClip"); 2448cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = videoEditor_processClip(pEnv, thiz, 0 /*item id is unused*/); 2449cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_generateClip videoEditor_processClip returned 0x%x", result); 2450cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2451cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Free up memory (whatever the result) 2452cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditor_unloadSettings(pEnv, thiz); 2453cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //LVME_release(pEnv, thiz); 2454cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2455cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_generateClip END 0x%x", (unsigned int) result); 2456cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return result; 2457cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 2458cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2459cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void 2460cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_loadSettings( 2461cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 2462cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 2463cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject settings) 2464cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 2465cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool needToBeLoaded = true; 2466cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = M4OSA_NULL; 2467cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2468cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_loadSettings()"); 2469cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2470cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Add a code marker (the condition must always be true). 2471cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ADD_CODE_MARKER_FUN(NULL != pEnv) 2472cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2473cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the context. 2474cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded, 2475cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv, thiz); 2476cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2477cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Validate the settings parameter. 2478cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalArgumentException(&needToBeLoaded, pEnv, 2479cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (NULL == settings), 2480cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "settings is null"); 2481cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2482cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was set. 2483cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 2484cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext), 2485cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 2486cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2487cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the context is valid (required because the context is dereferenced). 2488cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (needToBeLoaded) 2489cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2490cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that we are in a correct state. 2491cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 2492cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (pContext->state != ManualEditState_INITIALIZED), 2493cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "settings already loaded"); 2494cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2495cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Retrieve the edit settings. 2496cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if(pContext->pEditSettings != M4OSA_NULL) { 2497cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditClasses_freeEditSettings(&pContext->pEditSettings); 2498cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings = M4OSA_NULL; 2499cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2500cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditClasses_getEditSettings(&needToBeLoaded, pEnv, settings, 2501cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi &pContext->pEditSettings,true); 2502cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2503cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2504cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the edit settings could be retrieved. 2505cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (needToBeLoaded) 2506cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2507cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Log the edit settings. 2508cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "inside load settings"); 2509cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_EDIT_SETTINGS(pContext->pEditSettings); 2510cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2511cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_loadSettings END"); 2512cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 2513cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2514cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2515cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2516cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void 2517cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_unloadSettings( 2518cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 2519cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz) 2520cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 2521cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool needToBeUnLoaded = true; 2522cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = M4OSA_NULL; 2523cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 2524cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2525cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_unloadSettings()"); 2526cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2527cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the context. 2528cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = (ManualEditContext*)videoEditClasses_getContext(&needToBeUnLoaded, pEnv, thiz); 2529cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2530cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was set. 2531cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeUnLoaded, pEnv, 2532cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext), 2533cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 2534cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2535cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the context is valid (required because the context is dereferenced). 2536cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (needToBeUnLoaded) 2537cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2538cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_unloadSettings state %d", pContext->state); 2539cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that we are in a correct state. 2540cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeUnLoaded, pEnv, 2541cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ((pContext->state != ManualEditState_ANALYZING ) && 2542cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (pContext->state != ManualEditState_ANALYZING_ERROR) && 2543cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (pContext->state != ManualEditState_OPENED ) && 2544cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (pContext->state != ManualEditState_SAVING_ERROR ) && 2545cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (pContext->state != ManualEditState_SAVED ) && 2546cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (pContext->state != ManualEditState_STOPPING ) ), 2547cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_unloadSettings no load settings in progress"); 2548cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2549cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2550cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if we are in a correct state. 2551cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (needToBeUnLoaded) 2552cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2553cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the thread could be stopped. 2554cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (needToBeUnLoaded) 2555cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2556cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Close the command. 2557cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_unloadSettings Calling M4xVSS_CloseCommand()"); 2558cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4xVSS_CloseCommand(pContext->engineContext); 2559cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_unloadSettings M4xVSS_CloseCommand() returned 0x%x", 2560cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (unsigned int)result); 2561cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2562cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the command could be closed. 2563cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeUnLoaded, pEnv, 2564cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 2565cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2566cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2567cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the command could be closed. 2568cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (needToBeUnLoaded) 2569cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2570cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Free the edit settings. 2571cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //videoEditClasses_freeEditSettings(&pContext->pEditSettings); 2572cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2573cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Reset the thread result. 2574cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->threadResult = M4NO_ERROR; 2575cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2576cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Reset the thread progress. 2577cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->threadProgress = 0; 2578cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2579cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the state to initialized. 2580cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->state = ManualEditState_INITIALIZED; 2581cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2582cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2583cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 2584cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2585cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void 2586cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_stopEncoding( 2587cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 2588cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz) 2589cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 2590cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool stopped = true; 2591cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = M4OSA_NULL; 2592cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 2593cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2594cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_stopEncoding START"); 2595cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2596cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the context. 2597cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = (ManualEditContext*)videoEditClasses_getContext(&stopped, pEnv, thiz); 2598cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2599cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Change state and get Lock 2600cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // This will ensure the generateClip function exits 2601cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->state = ManualEditState_STOPPING; 2602cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi Mutex::Autolock autoLock(pContext->mLock); 2603cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2604cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was set. 2605cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&stopped, pEnv, 2606cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext), 2607cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 2608cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2609cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (stopped) { 2610cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2611cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the command should be closed. 2612cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext->state != ManualEditState_INITIALIZED) 2613cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2614cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Close the command. 2615cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_stopEncoding Calling M4xVSS_CloseCommand()"); 2616cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4xVSS_CloseCommand(pContext->engineContext); 2617cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_stopEncoding M4xVSS_CloseCommand() returned 0x%x", 2618cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (unsigned int)result); 2619cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2620cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2621cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the command could be closed. 2622cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&stopped, pEnv, 2623cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 2624cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2625cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Free the edit settings. 2626cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditClasses_freeEditSettings(&pContext->pEditSettings); 2627cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2628cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the state to initialized. 2629cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->state = ManualEditState_INITIALIZED; 2630cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2631cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2632cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 2633cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2634cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void 2635cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_release( 2636cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 2637cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz) 2638cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 2639cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool released = true; 2640cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = M4OSA_NULL; 2641cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 2642cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2643cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_release()"); 2644cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2645cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Add a text marker (the condition must always be true). 2646cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ADD_TEXT_MARKER_FUN(NULL != pEnv) 2647cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2648cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the context. 2649cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = (ManualEditContext*)videoEditClasses_getContext(&released, pEnv, thiz); 2650cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2651cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // If context is not set, return (we consider release already happened) 2652cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext == NULL) { 2653cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_release Nothing to do, context is aleady NULL"); 2654cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return; 2655cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2656cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2657cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2658cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the context is valid (required because the context is dereferenced). 2659cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (released) 2660cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2661cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext->state != ManualEditState_INITIALIZED) 2662cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2663cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Change state and get Lock 2664cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // This will ensure the generateClip function exits if it is running 2665cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->state = ManualEditState_STOPPING; 2666cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi Mutex::Autolock autoLock(pContext->mLock); 2667cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2668cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2669cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Reset the context. 2670cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditClasses_setContext(&released, pEnv, thiz, (void *)M4OSA_NULL); 2671cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2672cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the command should be closed. 2673cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext->state != ManualEditState_INITIALIZED) 2674cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2675cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Close the command. 2676cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_release Calling M4xVSS_CloseCommand() state =%d", 2677cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->state); 2678cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4xVSS_CloseCommand(pContext->engineContext); 2679cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_release M4xVSS_CloseCommand() returned 0x%x", 2680cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (unsigned int)result); 2681cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2682cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the command could be closed. 2683cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&released, pEnv, 2684cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 2685cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2686cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2687cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Cleanup the engine. 2688cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_release Calling M4xVSS_CleanUp()"); 2689cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4xVSS_CleanUp(pContext->engineContext); 2690cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_release M4xVSS_CleanUp() returned 0x%x", (unsigned int)result); 2691cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2692cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the cleanup succeeded. 2693cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&released, pEnv, 2694cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 2695cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2696cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Free the edit settings. 2697cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditClasses_freeEditSettings(&pContext->pEditSettings); 2698cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings = M4OSA_NULL; 2699cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2700cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2701cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if(pContext->mPreviewController != M4OSA_NULL) 2702cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2703cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi delete pContext->mPreviewController; 2704cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mPreviewController = M4OSA_NULL; 2705cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2706cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2707cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Free the context. 2708cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if(pContext->mAudioSettings != M4OSA_NULL) 2709cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2710cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)pContext->mAudioSettings); 2711cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings = M4OSA_NULL; 2712cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2713cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditor_freeContext(pEnv, &pContext); 2714cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2715cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 2716cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2717cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int 2718cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_registerManualEditMethods( 2719cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv) 2720cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 2721cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int result = -1; 2722cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2723cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", 2724cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_registerManualEditMethods()"); 2725cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2726cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Look up the engine class 2727cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jclass engineClazz = pEnv->FindClass(MANUAL_EDIT_ENGINE_CLASS_NAME); 2728cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2729cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Clear any resulting exceptions. 2730cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->ExceptionClear(); 2731cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2732cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the engine class was found. 2733cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (NULL != engineClazz) 2734cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2735cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Register all the methods. 2736cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pEnv->RegisterNatives(engineClazz, gManualEditMethods, 2737cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi sizeof(gManualEditMethods) / sizeof(gManualEditMethods[0])) == JNI_OK) 2738cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2739cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Success. 2740cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = 0; 2741cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2742cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2743cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2744cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Return the result. 2745cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return(result); 2746cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 2747cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2748cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi/*******Audio Graph*******/ 2749cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2750cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic M4OSA_UInt32 getDecibelSound(M4OSA_UInt32 value) 2751cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 2752cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int dbSound = 1; 2753cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2754cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (value == 0) return 0; 2755cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2756cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (value > 0x4000 && value <= 0x8000) // 32768 2757cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 90; 2758cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x2000 && value <= 0x4000) // 16384 2759cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 84; 2760cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x1000 && value <= 0x2000) // 8192 2761cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 78; 2762cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x0800 && value <= 0x1000) // 4028 2763cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 72; 2764cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x0400 && value <= 0x0800) // 2048 2765cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 66; 2766cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x0200 && value <= 0x0400) // 1024 2767cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 60; 2768cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x0100 && value <= 0x0200) // 512 2769cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 54; 2770cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x0080 && value <= 0x0100) // 256 2771cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 48; 2772cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x0040 && value <= 0x0080) // 128 2773cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 42; 2774cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x0020 && value <= 0x0040) // 64 2775cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 36; 2776cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x0010 && value <= 0x0020) // 32 2777cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 30; 2778cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x0008 && value <= 0x0010) //16 2779cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 24; 2780cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x0007 && value <= 0x0008) //8 2781cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 24; 2782cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x0003 && value <= 0x0007) // 4 2783cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 18; 2784cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x0001 && value <= 0x0003) //2 2785cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 12; 2786cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x000 && value == 0x0001) // 1 2787cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 6; 2788cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else 2789cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 0; 2790cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2791cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return dbSound; 2792cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 2793cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2794cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargitypedef struct 2795cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 2796cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt8 *m_dataAddress; 2797cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 m_bufferSize; 2798cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} M4AM_Buffer; 2799cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2800cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2801581cad2221cb367e9e3ef6991c565cd37ced994fJames DongM4OSA_UInt8 logLookUp[256] = { 2802cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi0,120,137,146,154,159,163,167,171,173,176,178,181,182,184,186,188,189,190,192,193, 2803cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi194,195,196,198,199,199,200,201,202,203,204,205,205,206,207,207,208,209,209,210, 2804cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi211,211,212,212,213,213,214,215,215,216,216,216,217,217,218,218,219,219,220,220, 2805cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi220,221,221,222,222,222,223,223,223,224,224,224,225,225,225,226,226,226,227,227, 2806cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi227,228,228,228,229,229,229,229,230,230,230,230,231,231,231,232,232,232,232,233, 2807cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi233,233,233,233,234,234,234,234,235,235,235,235,236,236,236,236,236,237,237,237, 2808cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi237,237,238,238,238,238,238,239,239,239,239,239,240,240,240,240,240,240,241,241, 2809cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi241,241,241,241,242,242,242,242,242,242,243,243,243,243,243,243,244,244,244,244, 2810cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi244,244,245,245,245,245,245,245,245,246,246,246,246,246,246,246,247,247,247,247, 2811cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi247,247,247,247,248,248,248,248,248,248,248,249,249,249,249,249,249,249,249,250, 2812cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi250,250,250,250,250,250,250,250,251,251,251,251,251,251,251,251,252,252,252,252, 2813cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi252,252,252,252,252,253,253,253,253,253,253,253,253,253,253,254,254,254,254,254, 2814cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi254,254,254,254,255,255,255,255,255,255,255,255,255,255,255}; 2815cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2816cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargiM4OSA_ERR M4MA_generateAudioGraphFile(JNIEnv* pEnv, M4OSA_Char* pInputFileURL, 2817cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* pOutFileURL, 2818cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 samplesPerValue, 2819cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 channels, 2820cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 frameDuration, 2821cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext) 2822cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 2823cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR err; 2824cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context outFileHandle = M4OSA_NULL; 2825cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context inputFileHandle = M4OSA_NULL; 2826cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4AM_Buffer bufferIn = {0, 0}; 2827cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 peakVolumeDbValue = 0; 2828cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 samplesCountInBytes= 0 , numBytesToRead = 0, index = 0; 2829cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 writeCount = 0, samplesCountBigEndian = 0, volumeValuesCount = 0; 2830cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Int32 seekPos = 0; 2831cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 fileSize = 0; 2832cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 totalBytesRead = 0; 2833cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 prevProgress = 0; 2834cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool threadStarted = true; 2835cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2836cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int dbValue = 0; 2837cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Int16 *ptr16 ; 2838cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2839cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jclass engineClass = pEnv->FindClass(MANUAL_EDIT_ENGINE_CLASS_NAME); 2840cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&threadStarted, pEnv, 2841cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == engineClass), 2842cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 2843cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2844cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* register the call back function pointer */ 2845cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->onAudioGraphProgressUpdateMethodId = 2846cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->GetMethodID(engineClass, "onAudioGraphExtractProgressUpdate", "(IZ)V"); 2847cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2848cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2849cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* ENTER */ 2850cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "ENTER - M4MA_generateAudioGraphFile"); 2851cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", 2852cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "Audio Graph samplesPerValue %d channels %d", samplesPerValue, channels); 2853cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2854cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /****************************************************************************** 2855cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi OPEN INPUT AND OUTPUT FILES 2856cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi *******************************************************************************/ 2857cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4OSA_fileReadOpen (&inputFileHandle, pInputFileURL, M4OSA_kFileRead); 2858cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (inputFileHandle == M4OSA_NULL) { 2859cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_ERROR(ANDROID_LOG_INFO, "VIDEO_EDITOR", 2860581cad2221cb367e9e3ef6991c565cd37ced994fJames Dong "M4MA_generateAudioGraphFile: Cannot open input file 0x%lx", err); 2861cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return err; 2862cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2863cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2864cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* get the file size for progress */ 2865cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4OSA_fileReadGetOption(inputFileHandle, M4OSA_kFileReadGetFileSize, 2866cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Void**)&fileSize); 2867cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ( err != M4NO_ERROR) { 2868cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //LVMEL_LOG_ERROR("M4MA_generateAudioGraphFile : File write failed \n"); 2869cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(pEnv, "java/lang/IOException", "file size get option failed"); 2870cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //return -1; 2871cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2872cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2873cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4OSA_fileWriteOpen (&outFileHandle,(M4OSA_Char*) pOutFileURL, 2874cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_kFileCreate | M4OSA_kFileWrite); 2875cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (outFileHandle == M4OSA_NULL) { 2876cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (inputFileHandle != NULL) 2877cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2878cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileReadClose(inputFileHandle); 2879cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2880cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return err; 2881cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2882cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2883cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /****************************************************************************** 2884cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi PROCESS THE SAMPLES 2885cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi *******************************************************************************/ 2886cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi samplesCountInBytes = (samplesPerValue * sizeof(M4OSA_UInt16) * channels); 2887cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2888cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bufferIn.m_dataAddress = (M4OSA_UInt8*)M4OSA_malloc(samplesCountInBytes*sizeof(M4OSA_UInt16), 0, 2889cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char*)"AudioGraph" ); 2890cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ( bufferIn.m_dataAddress != M4OSA_NULL) { 2891cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bufferIn.m_bufferSize = samplesCountInBytes*sizeof(M4OSA_UInt16); 2892cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } else { 2893cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_ERROR(ANDROID_LOG_INFO, "VIDEO_EDITOR", 2894581cad2221cb367e9e3ef6991c565cd37ced994fJames Dong "M4MA_generateAudioGraphFile: Malloc failed for bufferIn.m_dataAddress 0x%lx", 2895cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4ERR_ALLOC); 2896cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return M4ERR_ALLOC; 2897cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2898cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* sample to be converted to BIG endian ; store the frame duration */ 2899cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi samplesCountBigEndian = ((frameDuration>>24)&0xff) | // move byte 3 to byte 0 2900cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ((frameDuration<<8)&0xff0000) | // move byte 1 to byte 2 2901cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ((frameDuration>>8)&0xff00) | // move byte 2 to byte 1 2902cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ((frameDuration<<24)&0xff000000); // byte 0 to byte 3 2903cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2904cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* write the samples per value supplied to out file */ 2905cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4OSA_fileWriteData (outFileHandle, (M4OSA_MemAddr8)&samplesCountBigEndian, 2906cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi sizeof(M4OSA_UInt32) ); 2907cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (err != M4NO_ERROR) { 2908cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(pEnv, "java/lang/IOException", "file write failed"); 2909cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2910cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2911cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2912cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* write UIn32 value 0 for no of values as place holder */ 2913cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi samplesCountBigEndian = 0; /* reusing local var */ 2914cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4OSA_fileWriteData (outFileHandle, (M4OSA_MemAddr8)&samplesCountBigEndian, 2915cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi sizeof(M4OSA_UInt32) ); 2916cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (err != M4NO_ERROR) { 2917cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(pEnv, "java/lang/IOException", "file write failed"); 2918cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2919cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2920cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* loop until EOF */ 2921cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi do 2922cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2923cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_memset((M4OSA_MemAddr8)bufferIn.m_dataAddress,bufferIn.m_bufferSize, 0); 2924cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2925cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi numBytesToRead = samplesCountInBytes; 2926cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2927cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4OSA_fileReadData( inputFileHandle, 2928cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_MemAddr8)bufferIn.m_dataAddress, 2929cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi &numBytesToRead ); 2930cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2931cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (err != M4NO_ERROR) { 2932cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // if out value of bytes-read is 0, break 2933cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ( numBytesToRead == 0) { 2934581cad2221cb367e9e3ef6991c565cd37ced994fJames Dong VIDEOEDIT_LOG_ERROR(ANDROID_LOG_INFO, "VIDEO_EDITOR", "numBytesToRead 0x%lx", 2935cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi numBytesToRead); 2936cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi break; /* stop if file is empty or EOF */ 2937cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2938cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2939cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2940cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ptr16 = (M4OSA_Int16*)bufferIn.m_dataAddress; 2941cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2942cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi peakVolumeDbValue = 0; 2943cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi index = 0; 2944cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2945cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // loop through half the lenght frame bytes read 'cause its 16 bits samples 2946cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi while (index < (numBytesToRead / 2)) { 2947cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* absolute values of 16 bit sample */ 2948cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (ptr16[index] < 0) { 2949cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ptr16[index] = -(ptr16[index]); 2950cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2951cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi peakVolumeDbValue = (peakVolumeDbValue > (M4OSA_UInt32)ptr16[index] ?\ 2952cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi peakVolumeDbValue : (M4OSA_UInt32)ptr16[index]); 2953cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi index++; 2954cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2955cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2956cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // move 7 bits , ignore sign bit 2957cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbValue = (peakVolumeDbValue >> 7); 2958cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbValue = logLookUp[(M4OSA_UInt8)dbValue]; 2959cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2960cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4OSA_fileWriteData (outFileHandle, (M4OSA_MemAddr8)&dbValue, sizeof(M4OSA_UInt8) ); 2961cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (err != M4NO_ERROR) { 2962cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_ERROR(ANDROID_LOG_INFO, "VIDEO_EDITOR", 2963cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "M4MA_generateAudioGraphFile : File write failed"); 2964cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi break; 2965cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2966cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2967cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi volumeValuesCount ++; 2968cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi totalBytesRead += numBytesToRead; 2969cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2970cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ((((totalBytesRead*100)/fileSize)) != prevProgress) { 2971cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ( (pContext->threadProgress != prevProgress) && (prevProgress != 0 )) { 2972cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //pContext->threadProgress = prevProgress; 2973cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //onWveformProgressUpdateMethodId(prevProgress, 0); 2974cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //LVME_callAudioGraphOnProgressUpdate(pContext, 0, prevProgress); 2975cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->CallVoidMethod(pContext->engine, 2976cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->onAudioGraphProgressUpdateMethodId, 2977cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi prevProgress, 0); 2978cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "pContext->threadProgress %d", 2979cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi prevProgress); 2980cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2981cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2982cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi prevProgress = (((totalBytesRead*100)/fileSize)); 2983cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2984cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } while (numBytesToRead != 0); 2985cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2986581cad2221cb367e9e3ef6991c565cd37ced994fJames Dong VIDEOEDIT_LOG_ERROR(ANDROID_LOG_INFO, "VIDEO_EDITOR", "loop 0x%lx", volumeValuesCount); 2987cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2988cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* if some error occured in fwrite */ 2989cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (numBytesToRead != 0) { 2990cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //err = -1; 2991cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(pEnv, "java/lang/IOException", "numBytesToRead != 0 ; file write failed"); 2992cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2993cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2994cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* write the count in place holder after seek */ 2995cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi seekPos = sizeof(M4OSA_UInt32); 2996cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4OSA_fileWriteSeek(outFileHandle, M4OSA_kFileSeekBeginning, 2997cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi &seekPos /* after samples per value */); 2998cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ( err != M4NO_ERROR) { 2999cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(pEnv, "java/lang/IOException", "file seek failed"); 3000cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } else { 3001cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi volumeValuesCount = ((volumeValuesCount>>24)&0xff) | // move byte 3 to byte 0 3002cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ((volumeValuesCount<<8)&0xff0000) | // move byte 1 to byte 2 3003cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ((volumeValuesCount>>8)&0xff00) | // move byte 2 to byte 1 3004cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ((volumeValuesCount<<24)&0xff000000); // byte 0 to byte 3 3005cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3006cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4OSA_fileWriteData (outFileHandle, (M4OSA_MemAddr8)&volumeValuesCount, 3007cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi sizeof(M4OSA_UInt32) ); 3008cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ( err != M4NO_ERROR) { 3009cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(pEnv, "java/lang/IOException", "file write failed"); 3010cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3011cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3012cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3013cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /****************************************************************************** 3014cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CLOSE AND FREE ALLOCATIONS 3015cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi *******************************************************************************/ 3016cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)bufferIn.m_dataAddress); 3017cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileReadClose(inputFileHandle); 3018cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteClose(outFileHandle); 3019cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* final finish callback */ 3020cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->CallVoidMethod(pContext->engine, pContext->onAudioGraphProgressUpdateMethodId, 100, 0); 3021cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3022cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* EXIT */ 3023cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "EXIT - M4MA_generateAudioGraphFile"); 3024cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3025cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return err; 3026cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 3027cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3028cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int videoEditor_generateAudioWaveFormSync (JNIEnv* pEnv, jobject thiz, 3029cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring pcmfilePath, 3030cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring outGraphfilePath, 3031cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint frameDuration, jint channels, 3032cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint samplesCount) 3033cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 3034cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 3035cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = M4OSA_NULL; 3036cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool needToBeLoaded = true; 3037cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3038cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", 3039cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_generateAudioWaveFormSync() "); 3040cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3041cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* Get the context. */ 3042cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded, pEnv, thiz); 3043cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext == M4OSA_NULL) { 3044cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", 3045cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_generateAudioWaveFormSync() - pContext is NULL "); 3046cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3047cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3048cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", 3049cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_generateAudioWaveFormSync Retrieving pStringOutAudioGraphFile"); 3050cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3051cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi const char *pPCMFilePath = pEnv->GetStringUTFChars(pcmfilePath, NULL); 3052cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pPCMFilePath == M4OSA_NULL) { 3053cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pEnv != NULL) { 3054cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(pEnv, "java/lang/RuntimeException", 3055cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "Input string PCMFilePath is null"); 3056cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3057cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3058cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3059cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi const char *pStringOutAudioGraphFile = pEnv->GetStringUTFChars(outGraphfilePath, NULL); 3060cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pStringOutAudioGraphFile == M4OSA_NULL) { 3061cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pEnv != NULL) { 3062cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(pEnv, "java/lang/RuntimeException", 3063cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "Input string outGraphfilePath is null"); 3064cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3065cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3066cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3067cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", 3068cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_generateAudioWaveFormSync Generate the waveform data %s %d %d %d", 3069cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pStringOutAudioGraphFile, frameDuration, channels, samplesCount); 3070cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3071cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* Generate the waveform */ 3072cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4MA_generateAudioGraphFile(pEnv, (M4OSA_Char*) pPCMFilePath, 3073cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char*) pStringOutAudioGraphFile, 3074cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_UInt32) samplesCount, 3075cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_UInt32) channels, 3076cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_UInt32)frameDuration, 3077cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext); 3078cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3079cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pStringOutAudioGraphFile != NULL) { 3080cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->ReleaseStringUTFChars(outGraphfilePath, pStringOutAudioGraphFile); 3081cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3082cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3083cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", 3084cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_generateAudioWaveFormSync pContext->bSkipState "); 3085cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3086cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return result; 3087cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 3088cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3089cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi/******** End Audio Graph *******/ 3090cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargijint JNI_OnLoad( 3091cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JavaVM* pVm, 3092cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi void* pReserved) 3093cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 3094cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi void* pEnv = NULL; 3095cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool needToBeInitialized = true; 3096cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint result = -1; 3097cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3098cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "JNI_OnLoad()"); 3099cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3100cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Add a text marker (the condition must always be true). 3101cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ADD_TEXT_MARKER_FUN(NULL != pVm) 3102cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3103cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check the JNI version. 3104cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pVm->GetEnv(&pEnv, JNI_VERSION_1_4) == JNI_OK) 3105cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 3106cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Add a code marker (the condition must always be true). 3107cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ADD_CODE_MARKER_FUN(NULL != pEnv) 3108cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3109cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Register the manual edit JNI methods. 3110cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (videoEditor_registerManualEditMethods((JNIEnv*)pEnv) == 0) 3111cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 3112cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Initialize the classes. 3113cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditClasses_init(&needToBeInitialized, (JNIEnv*)pEnv); 3114cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (needToBeInitialized) 3115cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 3116cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Success, return valid version number. 3117cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = JNI_VERSION_1_4; 3118cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3119cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3120cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3121cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3122cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Return the result. 3123cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return(result); 3124cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 3125cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3126