VideoEditorMain.cpp revision a18886ca08b32c5c949a285f27c8713e05e3dd11
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 */ 163ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury#define LOG_NDEBUG 1 173ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury#define LOG_TAG "VideoEditorMain" 18cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <dlfcn.h> 19cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <stdio.h> 20cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <unistd.h> 21cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <utils/Log.h> 22cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <utils/threads.h> 23cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <VideoEditorClasses.h> 24cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <VideoEditorJava.h> 25cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <VideoEditorOsal.h> 26cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <VideoEditorLogging.h> 27cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <marker.h> 28cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <VideoEditorClasses.h> 29cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <VideoEditorThumbnailMain.h> 30cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4OSA_Debug.h> 31cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4xVSS_Internal.h> 32cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <surfaceflinger/Surface.h> 33cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <surfaceflinger/ISurface.h> 34cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include "VideoEditorPreviewController.h" 35cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 36cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include "VideoEditorMain.h" 37cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 38cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargiextern "C" { 39cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4OSA_Clock.h> 40cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4OSA_CharStar.h> 41cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4OSA_Error.h> 42cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4OSA_FileCommon.h> 43cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4OSA_FileReader.h> 44cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4OSA_FileWriter.h> 45cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4OSA_Memory.h> 46cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4OSA_Thread.h> 47cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4xVSS_API.h> 48cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4VSS3GPP_ErrorCodes.h> 49cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4MCS_API.h> 50cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4MCS_ErrorCodes.h> 51cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4READER_Common.h> 52cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#include <M4WRITER_common.h> 53cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi}; 54cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 55cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 56cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargiusing namespace android; 57cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 58cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#define THREAD_STACK_SIZE (65536) 59cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 60cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#define VIDEOEDITOR_VERSION_MAJOR 0 61cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#define VIDEOEDITOR_VERSION_MINOR 0 62cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#define VIDEOEDITOR_VERSION_REVISION 1 63cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 64cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 65cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargitypedef enum 66cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 67cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditState_NOT_INITIALIZED, 68cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditState_INITIALIZED, 69cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditState_ANALYZING, 70cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditState_ANALYZING_ERROR, 71cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditState_OPENED, 72cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditState_SAVING, 73cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditState_SAVING_ERROR, 74cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditState_SAVED, 75cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditState_STOPPING 76cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} ManualEditState; 77cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 78cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargitypedef struct 79cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 80cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JavaVM* pVM; 81cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject engine; 82cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jmethodID onCompletionMethodId; 83cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jmethodID onErrorMethodId; 84cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jmethodID onWarningMethodId; 85cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jmethodID onProgressUpdateMethodId; 86cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jmethodID onPreviewProgressUpdateMethodId; 87c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi jmethodID previewFrameEditInfoId; 88cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4xVSS_InitParams initParams; 89cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi void* pTextRendererHandle; 90cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4xVSS_getTextRgbBufferFct pTextRendererFunction; 91cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context engineContext; 92cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditState state; 93cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4VSS3GPP_EditSettings* pEditSettings; 94cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context threadContext; 95cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR threadResult; 96cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt8 threadProgress; 97cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VideoEditorPreviewController *mPreviewController; 98cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4xVSS_AudioMixingSettings *mAudioSettings; 99cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* Audio Graph changes */ 100cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context pAudioGraphMCSCtx; 101cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Bool bSkipState; 102cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jmethodID onAudioGraphProgressUpdateMethodId; 103cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi Mutex mLock; 104c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi bool mIsUpdateOverlay; 105c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi char *mOverlayFileName; 106c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi int mOverlayRenderingMode; 1073ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury M4DECODER_VideoDecoders* decoders; 108cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} ManualEditContext; 109cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 110cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargiextern "C" M4OSA_ERR M4MCS_open_normalMode( 111cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4MCS_Context pContext, 112cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Void* pFileIn, 113cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4VIDEOEDITING_FileType InputFileType, 114cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Void* pFileOut, 115cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Void* pTempFile); 116cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 117cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic M4OSA_ERR videoEditor_toUTF8Fct( 118cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Void* pBufferIn, 119cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt8* pBufferOut, 120cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32* bufferOutSize); 121cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 122cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic M4OSA_ERR videoEditor_fromUTF8Fct( 123cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt8* pBufferIn, 124cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Void* pBufferOut, 125cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32* bufferOutSize); 126cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 127cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic M4OSA_ERR videoEditor_getTextRgbBufferFct( 128cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Void* pRenderingData, 129cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Void* pTextBuffer, 130cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 textBufferSize, 131cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4VIFI_ImagePlane** pOutputPlane); 132cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 133cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void videoEditor_callOnProgressUpdate( 134cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext, 135cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int task, 136cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int progress); 137cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 138cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void videoEditor_freeContext( 139cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 140cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext** ppContext); 141cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 142cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic M4OSA_ERR videoEditor_threadProc( 143cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Void* param); 144cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 145cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic jobject videoEditor_getVersion( 146cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 147cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz); 148cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 149cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void videoEditor_init( 150cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 151cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 152cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring tempPath, 153cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring textRendererPath); 154cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 155cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void videoEditor_loadSettings( 156cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 157cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 158cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject settings); 159cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 160cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void videoEditor_unloadSettings( 161cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 162cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz); 163cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 164cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 165cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void videoEditor_stopEncoding( 166cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 167cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz); 168cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 169cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void videoEditor_release( 170cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 171cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz); 172cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int videoEditor_getPixels( 173cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* env, 174cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 175cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring path, 176cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jintArray pixelArray, 177cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 width, 178cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 height, 179cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 timeMS); 180cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int videoEditor_getPixelsList( 181cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* env, 182cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 183cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring path, 184cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jintArray pixelArray, 185cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 width, 186cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 height, 187cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 noOfThumbnails, 1881f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang jlong startTime, 1891f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang jlong endTime, 1901f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang jintArray indexArray, 1911f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang jobject callback); 192cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 193cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void 194cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_startPreview( 195cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 196cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 197cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject mSurface, 198cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jlong fromMs, 199cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jlong toMs, 200cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint callbackInterval, 201cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jboolean loop); 202cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 203cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void 204cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_populateSettings( 205cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 206cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 207cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject settings, 208cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject object, 209cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject audioSettingObject); 210cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 211df4723ef3c43b3a0b2548908a4461db29b5649d2Santosh Madhavastatic int videoEditor_stopPreview(JNIEnv* pEnv, 212cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz); 213cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 214cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic jobject 215cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_getProperties( 216cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 217cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 218cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring file); 219cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 220cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int videoEditor_renderPreviewFrame(JNIEnv* pEnv, 221cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 222cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject mSurface, 223cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jlong fromMs, 224cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint surfaceWidth, 225cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint surfaceHeight); 226cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 227cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int videoEditor_registerManualEditMethods( 228cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv); 229cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 230cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void jniPreviewProgressCallback(void* cookie, M4OSA_UInt32 msgType, 231c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi void *argc); 232cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 23305d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharmastatic int videoEditor_renderMediaItemPreviewFrame(JNIEnv* pEnv, 234cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 235cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject mSurface, 236cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring filePath, 237cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint frameWidth, 238cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint frameHeight, 239cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint surfaceWidth, 240cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint surfaceHeight, 241cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jlong fromMs); 242cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 243cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int videoEditor_generateAudioWaveFormSync ( JNIEnv* pEnv, 244cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 245cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring pcmfilePath, 246cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring outGraphfilePath, 247cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint frameDuration, 248cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint channels, 249cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint samplesCount); 250cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 251cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int videoEditor_generateAudioRawFile(JNIEnv* pEnv, 252cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 253cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring infilePath, 254cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring pcmfilePath ); 255cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 256cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargiM4OSA_ERR videoEditor_generateAudio(JNIEnv* pEnv,ManualEditContext* pContext, 257cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* infilePath, 258cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* pcmfilePath ); 259cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 260cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int 261cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_generateClip( 262cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 263cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 264cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject settings); 265cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 26605d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharmastatic void videoEditor_clearSurface(JNIEnv* pEnv, 26705d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma jobject thiz, 2681ac760afabeb19ced48a788c7b675baba47d4db3Dheeraj Sharma jobject surface); 269cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 270cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic JNINativeMethod gManualEditMethods[] = { 271cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi {"getVersion", "()L"VERSION_CLASS_NAME";", 272cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (void *)videoEditor_getVersion }, 273cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi {"_init", "(Ljava/lang/String;Ljava/lang/String;)V", 274cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (void *)videoEditor_init }, 275cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi {"nativeStartPreview", "(Landroid/view/Surface;JJIZ)V", 276cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (void *)videoEditor_startPreview }, 277cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi {"nativePopulateSettings", 278cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "(L"EDIT_SETTINGS_CLASS_NAME";L"PREVIEW_PROPERTIES_CLASS_NAME";L" 279cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi AUDIO_SETTINGS_CLASS_NAME";)V", 280cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (void *)videoEditor_populateSettings }, 281cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi {"nativeRenderPreviewFrame", "(Landroid/view/Surface;JII)I", 282cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (int *)videoEditor_renderPreviewFrame }, 283cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi {"nativeRenderMediaItemPreviewFrame", 284cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "(Landroid/view/Surface;Ljava/lang/String;IIIIJ)I", 285cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (int *)videoEditor_renderMediaItemPreviewFrame }, 286df4723ef3c43b3a0b2548908a4461db29b5649d2Santosh Madhava {"nativeStopPreview", "()I", 287df4723ef3c43b3a0b2548908a4461db29b5649d2Santosh Madhava (int *)videoEditor_stopPreview }, 288cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi {"stopEncoding", "()V", 289cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (void *)videoEditor_stopEncoding }, 290cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi {"release", "()V", 291cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (void *)videoEditor_release }, 292cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi {"nativeGetPixels", "(Ljava/lang/String;[IIIJ)I", 293cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (void*)videoEditor_getPixels }, 29447a52158d2df0eb818bf7d589d8ff9fd5c0daaa3Chih-Chung Chang {"nativeGetPixelsList", "(Ljava/lang/String;[IIIIJJ[ILandroid/media/videoeditor/MediaArtistNativeHelper$NativeGetPixelsListCallback;)I", 295cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (void*)videoEditor_getPixelsList }, 296cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi {"getMediaProperties", 297cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "(Ljava/lang/String;)Landroid/media/videoeditor/MediaArtistNativeHelper$Properties;", 298cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (void *)videoEditor_getProperties }, 299cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi {"nativeGenerateAudioGraph","(Ljava/lang/String;Ljava/lang/String;III)I", 300cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (int *)videoEditor_generateAudioWaveFormSync }, 301cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi {"nativeGenerateRawAudio", "(Ljava/lang/String;Ljava/lang/String;)I", 302cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (int *)videoEditor_generateAudioRawFile }, 303cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi {"nativeGenerateClip", "(L"EDIT_SETTINGS_CLASS_NAME";)I", 304cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (void *)videoEditor_generateClip }, 3051ac760afabeb19ced48a788c7b675baba47d4db3Dheeraj Sharma {"nativeClearSurface", "(Landroid/view/Surface;)V", 30605d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma (void *)videoEditor_clearSurface }, 307cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi}; 308cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 309cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi// temp file name of VSS out file 3105618e037af1a9d4323990a580d4181b9bc8e3091Dheeraj Sharma#define TEMP_MCS_OUT_FILE_PATH "tmpOut.3gp" 311cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 312cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargivoid 313cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargigetClipSetting( 314cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 315cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject object, 316cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4VSS3GPP_ClipSettings* pSettings) 317cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 318cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 319cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jfieldID fid; 320cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int field = 0; 321cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool needToBeLoaded = true; 322cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jclass clazz = pEnv->FindClass(PROPERTIES_CLASS_NAME); 323cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 324cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 325cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == clazz), 326cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 327cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 328cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(clazz,"duration","I"); 329cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.uiClipDuration = pEnv->GetIntField(object,fid); 330cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("duration = %d",pSettings->ClipProperties.uiClipDuration); 331cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 332cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(clazz,"videoFormat","I"); 333cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.VideoStreamType = 334cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4VIDEOEDITING_VideoFormat)pEnv->GetIntField(object,fid); 335cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("videoFormat = %d",pSettings->ClipProperties.VideoStreamType); 336cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 337cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(clazz,"videoDuration","I"); 338cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.uiClipVideoDuration = pEnv->GetIntField(object,fid); 339cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("videoDuration = %d", 340cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.uiClipVideoDuration); 341cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 342cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(clazz,"width","I"); 343cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.uiVideoWidth = pEnv->GetIntField(object,fid); 344cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("width = %d",pSettings->ClipProperties.uiVideoWidth); 345cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 346cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(clazz,"height","I"); 347cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.uiVideoHeight = pEnv->GetIntField(object,fid); 348cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("height = %d",pSettings->ClipProperties.uiVideoHeight); 349cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 350cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(clazz,"audioFormat","I"); 351cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.AudioStreamType = 352cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4VIDEOEDITING_AudioFormat)pEnv->GetIntField(object,fid); 353cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("audioFormat = %d",pSettings->ClipProperties.AudioStreamType); 354cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 355cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(clazz,"audioDuration","I"); 356cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.uiClipAudioDuration = pEnv->GetIntField(object,fid); 357cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("audioDuration = %d", 358cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.uiClipAudioDuration); 359cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 360cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(clazz,"audioBitrate","I"); 361cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.uiAudioBitrate = pEnv->GetIntField(object,fid); 362cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("audioBitrate = %d",pSettings->ClipProperties.uiAudioBitrate); 363cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 364cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(clazz,"audioChannels","I"); 365cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.uiNbChannels = pEnv->GetIntField(object,fid); 366cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("audioChannels = %d",pSettings->ClipProperties.uiNbChannels); 367cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 368cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(clazz,"audioSamplingFrequency","I"); 369cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.uiSamplingFrequency = pEnv->GetIntField(object,fid); 370cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("audioSamplingFrequency = %d", 371cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.uiSamplingFrequency); 372cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 373cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(clazz,"audioVolumeValue","I"); 374cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.uiClipAudioVolumePercentage = 375cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->GetIntField(object,fid); 376cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("audioVolumeValue = %d", 377cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pSettings->ClipProperties.uiClipAudioVolumePercentage); 378c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury 379c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury fid = pEnv->GetFieldID(clazz,"videoRotation","I"); 380c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury pSettings->ClipProperties.videoRotationDegrees = 381c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury pEnv->GetIntField(object,fid); 382c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury M4OSA_TRACE1_1("videoRotation = %d", 383c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury pSettings->ClipProperties.videoRotationDegrees); 384cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 385cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 386cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void jniPreviewProgressCallback (void* cookie, M4OSA_UInt32 msgType, 387c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi void *argc) 388cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 389cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext *pContext = (ManualEditContext *)cookie; 390cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv = NULL; 391cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool isFinished = false; 392cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int currentMs = 0; 393cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int error = M4NO_ERROR; 394c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi bool isUpdateOverlay = false; 395c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi int overlayEffectIndex; 396c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi char *extPos; 397c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi bool isSendProgress = true; 398c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi jstring tmpFileName; 399c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi VideoEditorCurretEditInfo *pCurrEditInfo; 400cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 401cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Attach the current thread. 402cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pVM->AttachCurrentThread(&pEnv, NULL); 403cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi switch(msgType) 404cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 405cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi case MSG_TYPE_PROGRESS_INDICATION: 406c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi currentMs = *(int*)argc; 407cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi break; 408cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi case MSG_TYPE_PLAYER_ERROR: 409cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi currentMs = -1; 410c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi error = *(int*)argc; 411cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi break; 412cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi case MSG_TYPE_PREVIEW_END: 413cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi isFinished = true; 414cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi break; 415c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi case MSG_TYPE_OVERLAY_UPDATE: 416c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi { 417c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi int overlayFileNameLen = 0; 418c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi isSendProgress = false; 419c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi pContext->mIsUpdateOverlay = true; 420c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi pCurrEditInfo = (VideoEditorCurretEditInfo*)argc; 421c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi overlayEffectIndex = pCurrEditInfo->overlaySettingsIndex; 422c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi LOGV("MSG_TYPE_OVERLAY_UPDATE"); 423c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi 424c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi if (pContext->mOverlayFileName != NULL) { 425c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pContext->mOverlayFileName); 426c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi pContext->mOverlayFileName = NULL; 427c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi } 428c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi 429c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi overlayFileNameLen = 430c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi strlen((const char*)pContext->pEditSettings->Effects[overlayEffectIndex].xVSS.pFramingFilePath); 431c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi 432c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi pContext->mOverlayFileName = 433c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu (char*)M4OSA_32bitAlignedMalloc(overlayFileNameLen+1, 434c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi M4VS, (M4OSA_Char*)"videoEdito JNI overlayFile"); 435c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi if (pContext->mOverlayFileName != NULL) { 436c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi strncpy (pContext->mOverlayFileName, 437c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi (const char*)pContext->pEditSettings->\ 438c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi Effects[overlayEffectIndex].xVSS.pFramingFilePath, overlayFileNameLen); 439c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi //Change the name to png file 440c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi extPos = strstr(pContext->mOverlayFileName, ".rgb"); 441c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi if (extPos != NULL) { 442c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi *extPos = '\0'; 443c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi } else { 444c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi LOGE("ERROR the overlay file is incorrect"); 445c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi } 446c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi 447c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi strcat(pContext->mOverlayFileName, ".png"); 448c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi LOGV("Conv string is %s", pContext->mOverlayFileName); 449c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi LOGV("Current Clip index = %d", pCurrEditInfo->clipIndex); 450c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi 451c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi pContext->mOverlayRenderingMode = pContext->pEditSettings->\ 452c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi pClipList[pCurrEditInfo->clipIndex]->xVSS.MediaRendering; 453fb4e92c4ed316295c7cde38e58cf0816c0e5f8ceDheeraj Sharma LOGV("rendering mode %d ", pContext->mOverlayRenderingMode); 454c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi 455c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi } 456c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi 457c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi break; 458c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi } 459c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi 460c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi case MSG_TYPE_OVERLAY_CLEAR: 461c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi isSendProgress = false; 46271771b3b1bbcafe84e7bd14941b98a1b1d6c8a60Santosh Madhava if (pContext->mOverlayFileName != NULL) { 463c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pContext->mOverlayFileName); 46471771b3b1bbcafe84e7bd14941b98a1b1d6c8a60Santosh Madhava pContext->mOverlayFileName = NULL; 46571771b3b1bbcafe84e7bd14941b98a1b1d6c8a60Santosh Madhava } 46671771b3b1bbcafe84e7bd14941b98a1b1d6c8a60Santosh Madhava 467beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi LOGV("MSG_TYPE_OVERLAY_CLEAR"); 468c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi //argc is not used 469c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi pContext->mIsUpdateOverlay = true; 470c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi break; 471cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi default: 472cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi break; 473cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 474cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 475c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi if (isSendProgress) { 476c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi tmpFileName = pEnv->NewStringUTF(pContext->mOverlayFileName); 477c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi pEnv->CallVoidMethod(pContext->engine, 478c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi pContext->onPreviewProgressUpdateMethodId, 479c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi currentMs,isFinished, pContext->mIsUpdateOverlay, 480c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi tmpFileName, pContext->mOverlayRenderingMode); 481c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi 482c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi if (pContext->mIsUpdateOverlay) { 483c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi pContext->mIsUpdateOverlay = false; 484c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi } 485c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi 486c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi if (tmpFileName) { 487c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi pEnv->DeleteLocalRef(tmpFileName); 488c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi } 489c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi } 490cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 491cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Detach the current thread. 492cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pVM->DetachCurrentThread(); 493cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 494cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 4953ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdurystatic M4OSA_ERR checkClipVideoProfileAndLevel(M4DECODER_VideoDecoders *pDecoders, 4963ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury M4OSA_Int32 format, M4OSA_UInt32 profile, M4OSA_UInt32 level){ 4973ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury 4983ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury M4OSA_Int32 codec = 0; 4993ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury M4OSA_Bool foundCodec = M4OSA_FALSE; 5003ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury M4OSA_ERR result = M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_PROFILE; 5013ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury M4OSA_Bool foundProfile = M4OSA_FALSE; 5023ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury LOGV("checkClipVideoProfileAndLevel format %d profile;%d level:0x%x", 5033ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury format, profile, level); 5043ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury 5053ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury switch (format) { 5063ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury case M4VIDEOEDITING_kH263: 5073ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury codec = M4DA_StreamTypeVideoH263; 5083ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury break; 5093ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury case M4VIDEOEDITING_kH264: 5103ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury codec = M4DA_StreamTypeVideoMpeg4Avc; 5113ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury break; 5123ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury case M4VIDEOEDITING_kMPEG4: 5133ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury codec = M4DA_StreamTypeVideoMpeg4; 5143ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury break; 5153ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury case M4VIDEOEDITING_kNoneVideo: 5163ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury case M4VIDEOEDITING_kNullVideo: 5173ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury case M4VIDEOEDITING_kUnsupportedVideo: 5183ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury // For these case we do not check the profile and level 5193ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury return M4NO_ERROR; 5203ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury default : 5213ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury LOGE("checkClipVideoProfileAndLevel unsupport Video format %ld", format); 5223ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury break; 5233ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury } 5243ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury 5253ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury if (pDecoders != M4OSA_NULL && pDecoders->decoderNumber > 0) { 5263ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury VideoDecoder *pVideoDecoder = pDecoders->decoder; 5273ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury for(size_t k =0; k < pDecoders->decoderNumber; k++) { 5283ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury if (pVideoDecoder != M4OSA_NULL) { 5293ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury if (pVideoDecoder->codec == codec) { 5303ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury foundCodec = M4OSA_TRUE; 5313ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury break; 5323ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury } 5333ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury } 5343ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury pVideoDecoder++; 5353ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury } 5363ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury 5373ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury if (foundCodec) { 5383ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury VideoComponentCapabilities* pComponent = pVideoDecoder->component; 5393ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury for (size_t i = 0; i < pVideoDecoder->componentNumber; i++) { 5403ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury if (pComponent != M4OSA_NULL) { 5413ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury VideoProfileLevel *pProfileLevel = pComponent->profileLevel; 5423ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury for (size_t j =0; j < pComponent->profileNumber; j++) { 5433ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury // Check the profile and level 5443ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury if (pProfileLevel != M4OSA_NULL) { 5453ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury if (profile == pProfileLevel->mProfile) { 5463ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury foundProfile = M4OSA_TRUE; 5473ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury 5483ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury if (level <= pProfileLevel->mLevel) { 5493ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury return M4NO_ERROR; 5503ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury } 5513ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury } else { 5523ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury foundProfile = M4OSA_FALSE; 5533ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury } 5543ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury } 5553ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury pProfileLevel++; 5563ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury } 5573ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury } 5583ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury pComponent++; 5593ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury } 5603ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury } 5613ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury } 5623ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury 5633ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury if (foundProfile) { 5643ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury result = M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_LEVEL; 5653ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury } else { 5663ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury result = M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_PROFILE; 5673ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury } 5683ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury 5693ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury return result; 5703ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury} 571df4723ef3c43b3a0b2548908a4461db29b5649d2Santosh Madhavastatic int videoEditor_stopPreview(JNIEnv* pEnv, 572cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz) 573cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 574cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = M4OSA_NULL; 575cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool needToBeLoaded = true; 576df4723ef3c43b3a0b2548908a4461db29b5649d2Santosh Madhava M4OSA_UInt32 lastProgressTimeMs = 0; 577df4723ef3c43b3a0b2548908a4461db29b5649d2Santosh Madhava 578cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the context. 579cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = 580cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded, pEnv, thiz); 581cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 582cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was set. 583cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 584cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext), 585cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 586df4723ef3c43b3a0b2548908a4461db29b5649d2Santosh Madhava lastProgressTimeMs = pContext->mPreviewController->stopPreview(); 587c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi 588c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi if (pContext->mOverlayFileName != NULL) { 589c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pContext->mOverlayFileName); 590c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi pContext->mOverlayFileName = NULL; 591c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi } 592df4723ef3c43b3a0b2548908a4461db29b5649d2Santosh Madhava 593df4723ef3c43b3a0b2548908a4461db29b5649d2Santosh Madhava return lastProgressTimeMs; 594cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 595cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 59605d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharmastatic void videoEditor_clearSurface(JNIEnv* pEnv, 59705d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma jobject thiz, 5981ac760afabeb19ced48a788c7b675baba47d4db3Dheeraj Sharma jobject surface) 59905d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma{ 60005d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma bool needToBeLoaded = true; 60105d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma M4OSA_ERR result = M4NO_ERROR; 60205d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma VideoEditor_renderPreviewFrameStr frameStr; 60305d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma const char* pMessage = NULL; 6041ac760afabeb19ced48a788c7b675baba47d4db3Dheeraj Sharma // Let the size be QVGA 6051ac760afabeb19ced48a788c7b675baba47d4db3Dheeraj Sharma int width = 320; 6061ac760afabeb19ced48a788c7b675baba47d4db3Dheeraj Sharma int height = 240; 60705d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma ManualEditContext* pContext = M4OSA_NULL; 60805d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma 60905d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma // Get the context. 61005d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma pContext = (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded, pEnv, thiz); 61105d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, 61205d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma "VIDEO_EDITOR","pContext = 0x%x",pContext); 61305d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma 61405d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma // Make sure that the context was set. 61505d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 61605d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma (M4OSA_NULL == pContext), 61705d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma "not initialized"); 61805d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma 61905d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma // Make sure that the context was set. 62005d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 62105d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma (M4OSA_NULL == pContext->mPreviewController), 62205d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma "not initialized"); 62305d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma 62405d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma // Validate the surface parameter. 62505d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma videoEditJava_checkAndThrowIllegalArgumentException(&needToBeLoaded, pEnv, 62605d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma (NULL == surface), 62705d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma "surface is null"); 62805d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma 62905d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma jclass surfaceClass = pEnv->FindClass("android/view/Surface"); 63005d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 63105d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma (M4OSA_NULL == surfaceClass), 63205d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma "not initialized"); 63305d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma 63405d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma jfieldID surface_native = 63505d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma pEnv->GetFieldID(surfaceClass, ANDROID_VIEW_SURFACE_JNI_ID, "I"); 63605d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 63705d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma (M4OSA_NULL == surface_native), 63805d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma "not initialized"); 63905d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma 64005d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma Surface* const p = (Surface*)pEnv->GetIntField(surface, surface_native); 64105d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma sp<Surface> previewSurface = sp<Surface>(p); 6428e7991a52edb3eb8bd1a44ceb7f6d97108748c8cRajneesh Chowdury // Validate the mSurface's mNativeSurface field 6438e7991a52edb3eb8bd1a44ceb7f6d97108748c8cRajneesh Chowdury videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 6448e7991a52edb3eb8bd1a44ceb7f6d97108748c8cRajneesh Chowdury (NULL == previewSurface.get()), 6458e7991a52edb3eb8bd1a44ceb7f6d97108748c8cRajneesh Chowdury "mNativeSurface is null"); 64605d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma 6471ac760afabeb19ced48a788c7b675baba47d4db3Dheeraj Sharma frameStr.pBuffer = M4OSA_NULL; 64805d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma frameStr.timeMs = 0; 64905d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma frameStr.uiSurfaceWidth = width; 65005d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma frameStr.uiSurfaceHeight = height; 65105d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma frameStr.uiFrameWidth = width; 65205d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma frameStr.uiFrameHeight = height; 65305d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma frameStr.bApplyEffect = M4OSA_FALSE; 65405d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma frameStr.clipBeginCutTime = 0; 65505d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma frameStr.clipEndCutTime = 0; 65605d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma 6571ac760afabeb19ced48a788c7b675baba47d4db3Dheeraj Sharma result = pContext->mPreviewController->clearSurface(previewSurface, 65805d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma &frameStr); 65905d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 66005d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma (M4NO_ERROR != result), result); 66105d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma 66205d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma } 66305d9f81bd638a749669192b50e680b166529d5f3Dheeraj Sharma 664cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int videoEditor_renderPreviewFrame(JNIEnv* pEnv, 665cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 666cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject mSurface, 667cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jlong fromMs, 668cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint surfaceWidth, 669cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint surfaceHeight ) 670cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 671cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool needToBeLoaded = true; 672cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 673cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 timeMs = (M4OSA_UInt32)fromMs; 674cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 i=0,tnTimeMs = 0, framesizeYuv =0; 675cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4VIFI_UInt8 *pixelArray = M4OSA_NULL; 676cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 iCurrentClipIndex = 0, uiNumberOfClipsInStoryBoard =0, 677cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi uiClipDuration = 0, uiTotalClipDuration = 0, 678cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi iIncrementedDuration = 0; 679cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VideoEditor_renderPreviewFrameStr frameStr; 680cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context tnContext = M4OSA_NULL; 681cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi const char* pMessage = NULL; 682581cad2221cb367e9e3ef6991c565cd37ced994fJames Dong M4VIFI_ImagePlane *yuvPlane = NULL; 683c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi VideoEditorCurretEditInfo currEditInfo; 684cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 685cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, 686cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "VIDEO_EDITOR", "surfaceWidth = %d",surfaceWidth); 687cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, 688cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "VIDEO_EDITOR", "surfaceHeight = %d",surfaceHeight); 689cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = M4OSA_NULL; 690cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the context. 691cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = 692cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded, pEnv, thiz); 693cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, 694cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "VIDEO_EDITOR","pContext = 0x%x",pContext); 695cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 696cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was set. 697cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 698cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext), 699cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 700cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 701cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was set. 702cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 703cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext->mPreviewController), 704cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 705cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 706cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Validate the mSurface parameter. 707cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalArgumentException(&needToBeLoaded, pEnv, 708cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (NULL == mSurface), 709cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "mSurface is null"); 710cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jclass surfaceClass = pEnv->FindClass("android/view/Surface"); 711cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 712cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == surfaceClass), 713cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 714cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 715cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jfieldID surface_native = 716cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->GetFieldID(surfaceClass, ANDROID_VIEW_SURFACE_JNI_ID, "I"); 717cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 718cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == surface_native), 719cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 720cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 721cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi Surface* const p = (Surface*)pEnv->GetIntField(mSurface, surface_native); 722cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi sp<Surface> previewSurface = sp<Surface>(p); 7238e7991a52edb3eb8bd1a44ceb7f6d97108748c8cRajneesh Chowdury // Validate the mSurface's mNativeSurface field 7248e7991a52edb3eb8bd1a44ceb7f6d97108748c8cRajneesh Chowdury videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 7258e7991a52edb3eb8bd1a44ceb7f6d97108748c8cRajneesh Chowdury (NULL == previewSurface.get()), 7268e7991a52edb3eb8bd1a44ceb7f6d97108748c8cRajneesh Chowdury "mNativeSurface is null"); 727cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 728cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* Determine the total number of clips, total duration*/ 729cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi uiNumberOfClipsInStoryBoard = pContext->pEditSettings->uiClipNumber; 730cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 731cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi for (i = 0; i < uiNumberOfClipsInStoryBoard; i++) { 732cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi uiClipDuration = pContext->pEditSettings->pClipList[i]->uiEndCutTime - 733cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->pClipList[i]->uiBeginCutTime; 734cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi uiTotalClipDuration += uiClipDuration; 735cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 736cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 737cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* determine the clip whose thumbnail needs to be rendered*/ 738cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (timeMs == 0) { 739cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi iCurrentClipIndex = 0; 740cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi i=0; 741cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } else { 742cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", 743cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_renderPreviewFrame() timeMs=%d", timeMs); 744cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 745cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (timeMs > uiTotalClipDuration) { 746cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", 747cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_renderPreviewFrame() timeMs > uiTotalClipDuration"); 748cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pMessage = videoEditJava_getErrorName(M4ERR_PARAMETER); 749cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(pEnv, "java/lang/IllegalArgumentException", pMessage); 750cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return -1; 751cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 752cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 753cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi for (i = 0; i < uiNumberOfClipsInStoryBoard; i++) { 754fb4e92c4ed316295c7cde38e58cf0816c0e5f8ceDheeraj Sharma if (timeMs <= (iIncrementedDuration + 755cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (pContext->pEditSettings->pClipList[i]->uiEndCutTime - 756cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->pClipList[i]->uiBeginCutTime))) 757cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 758cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi iCurrentClipIndex = i; 759cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", 760cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_renderPreviewFrame() iCurrentClipIndex=%d for timeMs=%d", 761cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi iCurrentClipIndex, timeMs); 762cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi break; 763cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 764cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else { 765cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi iIncrementedDuration = iIncrementedDuration + 766cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (pContext->pEditSettings->pClipList[i]->uiEndCutTime - 767cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->pClipList[i]->uiBeginCutTime); 768cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 769cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 770cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 771cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* If timestamp is beyond story board duration, return*/ 772cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (i >= uiNumberOfClipsInStoryBoard) { 773cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (timeMs == iIncrementedDuration) { 774cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi iCurrentClipIndex = i-1; 775cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } else { 776cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return -1; 777cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 778cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 779cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 780cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*+ Handle the image files here */ 781cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext->pEditSettings->pClipList[iCurrentClipIndex]->FileType == 782cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*M4VIDEOEDITING_kFileType_JPG*/ M4VIDEOEDITING_kFileType_ARGB8888 ) { 783cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", " iCurrentClipIndex %d ", iCurrentClipIndex); 784cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", 785cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi " Height = %d", 786cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->pClipList[iCurrentClipIndex]->ClipProperties.uiVideoHeight); 787cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 788cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", 789cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi " Width = %d", 790cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->pClipList[iCurrentClipIndex]->ClipProperties.uiVideoWidth); 791cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 792cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LvGetImageThumbNail((const char *)pContext->pEditSettings->\ 793cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pClipList[iCurrentClipIndex]->pFile, 794cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->pClipList[iCurrentClipIndex]->ClipProperties.uiVideoHeight, 795cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->pClipList[iCurrentClipIndex]->ClipProperties.uiVideoWidth, 796cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Void **)&frameStr.pBuffer); 797fb4e92c4ed316295c7cde38e58cf0816c0e5f8ceDheeraj Sharma tnTimeMs = (M4OSA_UInt32)timeMs; 798c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury 799c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury frameStr.videoRotationDegree = 0; 800cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } else { 801cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* Handle 3gp/mp4 Clips here */ 802cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* get thumbnail*/ 803cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = ThumbnailOpen(&tnContext, 804cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (const M4OSA_Char*)pContext->pEditSettings->\ 805cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pClipList[iCurrentClipIndex]->pFile, M4OSA_TRUE); 806cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (result != M4NO_ERROR || tnContext == M4OSA_NULL) { 807cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return -1; 808cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 809cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 810cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* timeMs is relative to storyboard; in this api it shud be relative to this clip */ 811cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ((i >= uiNumberOfClipsInStoryBoard) && 812cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (timeMs == iIncrementedDuration)) { 813cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi tnTimeMs = pContext->pEditSettings->\ 814cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pClipList[iCurrentClipIndex]->uiEndCutTime; 815cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } else { 816cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi tnTimeMs = pContext->pEditSettings->\ 817cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pClipList[iCurrentClipIndex]->uiBeginCutTime 818cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi + (timeMs - iIncrementedDuration); 819cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 820cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 821cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", 822cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "video width = %d",pContext->pEditSettings->pClipList[iCurrentClipIndex]->\ 823cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ClipProperties.uiVideoWidth); 824cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", 825cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "video height = %d",pContext->pEditSettings->pClipList[iCurrentClipIndex]->\ 826cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ClipProperties.uiVideoHeight); 827cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", 828cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "current clip index = %d",iCurrentClipIndex); 829cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 830cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 width = pContext->pEditSettings->pClipList[iCurrentClipIndex]->\ 831cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ClipProperties.uiVideoWidth; 832cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 height = pContext->pEditSettings->pClipList[iCurrentClipIndex]->\ 833cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ClipProperties.uiVideoHeight; 834cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 835cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi framesizeYuv = width * height * 1.5; 836cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 837c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu pixelArray = (M4VIFI_UInt8 *)M4OSA_32bitAlignedMalloc(framesizeYuv, M4VS, 838cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char*)"videoEditor pixelArray"); 839cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pixelArray == M4OSA_NULL) { 840cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", 841cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_renderPreviewFrame() malloc error"); 842cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ThumbnailClose(tnContext); 843cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pMessage = videoEditJava_getErrorName(M4ERR_ALLOC); 844cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(pEnv, "java/lang/RuntimeException", pMessage); 845cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return -1; 846cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 847cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 848cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = ThumbnailGetPixels16(tnContext, (M4OSA_Int16 *)pixelArray, 849cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->pClipList[iCurrentClipIndex]->\ 850cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ClipProperties.uiVideoWidth, 851cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->pClipList[iCurrentClipIndex]->\ 852cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ClipProperties.uiVideoHeight, 853cb04a1f3a31c252a0e3fda5e7eaa16f3257c9397Chih-Chung Chang &tnTimeMs, 0); 854cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (result != M4NO_ERROR) { 855c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pixelArray); 856cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ThumbnailClose(tnContext); 857cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return -1; 858cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 859cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 860cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ThumbnailClose(tnContext); 861cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi tnContext = M4OSA_NULL; 862cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 863cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#ifdef DUMPTOFILE 864cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 865cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context fileContext; 866cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* fileName = (M4OSA_Char*)"/mnt/sdcard/FirstRGB565.raw"; 8677743fa64b11e9747d3ba8065a08a33ee9d90938fDheeraj Sharma remove((const char *)fileName); 868cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteOpen(&fileContext, (M4OSA_Void*) fileName,\ 869cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_kFileWrite|M4OSA_kFileCreate); 870cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteData(fileContext, (M4OSA_MemAddr8) pixelArray, 871cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi framesizeYuv); 872cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteClose(fileContext); 873cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 874cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#endif 875cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 876cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /** 877cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi * Allocate output YUV planes 878cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi */ 879c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu yuvPlane = (M4VIFI_ImagePlane*)M4OSA_32bitAlignedMalloc(3*sizeof(M4VIFI_ImagePlane), M4VS, 880cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char*)"videoEditor_renderPreviewFrame Output plane YUV"); 881cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (yuvPlane == M4OSA_NULL) { 882cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", 883cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_renderPreviewFrame() malloc error for yuv plane"); 884c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pixelArray); 885cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pMessage = videoEditJava_getErrorName(M4ERR_ALLOC); 886cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(pEnv, "java/lang/RuntimeException", pMessage); 887cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return -1; 888cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 889cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 890cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[0].u_width = width; 891cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[0].u_height = height; 892cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[0].u_topleft = 0; 893cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[0].u_stride = width; 894cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[0].pac_data = (M4VIFI_UInt8*)pixelArray; 895cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 896cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[1].u_width = width>>1; 897cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[1].u_height = height>>1; 898cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[1].u_topleft = 0; 899cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[1].u_stride = width>>1; 900cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[1].pac_data = yuvPlane[0].pac_data 901cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi + yuvPlane[0].u_width * yuvPlane[0].u_height; 902cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[2].u_width = (width)>>1; 903cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[2].u_height = (height)>>1; 904cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[2].u_topleft = 0; 905cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[2].u_stride = (width)>>1; 906cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[2].pac_data = yuvPlane[1].pac_data 907cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi + yuvPlane[1].u_width * yuvPlane[1].u_height; 908cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 909cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#ifdef DUMPTOFILE 910cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 911cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context fileContext; 912cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* fileName = (M4OSA_Char*)"/mnt/sdcard/ConvertedYuv.yuv"; 9137743fa64b11e9747d3ba8065a08a33ee9d90938fDheeraj Sharma remove((const char *)fileName); 914cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteOpen(&fileContext, (M4OSA_Void*) fileName,\ 915cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_kFileWrite|M4OSA_kFileCreate); 916cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteData(fileContext, 917cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_MemAddr8) yuvPlane[0].pac_data, framesizeYuv); 918cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteClose(fileContext); 919cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 920cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#endif 921cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 922cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* Fill up the render structure*/ 923cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.pBuffer = (M4OSA_Void*)yuvPlane[0].pac_data; 924c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury 925c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury frameStr.videoRotationDegree = pContext->pEditSettings->\ 926c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury pClipList[iCurrentClipIndex]->ClipProperties.videoRotationDegrees; 927cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 928cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 929cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.timeMs = timeMs; /* timestamp on storyboard*/ 930cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.uiSurfaceWidth = 931cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->pClipList[iCurrentClipIndex]->\ 932cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ClipProperties.uiVideoWidth; 933cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.uiSurfaceHeight = 934cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->pClipList[iCurrentClipIndex]->\ 935cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ClipProperties.uiVideoHeight; 936cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.uiFrameWidth = 937cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->pClipList[iCurrentClipIndex]->\ 938cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ClipProperties.uiVideoWidth; 939cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.uiFrameHeight = 940cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->pClipList[iCurrentClipIndex]->\ 941cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ClipProperties.uiVideoHeight; 942cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext->pEditSettings->nbEffects > 0) { 943cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.bApplyEffect = M4OSA_TRUE; 944cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } else { 945cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.bApplyEffect = M4OSA_FALSE; 946cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 947cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.clipBeginCutTime = iIncrementedDuration; 948cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.clipEndCutTime = 949cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi iIncrementedDuration + 950cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (pContext->pEditSettings->pClipList[iCurrentClipIndex]->uiEndCutTime -\ 951cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->pClipList[iCurrentClipIndex]->uiBeginCutTime); 952cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 953cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mPreviewController->setPreviewFrameRenderingMode( 954cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->\ 955cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pClipList[iCurrentClipIndex]->xVSS.MediaRendering, 956cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->xVSS.outputVideoSize); 957cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = pContext->mPreviewController->renderPreviewFrame(previewSurface, 958c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi &frameStr, &currEditInfo); 959c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi 960c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi if (currEditInfo.overlaySettingsIndex != -1) { 961c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi char tmpOverlayFilename[100]; 962c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi char *extPos = NULL; 963c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi jstring tmpOverlayString; 964c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi int tmpRenderingMode = 0; 965c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi 966c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi strncpy (tmpOverlayFilename, 967c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi (const char*)pContext->pEditSettings->Effects[currEditInfo.overlaySettingsIndex].xVSS.pFramingFilePath, 99); 968c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi 969c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi //Change the name to png file 970c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi extPos = strstr(tmpOverlayFilename, ".rgb"); 971c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi if (extPos != NULL) { 972c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi *extPos = '\0'; 973c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi } else { 974c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi LOGE("ERROR the overlay file is incorrect"); 975c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi } 976c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi 977c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi strcat(tmpOverlayFilename, ".png"); 978c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi 979c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi tmpRenderingMode = pContext->pEditSettings->pClipList[iCurrentClipIndex]->xVSS.MediaRendering; 980c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi tmpOverlayString = pEnv->NewStringUTF(tmpOverlayFilename); 981c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi pEnv->CallVoidMethod(pContext->engine, 982c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi pContext->previewFrameEditInfoId, 983c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi tmpOverlayString, tmpRenderingMode); 984c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi 985c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi } 986c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi 987cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 988cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 989cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 990c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury free(frameStr.pBuffer); 991c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury if (pContext->pEditSettings->pClipList[iCurrentClipIndex]->FileType != 992c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury M4VIDEOEDITING_kFileType_ARGB8888) { 993c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(yuvPlane); 994cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 995c847b1a89df94dbff4c2f557f8c042ead5398c3fRajneesh Chowdury 996cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return tnTimeMs; 997cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 998cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 999cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int videoEditor_renderMediaItemPreviewFrame(JNIEnv* pEnv, 1000cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 1001cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject mSurface, 1002cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring filePath, 1003cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint frameWidth, 1004cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint frameHeight, 1005cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint surfaceWidth, 1006cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint surfaceHeight, 1007cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jlong fromMs) 1008cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 1009cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool needToBeLoaded = true; 1010cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 1011cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 timeMs = (M4OSA_UInt32)fromMs; 1012cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 framesizeYuv =0; 1013cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4VIFI_UInt8 *pixelArray = M4OSA_NULL; 1014cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VideoEditor_renderPreviewFrameStr frameStr; 1015cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context tnContext = M4OSA_NULL; 1016cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi const char* pMessage = NULL; 1017cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4VIFI_ImagePlane yuvPlane[3], rgbPlane; 1018cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1019cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = M4OSA_NULL; 1020cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the context. 1021cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = 1022cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded, 1023cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv, thiz); 1024cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1025cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was set. 1026cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1027cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext), 1028cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1029cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1030cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was set. 1031cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1032cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext->mPreviewController), 1033cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1034cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1035cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Validate the mSurface parameter. 1036cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalArgumentException(&needToBeLoaded, pEnv, 1037cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (NULL == mSurface), 1038cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "mSurface is null"); 1039cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jclass surfaceClass = pEnv->FindClass("android/view/Surface"); 1040cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1041cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == surfaceClass), 1042cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1043cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1044cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jfieldID surface_native = 1045cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->GetFieldID(surfaceClass, ANDROID_VIEW_SURFACE_JNI_ID, "I"); 1046cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1047cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == surface_native), 1048cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1049cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1050cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi Surface* const p = (Surface*)pEnv->GetIntField(mSurface, surface_native); 1051cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi sp<Surface> previewSurface = sp<Surface>(p); 1052cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1053cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1054cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi const char *pString = pEnv->GetStringUTFChars(filePath, NULL); 1055cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pString == M4OSA_NULL) { 1056cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pEnv != NULL) { 1057cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(pEnv, "java/lang/RuntimeException", "Input string null"); 1058cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1059cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1060cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", 1061cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_renderMediaItemPreviewFrame() timeMs=%d", timeMs); 1062cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* get thumbnail*/ 1063cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = ThumbnailOpen(&tnContext,(const M4OSA_Char*)pString, M4OSA_TRUE); 1064cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (result != M4NO_ERROR || tnContext == M4OSA_NULL) { 1065cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return timeMs; 1066cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1067cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1068cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi framesizeYuv = ((frameWidth)*(frameHeight)*1.5); 1069cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1070c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu pixelArray = (M4VIFI_UInt8 *)M4OSA_32bitAlignedMalloc(framesizeYuv, M4VS,\ 1071cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char*)"videoEditor pixelArray"); 1072cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pixelArray == M4OSA_NULL) { 1073cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", 1074cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_renderPreviewFrame() malloc error"); 1075cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ThumbnailClose(tnContext); 1076cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pMessage = videoEditJava_getErrorName(M4ERR_ALLOC); 1077cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(pEnv, "java/lang/RuntimeException", pMessage); 1078cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return timeMs; 1079cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1080cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1081cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = ThumbnailGetPixels16(tnContext, (M4OSA_Int16 *)pixelArray, 1082cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameWidth, 1083cb04a1f3a31c252a0e3fda5e7eaa16f3257c9397Chih-Chung Chang frameHeight, &timeMs, 0); 1084cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (result != M4NO_ERROR) { 1085c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pixelArray); 1086cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ThumbnailClose(tnContext); 1087cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return fromMs; 1088cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1089cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1090cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#ifdef DUMPTOFILESYSTEM 1091cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1092cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context fileContext; 1093cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* fileName = (M4OSA_Char*)"/mnt/sdcard/FirstRGB565.rgb"; 1094cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteOpen(&fileContext, (M4OSA_Void*) fileName,\ 1095cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_kFileWrite|M4OSA_kFileCreate); 1096cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteData(fileContext, (M4OSA_MemAddr8) pixelArray, 1097cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi framesizeRgb); 1098cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteClose(fileContext); 1099cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1100cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#endif 1101cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1102cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[0].pac_data = (M4VIFI_UInt8*)pixelArray; 1103cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[0].u_height = frameHeight; 1104cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[0].u_width = frameWidth; 1105cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[0].u_stride = yuvPlane[0].u_width; 1106cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[0].u_topleft = 0; 1107cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1108cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[1].u_height = frameHeight/2; 1109cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[1].u_width = frameWidth/2; 1110cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[1].u_stride = yuvPlane[1].u_width; 1111cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[1].u_topleft = 0; 1112cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[1].pac_data = yuvPlane[0].pac_data 1113cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi + yuvPlane[0].u_width*yuvPlane[0].u_height; 1114cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1115cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[2].u_height = frameHeight/2; 1116cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[2].u_width = frameWidth/2; 1117cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[2].u_stride = yuvPlane[2].u_width; 1118cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[2].u_topleft = 0; 1119cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi yuvPlane[2].pac_data = yuvPlane[0].pac_data 1120cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi + yuvPlane[0].u_width*yuvPlane[0].u_height + \ 1121cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (yuvPlane[0].u_width/2)*(yuvPlane[0].u_height/2); 1122cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#ifdef DUMPTOFILESYSTEM 1123cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1124cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context fileContext; 1125cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* fileName = (M4OSA_Char*)"/mnt/sdcard/ConvertedYuv.yuv"; 1126cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteOpen(&fileContext, (M4OSA_Void*) fileName,\ 1127cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_kFileWrite|M4OSA_kFileCreate); 1128cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteData(fileContext, (M4OSA_MemAddr8) yuvPlane[0].pac_data, 1129cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi framesizeYuv); 1130cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteClose(fileContext); 1131cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1132cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi#endif 1133cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1134cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* Fill up the render structure*/ 1135cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.pBuffer = (M4OSA_Void*)yuvPlane[0].pac_data; 1136cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.timeMs = timeMs; /* timestamp on storyboard*/ 1137cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.uiSurfaceWidth = frameWidth; 1138cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.uiSurfaceHeight = frameHeight; 1139cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.uiFrameWidth = frameWidth; 1140cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.uiFrameHeight = frameHeight; 1141cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.bApplyEffect = M4OSA_FALSE; 1142cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // clip begin cuttime and end cuttime set to 0 1143cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // as its only required when effect needs to be applied while rendering 1144cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.clipBeginCutTime = 0; 1145cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameStr.clipEndCutTime = 0; 1146cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1147cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* pContext->mPreviewController->setPreviewFrameRenderingMode(M4xVSS_kBlackBorders, 1148cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4VIDEOEDITING_VideoFrameSize)(M4VIDEOEDITING_kHD960+1));*/ 1149cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result 1150c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi = pContext->mPreviewController->renderPreviewFrame(previewSurface,&frameStr, NULL); 1151cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 1152cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 1153cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1154cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* free the pixelArray and yuvPlane[0].pac_data */ 1155c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(yuvPlane[0].pac_data); 1156cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1157cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ThumbnailClose(tnContext); 1158cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 115991ba3a0033f1ed7f26fc9e8cd9088479c7de134aSantosh Madhava if (pString != NULL) { 116091ba3a0033f1ed7f26fc9e8cd9088479c7de134aSantosh Madhava pEnv->ReleaseStringUTFChars(filePath, pString); 116191ba3a0033f1ed7f26fc9e8cd9088479c7de134aSantosh Madhava } 116291ba3a0033f1ed7f26fc9e8cd9088479c7de134aSantosh Madhava 1163cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return timeMs; 1164cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 1165cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1166cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargiint videoEditor_generateAudioRawFile( JNIEnv* pEnv, 1167cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 1168cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring infilePath, 1169cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring pcmfilePath) 1170cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 1171cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 1172cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool loaded = true; 1173cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = M4OSA_NULL; 1174cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1175cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1176cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1177cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi const char *pInputFile = pEnv->GetStringUTFChars(infilePath, NULL); 1178cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pInputFile == M4OSA_NULL) { 1179cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pEnv != NULL) { 1180cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(pEnv, "java/lang/RuntimeException", "Input string null"); 1181cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1182cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1183cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1184cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi const char *pStringOutPCMFilePath = pEnv->GetStringUTFChars(pcmfilePath, NULL); 1185cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pStringOutPCMFilePath == M4OSA_NULL) { 1186cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pEnv != NULL) { 1187cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(pEnv, "java/lang/RuntimeException", "Input string null"); 1188cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1189cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1190cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1191cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, 1192cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "VIDEO_EDITOR", "videoEditor_generateAudioRawFile infilePath %s", 1193cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pInputFile); 1194cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, 1195cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "VIDEO_EDITOR", "videoEditor_generateAudioRawFile pcmfilePath %s", 1196cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pStringOutPCMFilePath); 1197cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the context. 1198cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = (ManualEditContext*)videoEditClasses_getContext(&loaded, pEnv, thiz); 1199cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1200cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = videoEditor_generateAudio( pEnv, pContext, (M4OSA_Char*)pInputFile, 1201cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char*)pStringOutPCMFilePath); 1202cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 120391ba3a0033f1ed7f26fc9e8cd9088479c7de134aSantosh Madhava if (pInputFile != NULL) { 120491ba3a0033f1ed7f26fc9e8cd9088479c7de134aSantosh Madhava pEnv->ReleaseStringUTFChars(infilePath, pInputFile); 120591ba3a0033f1ed7f26fc9e8cd9088479c7de134aSantosh Madhava } 120691ba3a0033f1ed7f26fc9e8cd9088479c7de134aSantosh Madhava if (pStringOutPCMFilePath != NULL) { 120791ba3a0033f1ed7f26fc9e8cd9088479c7de134aSantosh Madhava pEnv->ReleaseStringUTFChars(pcmfilePath, pStringOutPCMFilePath); 120891ba3a0033f1ed7f26fc9e8cd9088479c7de134aSantosh Madhava } 120991ba3a0033f1ed7f26fc9e8cd9088479c7de134aSantosh Madhava 1210cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return result; 1211cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 1212cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1213cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargiM4OSA_ERR videoEditor_generateAudio(JNIEnv* pEnv,ManualEditContext* pContext, 1214cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* infilePath, 1215cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* pcmfilePath ) 1216cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 1217cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool needToBeLoaded = true; 1218cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 1219beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi M4MCS_Context mcsContext = M4OSA_NULL; 1220cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* pInputFile = M4OSA_NULL; 1221cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* pOutputFile = M4OSA_NULL; 1222cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* pTempPath = M4OSA_NULL; 1223cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4MCS_OutputParams* pOutputParams = M4OSA_NULL; 1224cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4MCS_EncodingParams* pEncodingParams = M4OSA_NULL; 1225cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Int32 pInputFileType = 0; 1226cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt8 threadProgress = 0; 1227cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* pTemp3gpFilePath = M4OSA_NULL; 1228cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1229cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_generateAudio()"); 1230cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1231cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalArgumentException(&needToBeLoaded, pEnv, 1232cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (NULL == pContext), 1233cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "ManualEditContext is null"); 1234cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1235cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "M4MCS_init()"); 1236cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1237c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu pOutputParams = (M4MCS_OutputParams *)M4OSA_32bitAlignedMalloc( 1238cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi sizeof(M4MCS_OutputParams),0x00, 1239cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char *)"M4MCS_OutputParams"); 1240cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1241cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pOutputParams), 1242cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1243beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi if (needToBeLoaded == false) { 1244beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi return M4ERR_ALLOC; 1245beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi } 1246cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1247c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu pEncodingParams = (M4MCS_EncodingParams *)M4OSA_32bitAlignedMalloc( 1248cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi sizeof(M4MCS_EncodingParams),0x00, 1249cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char *)"M4MCS_EncodingParams"); 1250cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1251cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pEncodingParams), 1252cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1253beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi if (needToBeLoaded == false) { 1254c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pEncodingParams); 1255beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi pEncodingParams = M4OSA_NULL; 1256beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi return M4ERR_ALLOC; 1257beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi } 1258beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi 1259cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Initialize the MCS library. 1260cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4MCS_init(&mcsContext, pContext->initParams.pFileReadPtr, 1261cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->initParams.pFileWritePtr); 1262cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv,\ 1263cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 1264cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1265cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == mcsContext), 1266cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1267beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi if(needToBeLoaded == false) { 1268c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pOutputParams); 1269beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi pOutputParams = M4OSA_NULL; 1270c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pEncodingParams); 1271beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi pEncodingParams = M4OSA_NULL; 1272beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi return result; 1273beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi } 1274beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi 1275cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // generate the path for temp 3gp output file 1276c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu pTemp3gpFilePath = (M4OSA_Char*) M4OSA_32bitAlignedMalloc ( 12777743fa64b11e9747d3ba8065a08a33ee9d90938fDheeraj Sharma (strlen((const char*)pContext->initParams.pTempPath) 12787743fa64b11e9747d3ba8065a08a33ee9d90938fDheeraj Sharma + strlen((const char*)TEMP_MCS_OUT_FILE_PATH)) + 1 /* for null termination */ , 0x0, 12797743fa64b11e9747d3ba8065a08a33ee9d90938fDheeraj Sharma (M4OSA_Char*)"Malloc for temp 3gp file"); 12807743fa64b11e9747d3ba8065a08a33ee9d90938fDheeraj Sharma if (pTemp3gpFilePath != M4OSA_NULL) 1281cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 12823feb41ff6f617768eb25c1b69c473d33f4f2f37bShyam Pallapothu memset((void *)pTemp3gpFilePath ,0, 12837743fa64b11e9747d3ba8065a08a33ee9d90938fDheeraj Sharma strlen((const char*)pContext->initParams.pTempPath) 12843feb41ff6f617768eb25c1b69c473d33f4f2f37bShyam Pallapothu + strlen((const char*)TEMP_MCS_OUT_FILE_PATH) + 1); 12857743fa64b11e9747d3ba8065a08a33ee9d90938fDheeraj Sharma strncat((char *)pTemp3gpFilePath, 12867743fa64b11e9747d3ba8065a08a33ee9d90938fDheeraj Sharma (const char *)pContext->initParams.pTempPath , 12877743fa64b11e9747d3ba8065a08a33ee9d90938fDheeraj Sharma (size_t) ((M4OSA_Char*)pContext->initParams.pTempPath)); 12887743fa64b11e9747d3ba8065a08a33ee9d90938fDheeraj Sharma strncat((char *)pTemp3gpFilePath , (const char *)TEMP_MCS_OUT_FILE_PATH, 12897743fa64b11e9747d3ba8065a08a33ee9d90938fDheeraj Sharma (size_t)strlen ((const char*)TEMP_MCS_OUT_FILE_PATH)); 1290cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1291beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi else { 1292beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi M4MCS_abort(mcsContext); 1293c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pOutputParams); 1294beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi pOutputParams = M4OSA_NULL; 1295c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pEncodingParams); 1296beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi pEncodingParams = M4OSA_NULL; 1297beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi return M4ERR_ALLOC; 1298beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi } 1299cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1300cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pInputFile = (M4OSA_Char *) infilePath; //pContext->mAudioSettings->pFile; 1301cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //Delete this file later 1302cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputFile = (M4OSA_Char *) pTemp3gpFilePath; 1303cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Temp folder path for VSS use = ProjectPath 1304cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pTempPath = (M4OSA_Char *) pContext->initParams.pTempPath; 1305cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pInputFileType = (M4VIDEOEDITING_FileType)pContext->mAudioSettings->fileType; 1306cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1307cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "TEMP_MCS_OUT_FILE_PATH len %d", 13087743fa64b11e9747d3ba8065a08a33ee9d90938fDheeraj Sharma strlen ((const char*)TEMP_MCS_OUT_FILE_PATH)); 1309cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "pTemp3gpFilePath %s", 1310cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputFile); 1311cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1312cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "M4MCS_open()"); 1313cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1314cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4MCS_open(mcsContext, pInputFile, 1315cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4VIDEOEDITING_FileType)pInputFileType, 1316cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputFile, pTempPath); 1317cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 1318cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 1319beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi if(needToBeLoaded == false) { 1320c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pTemp3gpFilePath); 1321beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi pTemp3gpFilePath = M4OSA_NULL; 1322beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi M4MCS_abort(mcsContext); 1323c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pOutputParams); 1324beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi pOutputParams = M4OSA_NULL; 1325c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pEncodingParams); 1326beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi pEncodingParams = M4OSA_NULL; 1327beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi return result; 1328beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi } 1329cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1330cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputParams->OutputFileType 1331cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = (M4VIDEOEDITING_FileType)M4VIDEOEDITING_kFileType_3GPP; 1332cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the video format. 1333cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputParams->OutputVideoFormat = 1334cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4VIDEOEDITING_VideoFormat)M4VIDEOEDITING_kNoneVideo;//M4VIDEOEDITING_kNoneVideo; 13353ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury pOutputParams->outputVideoProfile = 1; 13363ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury pOutputParams->outputVideoLevel = 1; 1337cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the frame size. 1338cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputParams->OutputVideoFrameSize 1339cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = (M4VIDEOEDITING_VideoFrameSize)M4VIDEOEDITING_kQCIF; 1340cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the frame rate. 1341cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputParams->OutputVideoFrameRate 1342cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = (M4VIDEOEDITING_VideoFramerate)M4VIDEOEDITING_k5_FPS; 1343cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1344cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the audio format. 1345cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputParams->OutputAudioFormat 1346cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = (M4VIDEOEDITING_AudioFormat)M4VIDEOEDITING_kAAC; 1347cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the audio sampling frequency. 1348cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputParams->OutputAudioSamplingFrequency = 1349cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4VIDEOEDITING_AudioSamplingFrequency)M4VIDEOEDITING_k32000_ASF; 1350cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the audio mono. 1351cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputParams->bAudioMono = false; 1352cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the pcm file; null for now. 1353cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputParams->pOutputPCMfile = (M4OSA_Char *)pcmfilePath; 1354cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //(M4OSA_Char *)"/sdcard/Output/AudioPcm.pcm"; 1355cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the audio sampling frequency. 1356cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputParams->MediaRendering = (M4MCS_MediaRendering)M4MCS_kCropping; 1357cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // new params after integrating MCS 2.0 1358cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the number of audio effects; 0 for now. 1359cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputParams->nbEffects = 0; 1360cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the audio effect; null for now. 1361cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputParams->pEffects = NULL; 1362cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the audio effect; null for now. 1363cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputParams->bDiscardExif = M4OSA_FALSE; 1364cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the audio effect; null for now. 1365cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOutputParams->bAdjustOrientation = M4OSA_FALSE; 1366cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1367cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "M4MCS_setOutputParams()"); 1368cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4MCS_setOutputParams(mcsContext, pOutputParams); 1369cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 1370cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 1371beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi if (needToBeLoaded == false) { 1372c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pTemp3gpFilePath); 1373beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi pTemp3gpFilePath = M4OSA_NULL; 1374beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi M4MCS_abort(mcsContext); 1375c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pOutputParams); 1376beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi pOutputParams = M4OSA_NULL; 1377c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pEncodingParams); 1378beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi pEncodingParams = M4OSA_NULL; 1379beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi return result; 1380beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi } 1381cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the video bitrate. 1382cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEncodingParams->OutputVideoBitrate = 1383cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4VIDEOEDITING_Bitrate)M4VIDEOEDITING_kUndefinedBitrate; 1384cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the audio bitrate. 1385cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEncodingParams->OutputAudioBitrate 1386cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = (M4VIDEOEDITING_Bitrate)M4VIDEOEDITING_k128_KBPS; 1387cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the end cut time in milliseconds. 1388cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEncodingParams->BeginCutTime = 0; 1389cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the end cut time in milliseconds. 1390cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEncodingParams->EndCutTime = 0; 1391cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the output file size in bytes. 1392cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEncodingParams->OutputFileSize = 0; 1393cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set video time scale. 1394cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEncodingParams->OutputVideoTimescale = 0; 1395cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1396cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", 1397cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "M4MCS_setEncodingParams()"); 1398cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4MCS_setEncodingParams(mcsContext, pEncodingParams); 1399cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 1400cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 1401beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi if (needToBeLoaded == false) { 1402c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pTemp3gpFilePath); 1403beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi pTemp3gpFilePath = M4OSA_NULL; 1404beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi M4MCS_abort(mcsContext); 1405c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pOutputParams); 1406beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi pOutputParams = M4OSA_NULL; 1407c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pEncodingParams); 1408beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi pEncodingParams = M4OSA_NULL; 1409beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi return result; 1410beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi } 1411cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1412cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", 1413cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "M4MCS_checkParamsAndStart()"); 1414cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4MCS_checkParamsAndStart(mcsContext); 1415cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 1416cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 1417beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi if (needToBeLoaded == false) { 1418c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pTemp3gpFilePath); 1419beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi pTemp3gpFilePath = M4OSA_NULL; 1420beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi M4MCS_abort(mcsContext); 1421c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pOutputParams); 1422beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi pOutputParams = M4OSA_NULL; 1423c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pEncodingParams); 1424beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi pEncodingParams = M4OSA_NULL; 1425beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi return result; 1426beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi } 1427cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1428cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "M4MCS_step()"); 1429cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1430cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*+ PROGRESS CB */ 1431cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt8 curProgress = 0; 1432cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int lastProgress = 0; 1433cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1434cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("LVME_generateAudio Current progress is =%d", curProgress); 1435cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->CallVoidMethod(pContext->engine, 1436cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->onProgressUpdateMethodId, 1/*task status*/, 1437cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi curProgress/*progress*/); 1438cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi do { 1439cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4MCS_step(mcsContext, &curProgress); 1440cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1441cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (result != M4NO_ERROR) { 1442cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("LVME_generateAudio M4MCS_step returned 0x%x",result); 1443cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1444cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (result == M4MCS_WAR_TRANSCODING_DONE) { 1445cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("LVME_generateAudio MCS process ended"); 1446cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1447cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Send a progress notification. 1448cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi curProgress = 100; 1449cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->CallVoidMethod(pContext->engine, 1450cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->onProgressUpdateMethodId, 1/*task status*/, 1451cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi curProgress); 1452cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("LVME_generateAudio Current progress is =%d", curProgress); 1453cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1454cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } else { 1455cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Send a progress notification if needed 1456cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (curProgress != lastProgress) { 1457cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi lastProgress = curProgress; 1458cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->CallVoidMethod(pContext->engine, 1459cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->onProgressUpdateMethodId, 0/*task status*/, 1460cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi curProgress/*progress*/); 1461cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("LVME_generateAudio Current progress is =%d",curProgress); 1462cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1463cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1464cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } while (result == M4NO_ERROR); 1465cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /*- PROGRESS CB */ 1466cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1467cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 1468cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4MCS_WAR_TRANSCODING_DONE != result), result); 1469beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi if (needToBeLoaded == false) { 1470c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pTemp3gpFilePath); 1471beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi pTemp3gpFilePath = M4OSA_NULL; 1472beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi M4MCS_abort(mcsContext); 1473c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pOutputParams); 1474beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi pOutputParams = M4OSA_NULL; 1475c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pEncodingParams); 1476beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi pEncodingParams = M4OSA_NULL; 1477beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi return result; 1478beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi } 1479cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1480cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "M4MCS_abort()"); 1481cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4MCS_abort(mcsContext); 1482cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 1483cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 1484cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1485cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //pContext->mAudioSettings->pFile = pOutputParams->pOutputPCMfile; 14867743fa64b11e9747d3ba8065a08a33ee9d90938fDheeraj Sharma remove((const char *) pTemp3gpFilePath); 1487cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_generateAudio() EXIT "); 1488cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1489beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi if (pTemp3gpFilePath != M4OSA_NULL) { 1490c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pTemp3gpFilePath); 1491beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi } 1492beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi if (pOutputParams != M4OSA_NULL) { 1493c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pOutputParams); 1494beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi } 1495beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi if(pEncodingParams != M4OSA_NULL) { 1496c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pEncodingParams); 1497beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi } 1498cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return result; 1499cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 1500cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1501cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int removeAlphafromRGB8888 ( 1502cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* pFramingFilePath, 1503cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4xVSS_FramingStruct *pFramingCtx) 1504cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 1505cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 frameSize_argb = (pFramingCtx->width * pFramingCtx->height * 4); // aRGB data 1506cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context lImageFileFp = M4OSA_NULL; 1507cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 1508cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1509cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("removeAlphafromRGB8888: width %d", pFramingCtx->width); 1510cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1511c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu M4OSA_UInt8 *pTmpData = (M4OSA_UInt8*) M4OSA_32bitAlignedMalloc(frameSize_argb, M4VS, (M4OSA_Char*)"Image argb data"); 1512cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pTmpData == M4OSA_NULL) { 1513cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGE("Failed to allocate memory for Image clip"); 1514cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return M4ERR_ALLOC; 1515cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1516cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1517cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /** Read the argb data from the passed file. */ 1518cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR lerr = M4OSA_fileReadOpen(&lImageFileFp, (M4OSA_Void *) pFramingFilePath, M4OSA_kFileRead); 1519cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1520cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1521cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ((lerr != M4NO_ERROR) || (lImageFileFp == M4OSA_NULL)) 1522cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1523cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGE("removeAlphafromRGB8888: Can not open the file "); 1524c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pTmpData); 1525cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return M4ERR_FILE_NOT_FOUND; 1526cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1527cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1528cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1529cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi lerr = M4OSA_fileReadData(lImageFileFp, (M4OSA_MemAddr8)pTmpData, &frameSize_argb); 1530cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (lerr != M4NO_ERROR) 1531cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1532cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGE("removeAlphafromRGB8888: can not read the data "); 1533cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileReadClose(lImageFileFp); 1534c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pTmpData); 1535cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return lerr; 1536cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1537cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileReadClose(lImageFileFp); 1538cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1539cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 frameSize = (pFramingCtx->width * pFramingCtx->height * 3); //Size of RGB 888 data. 1540cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1541c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu pFramingCtx->FramingRgb = (M4VIFI_ImagePlane*)M4OSA_32bitAlignedMalloc( 1542cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi sizeof(M4VIFI_ImagePlane), M4VS, (M4OSA_Char*)"Image clip RGB888 data"); 1543c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu pFramingCtx->FramingRgb->pac_data = (M4VIFI_UInt8*)M4OSA_32bitAlignedMalloc( 1544cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi frameSize, M4VS, (M4OSA_Char*)"Image clip RGB888 data"); 1545cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1546cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pFramingCtx->FramingRgb == M4OSA_NULL) 1547cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1548cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGE("Failed to allocate memory for Image clip"); 1549c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pTmpData); 1550cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return M4ERR_ALLOC; 1551cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1552cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1553cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /** Remove the alpha channel */ 1554581cad2221cb367e9e3ef6991c565cd37ced994fJames Dong for (size_t i = 0, j = 0; i < frameSize_argb; i++) { 1555cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ((i % 4) == 0) continue; 1556cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pFramingCtx->FramingRgb->pac_data[j] = pTmpData[i]; 1557cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi j++; 1558cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1559c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pTmpData); 1560cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return M4NO_ERROR; 1561cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 1562cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1563cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void 1564cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_populateSettings( 1565cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 1566cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 1567cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject settings, 1568cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject object, 1569cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject audioSettingObject) 1570cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 1571cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", 1572cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_populateSettings()"); 1573cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1574cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool needToBeLoaded = true; 1575cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = M4OSA_NULL; 1576cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 157791ba3a0033f1ed7f26fc9e8cd9088479c7de134aSantosh Madhava jstring strPath = M4OSA_NULL; 157891ba3a0033f1ed7f26fc9e8cd9088479c7de134aSantosh Madhava jstring strPCMPath = M4OSA_NULL; 1579cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobjectArray propertiesClipsArray = M4OSA_NULL; 1580cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject properties = M4OSA_NULL; 1581cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint* bitmapArray = M4OSA_NULL; 1582cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobjectArray effectSettingsArray = M4OSA_NULL; 1583cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject effectSettings = M4OSA_NULL; 1584cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jintArray pixelArray = M4OSA_NULL; 1585cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int width = 0; 1586cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int height = 0; 1587cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int nbOverlays = 0; 1588cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int i,j = 0; 1589cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int *pOverlayIndex = M4OSA_NULL; 15909ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava M4OSA_Char* pTempChar = M4OSA_NULL; 1591cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1592cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Add a code marker (the condition must always be true). 1593cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ADD_CODE_MARKER_FUN(NULL != pEnv) 1594cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1595cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Validate the settings parameter. 1596cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalArgumentException(&needToBeLoaded, pEnv, 1597cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (NULL == settings), 1598cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "settings is null"); 1599cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the context. 1600cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = 1601cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded, pEnv, thiz); 1602cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1603cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was set. 1604cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1605cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext), 1606cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1607cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was set. 1608cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1609cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext->mPreviewController), 1610cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1611cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jclass mPreviewClipPropClazz = pEnv->FindClass(PREVIEW_PROPERTIES_CLASS_NAME); 1612cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1613cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == mPreviewClipPropClazz), 1614cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1615cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1616cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jfieldID fid = pEnv->GetFieldID(mPreviewClipPropClazz,"clipProperties", 1617cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "[L"PROPERTIES_CLASS_NAME";" ); 1618cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1619cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == fid), 1620cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1621cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1622cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi propertiesClipsArray = (jobjectArray)pEnv->GetObjectField(object, fid); 1623cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1624cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == propertiesClipsArray), 1625cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1626cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1627cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jclass engineClass = pEnv->FindClass(MANUAL_EDIT_ENGINE_CLASS_NAME); 1628cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1629cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == engineClass), 1630cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1631cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1632cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->onPreviewProgressUpdateMethodId = pEnv->GetMethodID(engineClass, 1633c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi "onPreviewProgressUpdate", "(IZZLjava/lang/String;I)V"); 1634cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the context is valid (required because the context is dereferenced). 1635cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (needToBeLoaded) { 1636cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that we are in a correct state. 1637cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1638cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (pContext->state != ManualEditState_INITIALIZED), 1639cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "settings already loaded"); 1640beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi if (needToBeLoaded) { 1641beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi // Retrieve the edit settings. 1642beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi if (pContext->pEditSettings != M4OSA_NULL) { 1643beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi videoEditClasses_freeEditSettings(&pContext->pEditSettings); 1644beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi pContext->pEditSettings = M4OSA_NULL; 1645beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi } 1646beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi videoEditClasses_getEditSettings(&needToBeLoaded, pEnv, 1647beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi settings, &pContext->pEditSettings,false); 1648cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1649cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1650beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi 1651beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi if (needToBeLoaded == false) { 1652beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi j = 0; 1653beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi while (j < pContext->pEditSettings->nbEffects) 1654beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi { 1655beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi if (pContext->pEditSettings->Effects[j].xVSS.pFramingFilePath != M4OSA_NULL) { 1656beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi if (pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer != M4OSA_NULL) { 1657c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pContext->pEditSettings->\ 1658beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi Effects[j].xVSS.pFramingBuffer); 1659beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer = M4OSA_NULL; 1660beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi } 1661beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi } 1662beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi j++; 1663beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi } 1664beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi return; 1665beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi } 1666beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi 1667cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_0("videoEditorC_getEditSettings done"); 1668cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1669c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi pContext->previewFrameEditInfoId = pEnv->GetMethodID(engineClass, 1670c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi "previewFrameEditInfo", "(Ljava/lang/String;I)V"); 1671c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi 1672cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ( pContext->pEditSettings != NULL ) 1673cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1674cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the edit settings could be retrieved. 1675cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jclass mEditClazz = pEnv->FindClass(EDIT_SETTINGS_CLASS_NAME); 1676cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if(mEditClazz == M4OSA_NULL) 1677cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1678cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_0("cannot find object field for mEditClazz"); 1679beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi goto videoEditor_populateSettings_cleanup; 1680cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1681cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jclass mEffectsClazz = pEnv->FindClass(EFFECT_SETTINGS_CLASS_NAME); 1682cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if(mEffectsClazz == M4OSA_NULL) 1683cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1684cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_0("cannot find object field for mEffectsClazz"); 1685beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi goto videoEditor_populateSettings_cleanup; 1686cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1687cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(mEditClazz,"effectSettingsArray", "[L"EFFECT_SETTINGS_CLASS_NAME";" ); 1688cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if(fid == M4OSA_NULL) 1689cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1690cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_0("cannot find field for effectSettingsArray Array"); 1691beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi goto videoEditor_populateSettings_cleanup; 1692cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1693cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi effectSettingsArray = (jobjectArray)pEnv->GetObjectField(settings, fid); 1694cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if(effectSettingsArray == M4OSA_NULL) 1695cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1696cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_0("cannot find object field for effectSettingsArray"); 1697beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi goto videoEditor_populateSettings_cleanup; 1698cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1699beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi 1700cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //int overlayIndex[pContext->pEditSettings->nbEffects]; 1701beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi if (pContext->pEditSettings->nbEffects > 0) 1702cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1703cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOverlayIndex 1704c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu = (int*) M4OSA_32bitAlignedMalloc(pContext->pEditSettings->nbEffects * sizeof(int), 0, 1705cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char*)"pOverlayIndex"); 1706beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi if (pOverlayIndex == M4OSA_NULL) { 1707beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 1708beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi M4OSA_TRUE, M4ERR_ALLOC); 1709beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi goto videoEditor_populateSettings_cleanup; 1710beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi } 1711cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1712cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1713beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi i = 0; 1714beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi j = 0; 1715cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("no of effects = %d",pContext->pEditSettings->nbEffects); 1716cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi while (j < pContext->pEditSettings->nbEffects) 1717cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1718cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext->pEditSettings->Effects[j].xVSS.pFramingFilePath != M4OSA_NULL) 1719cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1720cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOverlayIndex[nbOverlays] = j; 1721beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi 1722cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4xVSS_FramingStruct *aFramingCtx = M4OSA_NULL; 1723cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx 1724c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu = (M4xVSS_FramingStruct*)M4OSA_32bitAlignedMalloc(sizeof(M4xVSS_FramingStruct), M4VS, 1725cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char*)"M4xVSS_internalDecodeGIF: Context of the framing effect"); 1726cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (aFramingCtx == M4OSA_NULL) 1727cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 1728cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_0("Allocation error in videoEditor_populateSettings"); 1729beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 1730beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi M4OSA_TRUE, M4ERR_ALLOC); 1731beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi goto videoEditor_populateSettings_cleanup; 1732cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1733beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi 1734cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->pCurrent = M4OSA_NULL; /* Only used by the first element of the chain */ 1735cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->previousClipTime = -1; 1736cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->FramingYuv = M4OSA_NULL; 1737cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->FramingRgb = M4OSA_NULL; 1738cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->topleft_x 1739cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = pContext->pEditSettings->Effects[j].xVSS.topleft_x; 1740cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->topleft_y 1741cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = pContext->pEditSettings->Effects[j].xVSS.topleft_y; 1742cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1743cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1744cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "OF u_width %d", 1745cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_width); 1746cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "OF u_height() %d", 1747cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_height); 1748cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "OF rgbType() %d", 1749cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->Effects[j].xVSS.rgbType); 1750cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1751cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->width = pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_width; 1752cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->height = pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_height; 1753cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1754cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4xVSS_internalConvertARGB888toYUV420_FrammingEffect(pContext->engineContext, 1755cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi &(pContext->pEditSettings->Effects[j]),aFramingCtx, 1756cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->Effects[j].xVSS.framingScaledSize); 1757c08f85a6484ee5da7062a5eac0f19912bd7e2513Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 1758c08f85a6484ee5da7062a5eac0f19912bd7e2513Dharmaray Kundargi (M4NO_ERROR != result), result); 1759c08f85a6484ee5da7062a5eac0f19912bd7e2513Dharmaray Kundargi if (needToBeLoaded == false) { 1760cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("M4xVSS_internalConvertARGB888toYUV420_FrammingEffect returned 0x%x", result); 1761c08f85a6484ee5da7062a5eac0f19912bd7e2513Dharmaray Kundargi if (aFramingCtx != M4OSA_NULL) { 1762c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(aFramingCtx); 1763c08f85a6484ee5da7062a5eac0f19912bd7e2513Dharmaray Kundargi aFramingCtx = M4OSA_NULL; 1764c08f85a6484ee5da7062a5eac0f19912bd7e2513Dharmaray Kundargi } 1765beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi goto videoEditor_populateSettings_cleanup; 1766cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1767cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1768cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //framing buffers are resized to fit the output video resolution. 1769cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_width = 1770cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->FramingRgb->u_width; 1771cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_height = 1772cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->FramingRgb->u_height; 1773cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1774cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "A framing Context aFramingCtx->width = %d", 1775cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->FramingRgb->u_width); 1776cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1777cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "A framing Context aFramingCtx->height = %d", 1778cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->FramingRgb->u_height); 1779cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1780cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1781cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi width = pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_width; 1782cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi height = pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_height; 1783cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1784c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi //RGB 565 1785beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_stride = width * 2; 1786cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1787c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi //for RGB565 1788cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_topleft = 0; 1789cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->pac_data = 1790c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu (M4VIFI_UInt8 *)M4OSA_32bitAlignedMalloc(width*height*2, 1791c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi 0x00,(M4OSA_Char *)"pac_data buffer"); 1792cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1793beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi if (pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->pac_data == M4OSA_NULL) { 1794beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi M4OSA_TRACE1_0("Failed to allocate memory for framing buffer"); 1795beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 1796beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi M4OSA_TRUE, M4ERR_ALLOC); 1797beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi goto videoEditor_populateSettings_cleanup; 1798beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi } 1799beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi 18003feb41ff6f617768eb25c1b69c473d33f4f2f37bShyam Pallapothu memcpy((void *)&pContext->pEditSettings->\ 1801cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi Effects[j].xVSS.pFramingBuffer->\ 18023feb41ff6f617768eb25c1b69c473d33f4f2f37bShyam Pallapothu pac_data[0],(void *)&aFramingCtx->FramingRgb->pac_data[0],(width*height*2)); 1803cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1804c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi //As of now rgb type is 565 1805cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->Effects[j].xVSS.rgbType = 1806c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi (M4VSS3GPP_RGBType) M4VSS3GPP_kRGB565; 1807cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1808cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (aFramingCtx->FramingYuv != M4OSA_NULL ) 1809cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 18107c8f25f5b81ed2c6520174ead6d0fdf96a313945Santosh Madhava if (aFramingCtx->FramingYuv[0].pac_data != M4OSA_NULL) { 1811c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(aFramingCtx->FramingYuv[0].pac_data); 18127c8f25f5b81ed2c6520174ead6d0fdf96a313945Santosh Madhava aFramingCtx->FramingYuv[0].pac_data = M4OSA_NULL; 1813cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 18147c8f25f5b81ed2c6520174ead6d0fdf96a313945Santosh Madhava if (aFramingCtx->FramingYuv[1].pac_data != M4OSA_NULL) { 1815c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(aFramingCtx->FramingYuv[1].pac_data); 18167c8f25f5b81ed2c6520174ead6d0fdf96a313945Santosh Madhava aFramingCtx->FramingYuv[1].pac_data = M4OSA_NULL; 18177c8f25f5b81ed2c6520174ead6d0fdf96a313945Santosh Madhava } 18187c8f25f5b81ed2c6520174ead6d0fdf96a313945Santosh Madhava if (aFramingCtx->FramingYuv[2].pac_data != M4OSA_NULL) { 1819c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(aFramingCtx->FramingYuv[2].pac_data); 18207c8f25f5b81ed2c6520174ead6d0fdf96a313945Santosh Madhava aFramingCtx->FramingYuv[2].pac_data = M4OSA_NULL; 18217c8f25f5b81ed2c6520174ead6d0fdf96a313945Santosh Madhava } 18227c8f25f5b81ed2c6520174ead6d0fdf96a313945Santosh Madhava 1823c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(aFramingCtx->FramingYuv); 1824cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->FramingYuv = M4OSA_NULL; 1825cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1826cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (aFramingCtx->FramingRgb->pac_data != M4OSA_NULL) { 1827c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(aFramingCtx->FramingRgb->pac_data); 1828cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->FramingRgb->pac_data = M4OSA_NULL; 1829cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1830cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (aFramingCtx->FramingRgb != M4OSA_NULL) { 1831c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(aFramingCtx->FramingRgb); 1832cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx->FramingRgb = M4OSA_NULL; 1833cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1834cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (aFramingCtx != M4OSA_NULL) { 1835c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(aFramingCtx); 1836cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi aFramingCtx = M4OSA_NULL; 1837cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1838beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi nbOverlays++; 1839cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1840cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi j++; 1841cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1842cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1843cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the edit settings could be retrieved. 1844cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("total clips are = %d",pContext->pEditSettings->uiClipNumber); 1845cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi for (i = 0; i < pContext->pEditSettings->uiClipNumber; i++) { 1846cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("clip no = %d",i); 1847cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi properties = pEnv->GetObjectArrayElement(propertiesClipsArray, i); 1848cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1849cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == properties), 1850cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1851beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi if (needToBeLoaded) { 1852beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi getClipSetting(pEnv,properties, pContext->pEditSettings->pClipList[i]); 1853beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi } else { 1854beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi goto videoEditor_populateSettings_cleanup; 1855beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi } 1856cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1857cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1858cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (needToBeLoaded) { 1859cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Log the edit settings. 1860cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_EDIT_SETTINGS(pContext->pEditSettings); 1861cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 1862cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 186371771b3b1bbcafe84e7bd14941b98a1b1d6c8a60Santosh Madhava /* free previous allocations , if any */ 186471771b3b1bbcafe84e7bd14941b98a1b1d6c8a60Santosh Madhava if (pContext->mAudioSettings != M4OSA_NULL) { 186571771b3b1bbcafe84e7bd14941b98a1b1d6c8a60Santosh Madhava if (pContext->mAudioSettings->pFile != NULL) { 1866c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pContext->mAudioSettings->pFile); 186771771b3b1bbcafe84e7bd14941b98a1b1d6c8a60Santosh Madhava pContext->mAudioSettings->pFile = M4OSA_NULL; 186871771b3b1bbcafe84e7bd14941b98a1b1d6c8a60Santosh Madhava } 186971771b3b1bbcafe84e7bd14941b98a1b1d6c8a60Santosh Madhava if (pContext->mAudioSettings->pPCMFilePath != NULL) { 1870c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pContext->mAudioSettings->pPCMFilePath); 187171771b3b1bbcafe84e7bd14941b98a1b1d6c8a60Santosh Madhava pContext->mAudioSettings->pPCMFilePath = M4OSA_NULL; 187271771b3b1bbcafe84e7bd14941b98a1b1d6c8a60Santosh Madhava } 187371771b3b1bbcafe84e7bd14941b98a1b1d6c8a60Santosh Madhava } 1874cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1875cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (audioSettingObject != M4OSA_NULL) { 1876cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jclass audioSettingClazz = pEnv->FindClass(AUDIO_SETTINGS_CLASS_NAME); 1877cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1878cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == audioSettingClazz), 1879cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1880cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1881cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 1882cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext->mAudioSettings), 1883cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 1884cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1885beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi if (needToBeLoaded == false) { 1886beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi goto videoEditor_populateSettings_cleanup; 1887beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi } 1888beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi 1889cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"bRemoveOriginal","Z"); 18903ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury pContext->mAudioSettings->bRemoveOriginal = 18913ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury pEnv->GetBooleanField(audioSettingObject,fid); 1892cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("bRemoveOriginal = %d",pContext->mAudioSettings->bRemoveOriginal); 1893cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1894cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"channels","I"); 1895cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiNbChannels = pEnv->GetIntField(audioSettingObject,fid); 1896cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("uiNbChannels = %d",pContext->mAudioSettings->uiNbChannels); 1897cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1898cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"Fs","I"); 1899cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiSamplingFrequency = pEnv->GetIntField(audioSettingObject,fid); 1900cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("uiSamplingFrequency = %d",pContext->mAudioSettings->uiSamplingFrequency); 1901cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1902cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"ExtendedFs","I"); 1903cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiExtendedSamplingFrequency = 1904cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->GetIntField(audioSettingObject,fid); 1905cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("uiExtendedSamplingFrequency = %d", 1906cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiExtendedSamplingFrequency); 1907cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1908cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"startMs","J"); 1909cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiAddCts 1910176dde85a0ba838c1aed4148473743d964edbaecChih-Chung Chang = pEnv->GetLongField(audioSettingObject,fid); 1911cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("uiAddCts = %d",pContext->mAudioSettings->uiAddCts); 1912cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1913cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"volume","I"); 1914cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiAddVolume 1915cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = pEnv->GetIntField(audioSettingObject,fid); 1916cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("uiAddVolume = %d",pContext->mAudioSettings->uiAddVolume); 1917cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1918cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"loop","Z"); 1919cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->bLoop 1920176dde85a0ba838c1aed4148473743d964edbaecChih-Chung Chang = pEnv->GetBooleanField(audioSettingObject,fid); 1921cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("bLoop = %d",pContext->mAudioSettings->bLoop); 1922cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1923cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"beginCutTime","J"); 1924cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->beginCutMs 1925176dde85a0ba838c1aed4148473743d964edbaecChih-Chung Chang = pEnv->GetLongField(audioSettingObject,fid); 1926cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("begin cut time = %d",pContext->mAudioSettings->beginCutMs); 1927cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1928cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"endCutTime","J"); 1929cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->endCutMs 1930176dde85a0ba838c1aed4148473743d964edbaecChih-Chung Chang = pEnv->GetLongField(audioSettingObject,fid); 1931cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("end cut time = %d",pContext->mAudioSettings->endCutMs); 1932cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 1933cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"fileType","I"); 1934cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->fileType 1935cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = pEnv->GetIntField(audioSettingObject,fid); 1936cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("fileType = %d",pContext->mAudioSettings->fileType); 19379ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava 1938cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"pFile","Ljava/lang/String;"); 193991ba3a0033f1ed7f26fc9e8cd9088479c7de134aSantosh Madhava strPath = (jstring)pEnv->GetObjectField(audioSettingObject,fid); 19409ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava pTempChar = (M4OSA_Char*)pEnv->GetStringUTFChars(strPath, M4OSA_NULL); 19419ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava if (pTempChar != NULL) { 1942c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu pContext->mAudioSettings->pFile = (M4OSA_Char*) M4OSA_32bitAlignedMalloc( 19439ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava (M4OSA_UInt32)(strlen((const char*)pTempChar))+1 /* +1 for NULL termination */, 0, 19449ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava (M4OSA_Char*)"strPath allocation " ); 19459ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava if (pContext->mAudioSettings->pFile != M4OSA_NULL) { 19463feb41ff6f617768eb25c1b69c473d33f4f2f37bShyam Pallapothu memcpy((void *)pContext->mAudioSettings->pFile , 19473feb41ff6f617768eb25c1b69c473d33f4f2f37bShyam Pallapothu (void *)pTempChar , strlen((const char*)pTempChar)); 19489ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava ((M4OSA_Int8 *)(pContext->mAudioSettings->pFile))[strlen((const char*)pTempChar)] = '\0'; 19499ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava pEnv->ReleaseStringUTFChars(strPath,(const char *)pTempChar); 19509ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava } else { 19519ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava pEnv->ReleaseStringUTFChars(strPath,(const char *)pTempChar); 19529ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava VIDEOEDIT_LOG_ERROR(ANDROID_LOG_INFO, "VIDEO_EDITOR", 19539ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava "regenerateAudio() Malloc failed for pContext->mAudioSettings->pFile "); 19549ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 19559ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava M4OSA_TRUE, M4ERR_ALLOC); 19569ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava goto videoEditor_populateSettings_cleanup; 19579ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava } 19589ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava } 1959cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("file name = %s",pContext->mAudioSettings->pFile); 1960cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEOEDITOR", "regenerateAudio() file name = %s",\ 1961cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->pFile); 1962beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi 1963cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"pcmFilePath","Ljava/lang/String;"); 196491ba3a0033f1ed7f26fc9e8cd9088479c7de134aSantosh Madhava strPCMPath = (jstring)pEnv->GetObjectField(audioSettingObject,fid); 19659ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava pTempChar = (M4OSA_Char*)pEnv->GetStringUTFChars(strPCMPath, M4OSA_NULL); 19669ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava if (pTempChar != NULL) { 1967c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu pContext->mAudioSettings->pPCMFilePath = (M4OSA_Char*) M4OSA_32bitAlignedMalloc( 19689ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava (M4OSA_UInt32)(strlen((const char*)pTempChar))+1 /* +1 for NULL termination */, 0, 19699ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava (M4OSA_Char*)"strPCMPath allocation " ); 19709ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava if (pContext->mAudioSettings->pPCMFilePath != M4OSA_NULL) { 19713feb41ff6f617768eb25c1b69c473d33f4f2f37bShyam Pallapothu memcpy((void *)pContext->mAudioSettings->pPCMFilePath , 19723feb41ff6f617768eb25c1b69c473d33f4f2f37bShyam Pallapothu (void *)pTempChar , strlen((const char*)pTempChar)); 19739ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava ((M4OSA_Int8 *)(pContext->mAudioSettings->pPCMFilePath))[strlen((const char*)pTempChar)] = '\0'; 19749ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava pEnv->ReleaseStringUTFChars(strPCMPath,(const char *)pTempChar); 19759ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava } else { 19769ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava pEnv->ReleaseStringUTFChars(strPCMPath,(const char *)pTempChar); 19779ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava VIDEOEDIT_LOG_ERROR(ANDROID_LOG_INFO, "VIDEO_EDITOR", 19789ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava "regenerateAudio() Malloc failed for pContext->mAudioSettings->pPCMFilePath "); 19799ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 19809ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava M4OSA_TRUE, M4ERR_ALLOC); 19819ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava goto videoEditor_populateSettings_cleanup; 19829ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava } 19839ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava } 1984cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEOEDITOR", "pPCMFilePath -- %s ",\ 1985cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->pPCMFilePath); 1986beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi 1987cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(engineClass,"mRegenerateAudio","Z"); 1988cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool regenerateAudio = pEnv->GetBooleanField(thiz,fid); 1989beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi 1990cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEOEDITOR", "regenerateAudio -- %d ",\ 1991cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi regenerateAudio); 1992beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi 1993cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (regenerateAudio) { 1994cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_0("Calling Generate Audio now"); 1995cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = videoEditor_generateAudio(pEnv, 1996cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext, 1997cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char*)pContext->mAudioSettings->pFile, 1998cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char*)pContext->mAudioSettings->pPCMFilePath); 1999beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi 2000beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 2001beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi (M4NO_ERROR != result), result); 2002beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi if (needToBeLoaded == false) { 2003beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi goto videoEditor_populateSettings_cleanup; 2004beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi } 2005beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi 2006cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi regenerateAudio = false; 2007cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->SetBooleanField(thiz,fid,regenerateAudio); 2008cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2009cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2010cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* Audio mix and duck */ 2011cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"ducking_threshold","I"); 2012cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiInDucking_threshold 2013cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = pEnv->GetIntField(audioSettingObject,fid); 2014beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi 2015cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("ducking threshold = %d", 2016cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiInDucking_threshold); 2017cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2018cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"ducking_lowVolume","I"); 2019cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiInDucking_lowVolume 2020cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = pEnv->GetIntField(audioSettingObject,fid); 2021beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi 2022cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("ducking lowVolume = %d", 2023cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiInDucking_lowVolume); 2024cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2025cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(audioSettingClazz,"bInDucking_enable","Z"); 2026cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->bInDucking_enable 2027cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = pEnv->GetBooleanField(audioSettingObject,fid); 2028cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_TRACE1_1("ducking lowVolume = %d", 2029cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->bInDucking_enable); 2030beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi 2031cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } else { 2032cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext->mAudioSettings != M4OSA_NULL) { 2033cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->pFile = M4OSA_NULL; 20349ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava pContext->mAudioSettings->pPCMFilePath = M4OSA_NULL; 2035cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->bRemoveOriginal = 0; 2036cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiNbChannels = 0; 2037cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiSamplingFrequency = 0; 2038cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiExtendedSamplingFrequency = 0; 2039cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiAddCts = 0; 2040cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiAddVolume = 0; 2041cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->beginCutMs = 0; 2042cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->endCutMs = 0; 20439ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava pContext->mAudioSettings->fileType = 0; 2044cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->bLoop = 0; 2045cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiInDucking_lowVolume = 0; 2046cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->bInDucking_enable = 0; 2047cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiBTChannelCount = 0; 2048cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiInDucking_threshold = 0; 2049cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2050cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi fid = pEnv->GetFieldID(engineClass,"mRegenerateAudio","Z"); 2051cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool regenerateAudio = pEnv->GetBooleanField(thiz,fid); 2052beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi if (!regenerateAudio) { 2053cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi regenerateAudio = true; 2054cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->SetBooleanField(thiz,fid,regenerateAudio); 2055cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2056cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2057cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2058beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi 2059beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi if (pContext->pEditSettings != NULL) 2060cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2061cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = pContext->mPreviewController->loadEditSettings(pContext->pEditSettings, 2062beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi pContext->mAudioSettings); 2063cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 2064cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 2065cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2066beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi if (needToBeLoaded) { 2067beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi pContext->mPreviewController->setJniCallback((void*)pContext, 2068beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi (jni_progress_callback_fct)jniPreviewProgressCallback); 2069beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi } 2070beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi } 2071cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2072beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray KundargivideoEditor_populateSettings_cleanup: 2073cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi j = 0; 2074cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi while (j < nbOverlays) 2075cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2076cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext->pEditSettings->Effects[pOverlayIndex[j]].xVSS.pFramingBuffer->pac_data != \ 2077cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_NULL) { 2078c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pContext->pEditSettings->\ 2079cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi Effects[pOverlayIndex[j]].xVSS.pFramingBuffer->pac_data); 2080cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->\ 2081cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi Effects[pOverlayIndex[j]].xVSS.pFramingBuffer->pac_data = M4OSA_NULL; 2082cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2083cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi j++; 2084cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2085beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi 2086beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi j = 0; 2087beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi while (j < pContext->pEditSettings->nbEffects) 2088beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi { 2089beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi if (pContext->pEditSettings->Effects[j].xVSS.pFramingFilePath != M4OSA_NULL) { 2090beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi if (pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer != M4OSA_NULL) { 2091c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pContext->pEditSettings->\ 2092beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi Effects[j].xVSS.pFramingBuffer); 2093beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer = M4OSA_NULL; 2094beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi } 2095beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi } 2096beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi j++; 2097beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi } 2098beb9fc8ee8d3bd14d141104e91d41809dcfe0e1aDharmaray Kundargi 2099cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pOverlayIndex != M4OSA_NULL) 2100cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2101c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pOverlayIndex); 2102cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pOverlayIndex = M4OSA_NULL; 2103cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2104cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return; 2105cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 2106cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2107cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void 2108cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_startPreview( 2109cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 2110cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 2111cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject mSurface, 2112cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jlong fromMs, 2113cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jlong toMs, 2114cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint callbackInterval, 2115cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jboolean loop) 2116cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 2117cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool needToBeLoaded = true; 2118cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 2119cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_startPreview()"); 2120cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2121cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = M4OSA_NULL; 2122cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the context. 2123cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded, pEnv, thiz); 2124cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2125cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was set. 2126cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 2127cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext), 2128cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 2129cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2130cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 2131cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext->mAudioSettings), 2132cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 2133cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was set. 2134cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 2135cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext->mPreviewController), 2136cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 2137cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2138cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Validate the mSurface parameter. 2139cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalArgumentException(&needToBeLoaded, pEnv, 2140cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (NULL == mSurface), 2141cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "mSurface is null"); 2142cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2143cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jclass surfaceClass = pEnv->FindClass("android/view/Surface"); 2144cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 2145cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == surfaceClass), 2146cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 2147cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //jfieldID surface_native = pEnv->GetFieldID(surfaceClass, "mSurface", "I"); 2148cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jfieldID surface_native 2149cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi = pEnv->GetFieldID(surfaceClass, ANDROID_VIEW_SURFACE_JNI_ID, "I"); 2150cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2151cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 2152cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == surface_native), 2153cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 2154cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2155cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi Surface* const p = (Surface*)pEnv->GetIntField(mSurface, surface_native); 2156cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2157cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi sp<Surface> previewSurface = sp<Surface>(p); 21588e7991a52edb3eb8bd1a44ceb7f6d97108748c8cRajneesh Chowdury // Validate the mSurface's mNativeSurface field 21598e7991a52edb3eb8bd1a44ceb7f6d97108748c8cRajneesh Chowdury videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 21608e7991a52edb3eb8bd1a44ceb7f6d97108748c8cRajneesh Chowdury (NULL == previewSurface.get()), 21618e7991a52edb3eb8bd1a44ceb7f6d97108748c8cRajneesh Chowdury "mNativeSurface is null"); 2162cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2163cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = pContext->mPreviewController->setSurface(previewSurface); 2164cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, 2165cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 2166cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "fromMs=%ld, toMs=%ld", 2167cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_UInt32)fromMs, (M4OSA_Int32)toMs); 2168cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2169cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = pContext->mPreviewController->startPreview((M4OSA_UInt32)fromMs, 2170cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Int32)toMs, 2171cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_UInt16)callbackInterval, 2172cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Bool)loop); 2173cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, (M4NO_ERROR != result), result); 2174cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 2175cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2176cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2177cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic jobject 2178cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_getProperties( 2179cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 2180cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 2181cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring file) 2182cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 2183cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject object = M4OSA_NULL; 21843ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury jclass clazz = pEnv->FindClass(PROPERTIES_CLASS_NAME); 21853ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury jfieldID fid; 21863ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury bool needToBeLoaded = true; 21873ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury ManualEditContext* pContext = M4OSA_NULL; 21883ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury M4OSA_ERR result = M4NO_ERROR; 21893ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury int profile = 0; 21903ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury int level = 0; 21913ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury int videoFormat = 0; 21923ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury 21933ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury // Get the context. 21943ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury pContext = (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded, pEnv, thiz); 21953ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury 21963ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 21973ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury (M4OSA_NULL == clazz), 21983ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury "not initialized"); 21993ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury 2200cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi object = videoEditProp_getProperties(pEnv,thiz,file); 2201cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 22023ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury if (object != M4OSA_NULL) { 22033ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury fid = pEnv->GetFieldID(clazz,"profile","I"); 22043ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury profile = pEnv->GetIntField(object,fid); 22053ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury fid = pEnv->GetFieldID(clazz,"level","I"); 22063ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury level = pEnv->GetIntField(object,fid); 22073ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury fid = pEnv->GetFieldID(clazz,"videoFormat","I"); 22083ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury videoFormat = pEnv->GetIntField(object,fid); 22093ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury 22103ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury result = checkClipVideoProfileAndLevel(pContext->decoders, videoFormat, profile, level); 22113ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury 22123ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury fid = pEnv->GetFieldID(clazz,"profileSupported","Z"); 22133ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury if (M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_PROFILE == result) { 22143ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury pEnv->SetBooleanField(object,fid,false); 22153ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury } 22163ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury 22173ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury fid = pEnv->GetFieldID(clazz,"levelSupported","Z"); 22183ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury if (M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_LEVEL == result) { 22193ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury pEnv->SetBooleanField(object,fid,false); 22203ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury } 22213ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury } 2222cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return object; 2223cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2224cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 2225cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int videoEditor_getPixels( 2226cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* env, 2227cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 2228cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring path, 2229cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jintArray pixelArray, 2230cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 width, 2231cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 height, 2232cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 timeMS) 2233cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 2234cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2235cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 2236cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context mContext = M4OSA_NULL; 2237cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint* m_dst32 = M4OSA_NULL; 2238cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2239cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2240cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Add a text marker (the condition must always be true). 2241cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ADD_TEXT_MARKER_FUN(NULL != env) 2242cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2243cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi const char *pString = env->GetStringUTFChars(path, NULL); 2244cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pString == M4OSA_NULL) { 2245cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (env != NULL) { 2246cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(env, "java/lang/RuntimeException", "Input string null"); 2247cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2248cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return M4ERR_ALLOC; 2249cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2250cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2251cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = ThumbnailOpen(&mContext,(const M4OSA_Char*)pString, M4OSA_FALSE); 2252cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (err != M4NO_ERROR || mContext == M4OSA_NULL) { 2253cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pString != NULL) { 2254cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi env->ReleaseStringUTFChars(path, pString); 2255cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2256cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (env != NULL) { 2257cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(env, "java/lang/RuntimeException", "ThumbnailOpen failed"); 2258cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2259cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2260cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2261cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi m_dst32 = env->GetIntArrayElements(pixelArray, NULL); 2262cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2263cb04a1f3a31c252a0e3fda5e7eaa16f3257c9397Chih-Chung Chang err = ThumbnailGetPixels32(mContext, (M4OSA_Int32 *)m_dst32, width,height,&timeMS,0); 2264cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (err != M4NO_ERROR ) { 2265cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (env != NULL) { 2266cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(env, "java/lang/RuntimeException",\ 2267cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "ThumbnailGetPixels32 failed"); 2268cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2269cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2270cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi env->ReleaseIntArrayElements(pixelArray, m_dst32, 0); 2271cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2272cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ThumbnailClose(mContext); 2273cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pString != NULL) { 2274cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi env->ReleaseStringUTFChars(path, pString); 2275cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2276cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2277cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return timeMS; 2278cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 2279cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2280cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int videoEditor_getPixelsList( 22811f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang JNIEnv* env, 22821f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang jobject thiz, 22831f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang jstring path, 22841f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang jintArray pixelArray, 22851f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang M4OSA_UInt32 width, 22861f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang M4OSA_UInt32 height, 2287cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 noOfThumbnails, 22881f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang jlong startTime, 22891f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang jlong endTime, 22901f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang jintArray indexArray, 22911f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang jobject callback) 2292cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 2293cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 22941f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang M4OSA_ERR err = M4NO_ERROR; 2295cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context mContext = M4OSA_NULL; 2296cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2297cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi const char *pString = env->GetStringUTFChars(path, NULL); 2298cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pString == M4OSA_NULL) { 22991f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang jniThrowException(env, "java/lang/RuntimeException", "Input string null"); 2300cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return M4ERR_ALLOC; 2301cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2302cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2303cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = ThumbnailOpen(&mContext,(const M4OSA_Char*)pString, M4OSA_FALSE); 2304cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (err != M4NO_ERROR || mContext == M4OSA_NULL) { 23051f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang jniThrowException(env, "java/lang/RuntimeException", "ThumbnailOpen failed"); 2306cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pString != NULL) { 2307cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi env->ReleaseStringUTFChars(path, pString); 2308cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2309cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return err; 2310cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2311cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 23121f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang jlong duration = (endTime - startTime); 23131f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang M4OSA_UInt32 tolerance = duration / (2 * noOfThumbnails); 23141f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang jint* m_dst32 = env->GetIntArrayElements(pixelArray, NULL); 23151f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang jint* indices = env->GetIntArrayElements(indexArray, NULL); 23161f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang jsize len = env->GetArrayLength(indexArray); 23171f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang 23181f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang jclass cls = env->GetObjectClass(callback); 23191f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang jmethodID mid = env->GetMethodID(cls, "onThumbnail", "(I)V"); 23201f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang 23211f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang for (int i = 0; i < len; i++) { 23221f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang int k = indices[i]; 23231f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang M4OSA_UInt32 timeMS = startTime; 23241f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang timeMS += (2 * k + 1) * duration / (2 * noOfThumbnails); 23251f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang err = ThumbnailGetPixels32(mContext, ((M4OSA_Int32 *)m_dst32), 23261f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang width, height, &timeMS, tolerance); 23271f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang if (err != M4NO_ERROR) { 23281f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang break; 2329cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 23301f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang env->CallVoidMethod(callback, mid, (jint)k); 2331a18886ca08b32c5c949a285f27c8713e05e3dd11Chih-Chung Chang if (env->ExceptionCheck()) { 2332a18886ca08b32c5c949a285f27c8713e05e3dd11Chih-Chung Chang err = M4ERR_ALLOC; 2333a18886ca08b32c5c949a285f27c8713e05e3dd11Chih-Chung Chang break; 2334a18886ca08b32c5c949a285f27c8713e05e3dd11Chih-Chung Chang } 23351f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang } 2336cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2337cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi env->ReleaseIntArrayElements(pixelArray, m_dst32, 0); 23381f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang env->ReleaseIntArrayElements(indexArray, indices, 0); 2339cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2340cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ThumbnailClose(mContext); 2341cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pString != NULL) { 2342cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi env->ReleaseStringUTFChars(path, pString); 2343cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2344cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2345a18886ca08b32c5c949a285f27c8713e05e3dd11Chih-Chung Chang if (err != M4NO_ERROR && !env->ExceptionCheck()) { 23461f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang jniThrowException(env, "java/lang/RuntimeException",\ 23471f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang "ThumbnailGetPixels32 failed"); 23481f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang } 2349cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 23501f5de3833daddfa1d0ebc7dee1f9e007d4ed36a0Chih-Chung Chang return err; 2351cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 2352cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2353cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic M4OSA_ERR 2354cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_toUTF8Fct( 2355cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Void* pBufferIn, 2356cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt8* pBufferOut, 2357cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32* bufferOutSize) 2358cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 2359cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 2360cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 length = 0; 2361cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2362cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_toUTF8Fct()"); 2363cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2364cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Determine the length of the input buffer. 2365cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL != pBufferIn) 2366cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 23677743fa64b11e9747d3ba8065a08a33ee9d90938fDheeraj Sharma length = strlen((const char *)pBufferIn); 2368cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2369cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2370cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the output buffer is large enough to hold the input buffer. 2371cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ((*bufferOutSize) > length) 2372cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2373cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the input buffer is not M4OSA_NULL. 2374cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL != pBufferIn) 2375cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2376cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Copy the temp path, ignore the result. 2377cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_chrNCopy((M4OSA_Char *)pBufferOut, (M4OSA_Char *)pBufferIn, length); 2378cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2379cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else 2380cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2381cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the output buffer to an empty string. 2382cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (*(M4OSA_Char *)pBufferOut) = 0; 2383cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2384cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2385cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else 2386cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2387cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // The buffer is too small. 2388cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4xVSSWAR_BUFFER_OUT_TOO_SMALL; 2389cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2390cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2391cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Return the buffer output size. 2392cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (*bufferOutSize) = length + 1; 2393cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2394cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Return the result. 2395cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return(result); 2396cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 2397cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2398cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic M4OSA_ERR 2399cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_fromUTF8Fct( 2400cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt8* pBufferIn, 2401cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Void* pBufferOut, 2402cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32* bufferOutSize) 2403cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 2404cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 2405cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 length = 0; 2406cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2407cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_fromUTF8Fct()"); 2408cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2409cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Determine the length of the input buffer. 2410cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL != pBufferIn) 2411cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 24127743fa64b11e9747d3ba8065a08a33ee9d90938fDheeraj Sharma length = strlen((const char *)pBufferIn); 2413cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2414cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2415cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the output buffer is large enough to hold the input buffer. 2416cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ((*bufferOutSize) > length) 2417cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2418cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the input buffer is not M4OSA_NULL. 2419cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL != pBufferIn) 2420cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2421cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Copy the temp path, ignore the result. 2422cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_chrNCopy((M4OSA_Char *)pBufferOut, (M4OSA_Char *)pBufferIn, length); 2423cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2424cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else 2425cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2426cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the output buffer to an empty string. 2427cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (*(M4OSA_Char *)pBufferOut) = 0; 2428cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2429cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2430cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else 2431cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2432cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // The buffer is too small. 2433cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4xVSSWAR_BUFFER_OUT_TOO_SMALL; 2434cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2435cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2436cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Return the buffer output size. 2437cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (*bufferOutSize) = length + 1; 2438cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2439cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Return the result. 2440cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return(result); 2441cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 2442cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2443cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic M4OSA_ERR 2444cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_getTextRgbBufferFct( 2445cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Void* pRenderingData, 2446cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Void* pTextBuffer, 2447cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 textBufferSize, 2448cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4VIFI_ImagePlane** pOutputPlane) 2449cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 2450cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 2451cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2452cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_getTextRgbBufferFct()"); 2453cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2454cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Return the result. 2455cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return(result); 2456cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 2457cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2458cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void 2459cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_callOnProgressUpdate( 2460cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext, 2461cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int task, 2462cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int progress) 2463cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 2464cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv = NULL; 2465cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2466cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2467cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Attach the current thread. 2468cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pVM->AttachCurrentThread(&pEnv, NULL); 2469cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2470cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2471cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Call the on completion callback. 2472cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->CallVoidMethod(pContext->engine, pContext->onProgressUpdateMethodId, 2473cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_getEngineCToJava(task), progress); 2474cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2475cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2476cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Detach the current thread. 2477cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pVM->DetachCurrentThread(); 2478cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 2479cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2480cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void 2481cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_freeContext( 2482cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 2483cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext** ppContext) 2484cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 2485cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = M4OSA_NULL; 2486cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2487cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_freeContext"); 2488cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2489cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the context pointer. 2490cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = (*ppContext); 2491cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2492cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the context was set. 2493cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL != pContext) 2494cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2495cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if a global reference to the engine object was set. 2496cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (NULL != pContext->engine) 2497cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2498cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Free the global reference. 2499cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->DeleteGlobalRef(pContext->engine); 2500cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->engine = NULL; 2501cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2502cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2503cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the temp path was set. 2504cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL != pContext->initParams.pTempPath) 2505cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2506cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Free the memory allocated for the temp path. 2507cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditOsal_free(pContext->initParams.pTempPath); 2508cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->initParams.pTempPath = M4OSA_NULL; 2509cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2510cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2511cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the file writer was set. 2512cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL != pContext->initParams.pFileWritePtr) 2513cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2514cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Free the memory allocated for the file writer. 2515cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditOsal_free(pContext->initParams.pFileWritePtr); 2516cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->initParams.pFileWritePtr = M4OSA_NULL; 2517cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2518cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2519cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the file reader was set. 2520cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL != pContext->initParams.pFileReadPtr) 2521cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2522cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Free the memory allocated for the file reader. 2523cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditOsal_free(pContext->initParams.pFileReadPtr); 2524cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->initParams.pFileReadPtr = M4OSA_NULL; 2525cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2526cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2527cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Free the memory allocated for the context. 2528cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditOsal_free(pContext); 2529cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = M4OSA_NULL; 2530cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2531cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Reset the context pointer. 2532cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (*ppContext) = M4OSA_NULL; 2533cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2534cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 2535cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2536cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic jobject 2537cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_getVersion( 2538cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 2539cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz) 2540cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 2541cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool isSuccessful = true; 2542cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject version = NULL; 2543cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4_VersionInfo versionInfo = {0, 0, 0, 0}; 2544cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 2545cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2546cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_getVersion()"); 2547cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2548cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi versionInfo.m_structSize = sizeof(versionInfo); 2549cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi versionInfo.m_major = VIDEOEDITOR_VERSION_MAJOR; 2550cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi versionInfo.m_minor = VIDEOEDITOR_VERSION_MINOR; 2551cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi versionInfo.m_revision = VIDEOEDITOR_VERSION_REVISION; 2552cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2553cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_getVersion() major %d,\ 2554cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi minor %d, revision %d", versionInfo.m_major, versionInfo.m_minor, versionInfo.m_revision); 2555cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2556cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Create a version object. 2557cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditClasses_createVersion(&isSuccessful, pEnv, &versionInfo, &version); 2558cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2559cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Return the version object. 2560cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return(version); 2561cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 2562cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2563cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void 2564cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_init( 2565cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 2566cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 2567cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring tempPath, 2568cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring libraryPath) 2569cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 2570cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool initialized = true; 2571cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = M4OSA_NULL; 2572cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VideoEditJava_EngineMethodIds methodIds = {NULL}; 2573cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* pLibraryPath = M4OSA_NULL; 2574cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* pTextRendererPath = M4OSA_NULL; 2575cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 textRendererPathLength = 0; 2576cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 2577cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2578cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_init()"); 2579cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2580cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Add a text marker (the condition must always be true). 2581cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ADD_TEXT_MARKER_FUN(NULL != pEnv) 2582cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2583cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the context. 2584cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = (ManualEditContext*)videoEditClasses_getContext(&initialized, pEnv, thiz); 2585cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2586cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the engine method ids. 2587cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_getEngineMethodIds(&initialized, pEnv, &methodIds); 2588cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2589cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Validate the tempPath parameter. 2590cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalArgumentException(&initialized, pEnv, 2591cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (NULL == tempPath), 2592cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "tempPath is null"); 2593cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2594cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was not set already. 2595cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&initialized, pEnv, 2596cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL != pContext), 2597cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "already initialized"); 2598cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2599cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the initialization succeeded (required because of dereferencing of psContext, 2600cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // and freeing when initialization fails). 2601cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (initialized) 2602cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2603cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Allocate a new context. 2604cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = new ManualEditContext; 2605cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2606cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the initialization succeeded (required because of dereferencing of psContext). 2607cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //if (initialized) 2608cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext != NULL) 2609cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2610cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the state to not initialized. 2611cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->state = ManualEditState_NOT_INITIALIZED; 2612cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2613cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Allocate a file read pointer structure. 2614cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->initParams.pFileReadPtr = 2615cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_FileReadPointer*)videoEditOsal_alloc(&initialized, pEnv, 2616cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi sizeof(M4OSA_FileReadPointer), "FileReadPointer"); 2617cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2618cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Allocate a file write pointer structure. 2619cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->initParams.pFileWritePtr = 2620cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_FileWriterPointer*)videoEditOsal_alloc(&initialized, pEnv, 2621cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi sizeof(M4OSA_FileWriterPointer), "FileWriterPointer"); 2622cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2623cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the temp path. 2624cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* tmpString = 2625cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char *)videoEditJava_getString(&initialized, pEnv, tempPath, 2626cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi NULL, M4OSA_NULL); 2627cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->initParams.pTempPath = (M4OSA_Char *) 2628c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu M4OSA_32bitAlignedMalloc(strlen((const char *)tmpString) + 1, 0x0, 2629cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char *)"tempPath"); 2630cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //initialize the first char. so that strcat works. 2631cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char *ptmpChar = (M4OSA_Char*)pContext->initParams.pTempPath; 2632cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ptmpChar[0] = 0x00; 26336721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury strncat((char *)pContext->initParams.pTempPath, (const char *)tmpString, 26347743fa64b11e9747d3ba8065a08a33ee9d90938fDheeraj Sharma (size_t)strlen((const char *)tmpString)); 26357743fa64b11e9747d3ba8065a08a33ee9d90938fDheeraj Sharma strncat((char *)pContext->initParams.pTempPath, (const char *)"/", (size_t)1); 2636c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(tmpString); 2637c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi pContext->mIsUpdateOverlay = false; 2638c16ccc1c5a6293136ae9bd4756dc2f57914a2020Dharmaray Kundargi pContext->mOverlayFileName = NULL; 26393ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury pContext->decoders = NULL; 2640cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2641cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2642cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the initialization succeeded 2643cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // (required because of dereferencing of pContext, pFileReadPtr and pFileWritePtr). 2644cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (initialized) 2645cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2646cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2647cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Initialize the OSAL file system function pointers. 2648cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditOsal_getFilePointers(pContext->initParams.pFileReadPtr , 2649cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->initParams.pFileWritePtr); 2650cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2651cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the UTF8 conversion functions. 2652cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->initParams.pConvToUTF8Fct = videoEditor_toUTF8Fct; 2653cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->initParams.pConvFromUTF8Fct = videoEditor_fromUTF8Fct; 2654cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2655cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the callback method ids. 2656cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->onProgressUpdateMethodId = methodIds.onProgressUpdate; 2657cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2658cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the virtual machine. 2659cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->GetJavaVM(&(pContext->pVM)); 2660cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2661cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Create a global reference to the engine object. 2662cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->engine = pEnv->NewGlobalRef(thiz); 2663cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2664cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the global reference could be created. 2665cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&initialized, pEnv, 2666cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (NULL == pContext->engine), M4NO_ERROR); 2667cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2668cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2669cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the initialization succeeded (required because of dereferencing of pContext). 2670cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (initialized) 2671cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2672cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Log the API call. 2673cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "M4xVSS_Init()"); 2674cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2675cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Initialize the visual studio library. 2676cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4xVSS_Init(&pContext->engineContext, &pContext->initParams); 2677cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2678cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Log the result. 2679cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_RESULT(ANDROID_LOG_INFO, "VIDEO_EDITOR", 2680cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditOsal_getResultString(result)); 2681cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2682cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the library could be initialized. 2683cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&initialized, pEnv, 2684cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 26853ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury 26863ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury // Get platform video decoder capablities. 26873ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury result = M4xVSS_getVideoDecoderCapabilities(&pContext->decoders); 26883ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury 26893ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury videoEditJava_checkAndThrowRuntimeException(&initialized, pEnv, 26903ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury (M4NO_ERROR != result), result); 2691cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2692cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2693cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if(initialized) 2694cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2695cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mPreviewController = new VideoEditorPreviewController(); 2696cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&initialized, pEnv, 2697cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext->mPreviewController), 2698cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 2699cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings = 2700cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4xVSS_AudioMixingSettings *) 2701c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu M4OSA_32bitAlignedMalloc(sizeof(M4xVSS_AudioMixingSettings),0x0, 2702cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char *)"mAudioSettings"); 2703cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&initialized, pEnv, 2704cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext->mAudioSettings), 2705cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 2706cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->pFile = M4OSA_NULL; 27079ee9aad80981c661af3f4c16f5932aef1f98e7b0Santosh Madhava pContext->mAudioSettings->pPCMFilePath = M4OSA_NULL; 2708cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->bRemoveOriginal = 0; 2709cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiNbChannels = 0; 2710cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiSamplingFrequency = 0; 2711cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiExtendedSamplingFrequency = 0; 2712cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiAddCts = 0; 2713cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiAddVolume = 0; 2714cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->beginCutMs = 0; 2715cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->endCutMs = 0; 2716cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->fileType = 0; 2717cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->bLoop = 0; 2718cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiInDucking_lowVolume = 0; 2719cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->bInDucking_enable = 0; 2720cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiBTChannelCount = 0; 2721cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings->uiInDucking_threshold = 0; 2722cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2723cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the library could be initialized. 2724cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (initialized) 2725cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2726cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the state to initialized. 2727cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->state = ManualEditState_INITIALIZED; 2728cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2729cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2730cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the context. 2731cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditClasses_setContext(&initialized, pEnv, thiz, (void* )pContext); 2732cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pLibraryPath = M4OSA_NULL; 2733cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2734cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings = M4OSA_NULL; 2735cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Cleanup if anything went wrong during initialization. 2736cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (!initialized) 2737cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2738cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Free the context. 2739cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditor_freeContext(pEnv, &pContext); 2740cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2741cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2742cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 2743cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2744cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi/*+ PROGRESS CB */ 2745cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic 2746cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargiM4OSA_ERR videoEditor_processClip( 2747cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 2748cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 2749cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int unuseditemID) { 2750cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2751cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool loaded = true; 2752cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = NULL; 2753cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt8 progress = 0; 2754cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt8 progressBase = 0; 2755cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt8 lastProgress = 0; 2756cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 2757cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2758cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the context. 2759cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = (ManualEditContext*)videoEditClasses_getContext(&loaded, pEnv, thiz); 2760cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2761cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was set. 2762cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&loaded, pEnv, 2763cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext), 2764cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 2765cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2766cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // We start in Analyzing state 27675618e037af1a9d4323990a580d4181b9bc8e3091Dheeraj Sharma pContext->state = ManualEditState_INITIALIZED; 2768cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR completionResult = M4VSS3GPP_WAR_ANALYZING_DONE; 2769cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditState completionState = ManualEditState_OPENED; 2770cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditState errorState = ManualEditState_ANALYZING_ERROR; 2771cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 27726721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury // While analyzing progress goes from 0 to 10 (except Kenburn clip 27736721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury // generation, which goes from 0 to 50) 2774cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi progressBase = 0; 2775cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2776cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the text rendering function. 2777cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (M4OSA_NULL != pContext->pTextRendererFunction) 2778cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2779cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Use the text renderer function in the library. 2780cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->xVSS.pTextRenderingFct = pContext->pTextRendererFunction; 2781cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2782cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else 2783cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2784cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Use the internal text renderer function. 2785cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings->xVSS.pTextRenderingFct = videoEditor_getTextRgbBufferFct; 2786cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2787cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2788cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Send the command. 2789cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_processClip ITEM %d Calling M4xVSS_SendCommand()", unuseditemID); 2790cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4xVSS_SendCommand(pContext->engineContext, pContext->pEditSettings); 2791cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_processClip ITEM %d M4xVSS_SendCommand() returned 0x%x", 2792cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi unuseditemID, (unsigned int) result); 2793cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2794cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Remove warnings indications (we only care about errors here) 2795cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ((result == M4VSS3GPP_WAR_TRANSCODING_NECESSARY) 2796cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi || (result == M4VSS3GPP_WAR_OUTPUTFILESIZE_EXCEED)) { 2797cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4NO_ERROR; 2798cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2799cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2800cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Send the first progress indication (=0) 2801cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("VERY FIRST PROGRESS videoEditor_processClip ITEM %d Progress indication %d", 2802cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi unuseditemID, progress); 2803cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->CallVoidMethod(pContext->engine, pContext->onProgressUpdateMethodId, 2804cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi unuseditemID, progress); 2805cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2806cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if a task is being performed. 2807cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // ??? ADD STOPPING MECHANISM 2808cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_processClip Entering processing loop"); 28096721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury M4OSA_UInt8 prevReportedProgress = 0; 2810cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi while((result == M4NO_ERROR) 2811cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi &&(pContext->state!=ManualEditState_SAVED) 2812cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi &&(pContext->state!=ManualEditState_STOPPING)) { 2813cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2814cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Perform the next processing step. 2815cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //LOGV("LVME_processClip Entering M4xVSS_Step()"); 2816cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4xVSS_Step(pContext->engineContext, &progress); 2817cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 28186721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury if (progress != prevReportedProgress) { 28196721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury prevReportedProgress = progress; 28206721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury // Log the 1 % .. 100 % progress after processing. 28216721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury if (M4OSA_TRUE == 28226721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury pContext->pEditSettings->pClipList[0]->xVSS.isPanZoom) { 28236721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury // For KenBurn clip generation, return 0 to 50 28246721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury // for Analysis phase and 50 to 100 for Saving phase 28256721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury progress = progressBase + progress/2; 28266721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury } else { 28276721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury // For export/transition clips, 0 to 10 for Analysis phase 28286721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury // and 10 to 100 for Saving phase 28296721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury if (ManualEditState_INITIALIZED == pContext->state) { 28306721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury progress = 0.1*progress; 28316721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury } else { 28326721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury progress = progressBase + 0.9*progress; 28336721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury } 28346721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury } 28356721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury 28366721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury if (progress > lastProgress) 28376721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury { 28386721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury // Send a progress notification. 28396721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury LOGV("videoEditor_processClip ITEM %d Progress indication %d", 28406721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury unuseditemID, progress); 28416721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury pEnv->CallVoidMethod(pContext->engine, 28426721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury pContext->onProgressUpdateMethodId, 28436721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury unuseditemID, progress); 28446721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury lastProgress = progress; 28456721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury } 2846cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2847cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2848cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if processing has been completed. 2849cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (result == completionResult) 2850cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2851cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the state to the completions state. 2852cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->state = completionState; 2853cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_processClip ITEM %d STATE changed to %d", 2854cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi unuseditemID, pContext->state); 2855cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2856cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Reset progress indication, as we switch to next state 2857cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi lastProgress = 0; 2858cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2859cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Reset error code, as we start a new round of processing 2860cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4NO_ERROR; 2861cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2862cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if we are analyzing input 2863cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext->state == ManualEditState_OPENED) { 2864cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // File is opened, we must start saving it 2865cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_processClip Calling M4xVSS_SaveStart()"); 2866cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4xVSS_SaveStart(pContext->engineContext, 2867cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char*)pContext->pEditSettings->pOutputFile, 2868cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_UInt32)pContext->pEditSettings->uiOutputPathSize); 2869cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_processClip ITEM %d SaveStart() returned 0x%x", 2870cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi unuseditemID, (unsigned int) result); 2871cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2872cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the state to saving. 2873cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->state = ManualEditState_SAVING; 2874cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi completionState = ManualEditState_SAVED; 2875cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi completionResult = M4VSS3GPP_WAR_SAVING_DONE; 2876cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi errorState = ManualEditState_SAVING_ERROR; 2877cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 28786721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury // While saving, progress goes from 10 to 100 28796721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury // except for Kenburn clip which goes from 50 to 100 28806721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury if (M4OSA_TRUE == 28816721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury pContext->pEditSettings->pClipList[0]->xVSS.isPanZoom) { 28826721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury progressBase = 50; 28836721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury } else { 28846721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury progressBase = 10; 28856721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury } 2886cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2887cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if we encoding is ongoing 2888cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (pContext->state == ManualEditState_SAVED) { 28896721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury 28906721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury // Send a progress notification. 28916721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury progress = 100; 28926721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury LOGV("videoEditor_processClip ITEM %d Last progress indication %d", 28936721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury unuseditemID, progress); 28946721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury pEnv->CallVoidMethod(pContext->engine, 28956721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury pContext->onProgressUpdateMethodId, 28966721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury unuseditemID, progress); 28976721d33feff547e938aeba20073c9c0cc6a3390bRajneesh Chowdury 2898cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2899cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Stop the encoding. 2900cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_processClip Calling M4xVSS_SaveStop()"); 2901cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4xVSS_SaveStop(pContext->engineContext); 2902cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_processClip M4xVSS_SaveStop() returned 0x%x", result); 2903cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2904cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Other states are unexpected 2905cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else { 2906cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4ERR_STATE; 2907cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGE("videoEditor_processClip ITEM %d State ERROR 0x%x", 2908cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi unuseditemID, (unsigned int) result); 2909cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2910cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2911cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2912cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if an error occurred. 2913cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (result != M4NO_ERROR) 2914cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 2915cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the state to the error state. 2916cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->state = errorState; 2917cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2918cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Log the result. 2919cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGE("videoEditor_processClip ITEM %d Processing ERROR 0x%x", 2920cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi unuseditemID, (unsigned int) result); 2921cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2922cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 2923cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2924cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Return the error result 2925cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGE("videoEditor_processClip ITEM %d END 0x%x", unuseditemID, (unsigned int) result); 2926cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return result; 2927cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 2928cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi/*+ PROGRESS CB */ 2929cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2930cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int 2931cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_generateClip( 2932cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 2933cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 2934cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject settings) { 2935cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool loaded = true; 2936cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = M4OSA_NULL; 2937cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 2938cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2939cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_generateClip START"); 2940cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2941cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the context. 2942cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = (ManualEditContext*)videoEditClasses_getContext(&loaded, pEnv, thiz); 2943cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2944cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi Mutex::Autolock autoLock(pContext->mLock); 2945cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2946cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Validate the settings parameter. 2947cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalArgumentException(&loaded, pEnv, 2948cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (NULL == settings), 2949cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "settings is null"); 2950cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2951cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was set. 2952cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&loaded, pEnv, 2953cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext), 2954cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 2955cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2956cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Load the clip settings 2957cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_generateClip Calling videoEditor_loadSettings"); 2958cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditor_loadSettings(pEnv, thiz, settings); 2959cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_generateClip videoEditor_loadSettings returned"); 2960cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2961cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Generate the clip 2962cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_generateClip Calling LVME_processClip"); 2963cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = videoEditor_processClip(pEnv, thiz, 0 /*item id is unused*/); 2964cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_generateClip videoEditor_processClip returned 0x%x", result); 2965cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 29665618e037af1a9d4323990a580d4181b9bc8e3091Dheeraj Sharma if (pContext->state != ManualEditState_INITIALIZED) { 29675618e037af1a9d4323990a580d4181b9bc8e3091Dheeraj Sharma // Free up memory (whatever the result) 29685618e037af1a9d4323990a580d4181b9bc8e3091Dheeraj Sharma videoEditor_unloadSettings(pEnv, thiz); 29695618e037af1a9d4323990a580d4181b9bc8e3091Dheeraj Sharma } 2970cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2971cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_generateClip END 0x%x", (unsigned int) result); 2972cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return result; 2973cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 2974cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2975cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void 2976cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_loadSettings( 2977cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 2978cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz, 2979cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject settings) 2980cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 2981cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool needToBeLoaded = true; 2982cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = M4OSA_NULL; 2983cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2984cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_loadSettings()"); 2985cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2986cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Add a code marker (the condition must always be true). 2987cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ADD_CODE_MARKER_FUN(NULL != pEnv) 2988cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2989cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the context. 2990cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded, 2991cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv, thiz); 2992cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2993cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Validate the settings parameter. 2994cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalArgumentException(&needToBeLoaded, pEnv, 2995cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (NULL == settings), 2996cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "settings is null"); 2997cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 2998cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was set. 2999cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 3000cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext), 3001cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 3002cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3003cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the context is valid (required because the context is dereferenced). 3004cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (needToBeLoaded) 3005cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 3006cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that we are in a correct state. 3007cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv, 3008cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (pContext->state != ManualEditState_INITIALIZED), 3009cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "settings already loaded"); 3010cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3011cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Retrieve the edit settings. 3012cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if(pContext->pEditSettings != M4OSA_NULL) { 3013cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditClasses_freeEditSettings(&pContext->pEditSettings); 3014cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings = M4OSA_NULL; 3015cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3016cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditClasses_getEditSettings(&needToBeLoaded, pEnv, settings, 3017cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi &pContext->pEditSettings,true); 3018cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3019cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3020cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the edit settings could be retrieved. 3021cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (needToBeLoaded) 3022cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 3023cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Log the edit settings. 3024cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "inside load settings"); 3025cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_EDIT_SETTINGS(pContext->pEditSettings); 3026cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3027cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_loadSettings END"); 3028cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 3029cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3030cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3031cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3032cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void 3033cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_unloadSettings( 3034cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 3035cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz) 3036cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 3037cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool needToBeUnLoaded = true; 3038cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = M4OSA_NULL; 3039cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 3040cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3041cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_unloadSettings()"); 3042cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3043cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the context. 3044cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = (ManualEditContext*)videoEditClasses_getContext(&needToBeUnLoaded, pEnv, thiz); 3045cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3046cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was set. 3047cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeUnLoaded, pEnv, 3048cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext), 3049cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 3050cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3051cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the context is valid (required because the context is dereferenced). 3052cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (needToBeUnLoaded) 3053cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 3054cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_unloadSettings state %d", pContext->state); 3055cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that we are in a correct state. 3056cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&needToBeUnLoaded, pEnv, 3057cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ((pContext->state != ManualEditState_ANALYZING ) && 3058cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (pContext->state != ManualEditState_ANALYZING_ERROR) && 3059cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (pContext->state != ManualEditState_OPENED ) && 3060cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (pContext->state != ManualEditState_SAVING_ERROR ) && 3061cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (pContext->state != ManualEditState_SAVED ) && 3062cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (pContext->state != ManualEditState_STOPPING ) ), 3063cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_unloadSettings no load settings in progress"); 3064cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3065cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3066cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if we are in a correct state. 3067cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (needToBeUnLoaded) 3068cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 3069cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the thread could be stopped. 3070cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (needToBeUnLoaded) 3071cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 3072cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Close the command. 3073cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_unloadSettings Calling M4xVSS_CloseCommand()"); 3074cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4xVSS_CloseCommand(pContext->engineContext); 3075cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_unloadSettings M4xVSS_CloseCommand() returned 0x%x", 3076cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (unsigned int)result); 3077cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3078cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the command could be closed. 3079cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&needToBeUnLoaded, pEnv, 3080cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 3081cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3082cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3083cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the command could be closed. 3084cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (needToBeUnLoaded) 3085cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 3086cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Free the edit settings. 3087cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //videoEditClasses_freeEditSettings(&pContext->pEditSettings); 3088cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3089cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Reset the thread result. 3090cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->threadResult = M4NO_ERROR; 3091cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3092cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Reset the thread progress. 3093cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->threadProgress = 0; 3094cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3095cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the state to initialized. 3096cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->state = ManualEditState_INITIALIZED; 3097cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3098cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3099cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 3100cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3101cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void 3102cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_stopEncoding( 3103cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 3104cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz) 3105cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 3106cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool stopped = true; 3107cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = M4OSA_NULL; 3108cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 3109cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3110cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_stopEncoding START"); 3111cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3112cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the context. 3113cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = (ManualEditContext*)videoEditClasses_getContext(&stopped, pEnv, thiz); 3114cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3115cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Change state and get Lock 3116cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // This will ensure the generateClip function exits 3117cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->state = ManualEditState_STOPPING; 3118cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi Mutex::Autolock autoLock(pContext->mLock); 3119cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3120cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Make sure that the context was set. 3121cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&stopped, pEnv, 3122cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == pContext), 3123cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 3124cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3125cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (stopped) { 3126cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3127cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the command should be closed. 3128cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext->state != ManualEditState_INITIALIZED) 3129cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 3130cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Close the command. 3131cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_stopEncoding Calling M4xVSS_CloseCommand()"); 3132cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4xVSS_CloseCommand(pContext->engineContext); 3133cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_stopEncoding M4xVSS_CloseCommand() returned 0x%x", 3134cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (unsigned int)result); 3135cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3136cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3137cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the command could be closed. 3138cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&stopped, pEnv, 3139cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 3140cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3141cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Free the edit settings. 3142cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditClasses_freeEditSettings(&pContext->pEditSettings); 3143cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3144cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Set the state to initialized. 3145cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->state = ManualEditState_INITIALIZED; 3146cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3147cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3148cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 3149cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3150cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic void 3151cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_release( 3152cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv, 3153cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jobject thiz) 3154cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 3155cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool released = true; 3156cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = M4OSA_NULL; 3157cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 3158cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3159cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_release()"); 3160cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3161cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Add a text marker (the condition must always be true). 3162cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ADD_TEXT_MARKER_FUN(NULL != pEnv) 3163cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3164cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Get the context. 3165cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = (ManualEditContext*)videoEditClasses_getContext(&released, pEnv, thiz); 3166cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3167cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // If context is not set, return (we consider release already happened) 3168cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext == NULL) { 3169cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_release Nothing to do, context is aleady NULL"); 3170cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return; 3171cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3172cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3173cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3174cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the context is valid (required because the context is dereferenced). 3175cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (released) 3176cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 3177cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext->state != ManualEditState_INITIALIZED) 3178cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 3179cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Change state and get Lock 3180cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // This will ensure the generateClip function exits if it is running 3181cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->state = ManualEditState_STOPPING; 3182cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi Mutex::Autolock autoLock(pContext->mLock); 3183cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3184cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3185cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Reset the context. 3186cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditClasses_setContext(&released, pEnv, thiz, (void *)M4OSA_NULL); 3187cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3188cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the command should be closed. 3189cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext->state != ManualEditState_INITIALIZED) 3190cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 3191cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Close the command. 3192cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_release Calling M4xVSS_CloseCommand() state =%d", 3193cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->state); 3194cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4xVSS_CloseCommand(pContext->engineContext); 3195cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_release M4xVSS_CloseCommand() returned 0x%x", 3196cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (unsigned int)result); 3197cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3198cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the command could be closed. 3199cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&released, pEnv, 3200cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 3201cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3202cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3203cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Cleanup the engine. 3204cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_release Calling M4xVSS_CleanUp()"); 3205cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4xVSS_CleanUp(pContext->engineContext); 3206cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi LOGV("videoEditor_release M4xVSS_CleanUp() returned 0x%x", (unsigned int)result); 3207cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3208cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the cleanup succeeded. 3209cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowRuntimeException(&released, pEnv, 3210cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4NO_ERROR != result), result); 3211cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3212cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Free the edit settings. 3213cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditClasses_freeEditSettings(&pContext->pEditSettings); 3214cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->pEditSettings = M4OSA_NULL; 3215cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3216cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3217cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if(pContext->mPreviewController != M4OSA_NULL) 3218cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 3219cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi delete pContext->mPreviewController; 3220cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mPreviewController = M4OSA_NULL; 3221cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3222cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 322371771b3b1bbcafe84e7bd14941b98a1b1d6c8a60Santosh Madhava // Free the mAudioSettings context. 3224cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if(pContext->mAudioSettings != M4OSA_NULL) 3225cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 322671771b3b1bbcafe84e7bd14941b98a1b1d6c8a60Santosh Madhava if (pContext->mAudioSettings->pFile != NULL) { 3227c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pContext->mAudioSettings->pFile); 322871771b3b1bbcafe84e7bd14941b98a1b1d6c8a60Santosh Madhava pContext->mAudioSettings->pFile = M4OSA_NULL; 322971771b3b1bbcafe84e7bd14941b98a1b1d6c8a60Santosh Madhava } 323071771b3b1bbcafe84e7bd14941b98a1b1d6c8a60Santosh Madhava if (pContext->mAudioSettings->pPCMFilePath != NULL) { 3231c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pContext->mAudioSettings->pPCMFilePath); 323271771b3b1bbcafe84e7bd14941b98a1b1d6c8a60Santosh Madhava pContext->mAudioSettings->pPCMFilePath = M4OSA_NULL; 323371771b3b1bbcafe84e7bd14941b98a1b1d6c8a60Santosh Madhava } 323471771b3b1bbcafe84e7bd14941b98a1b1d6c8a60Santosh Madhava 3235c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(pContext->mAudioSettings); 3236cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->mAudioSettings = M4OSA_NULL; 3237cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 32383ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury // Free video Decoders capabilities 32393ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury if (pContext->decoders != M4OSA_NULL) { 32403ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury VideoDecoder *pDecoder = NULL; 32413ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury VideoComponentCapabilities *pComponents = NULL; 32423ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury int32_t decoderNumber = pContext->decoders->decoderNumber; 32433ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury if (pContext->decoders->decoder != NULL && 32443ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury decoderNumber > 0) { 32453ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury pDecoder = pContext->decoders->decoder; 32463ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury for (int32_t k = 0; k < decoderNumber; k++) { 32473ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury // free each component 32483ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury LOGV("decoder index :%d",k); 32493ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury if (pDecoder != NULL && 32503ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury pDecoder->component != NULL && 32513ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury pDecoder->componentNumber > 0) { 32523ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury LOGV("component number %d",pDecoder->componentNumber); 32533ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury int32_t componentNumber = 32543ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury pDecoder->componentNumber; 32553ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury 32563ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury pComponents = pDecoder->component; 32573ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury for (int32_t i = 0; i< componentNumber; i++) { 32583ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury LOGV("component index :%d",i); 32593ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury if (pComponents != NULL && 32603ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury pComponents->profileLevel != NULL) { 32613ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury free(pComponents->profileLevel); 32623ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury pComponents->profileLevel = NULL; 32633ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury } 32643ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury pComponents++; 32653ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury } 32663ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury free(pDecoder->component); 32673ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury pDecoder->component = NULL; 32683ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury } 32693ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury 32703ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury pDecoder++; 32713ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury } 32723ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury free(pContext->decoders->decoder); 32733ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury pContext->decoders->decoder = NULL; 32743ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury } 32753ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury free(pContext->decoders); 32763ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury pContext->decoders = NULL; 32773ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury } 32783ced044154945f9d60983032278e00fe28f4ab1bRajneesh Chowdury 3279cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditor_freeContext(pEnv, &pContext); 3280cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3281cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 3282cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3283cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int 3284cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargivideoEditor_registerManualEditMethods( 3285cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JNIEnv* pEnv) 3286cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 3287cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int result = -1; 3288cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3289cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", 3290cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_registerManualEditMethods()"); 3291cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3292cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Look up the engine class 3293cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jclass engineClazz = pEnv->FindClass(MANUAL_EDIT_ENGINE_CLASS_NAME); 3294cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3295cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Clear any resulting exceptions. 3296cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->ExceptionClear(); 3297cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3298cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check if the engine class was found. 3299cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (NULL != engineClazz) 3300cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 3301cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Register all the methods. 3302cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pEnv->RegisterNatives(engineClazz, gManualEditMethods, 3303cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi sizeof(gManualEditMethods) / sizeof(gManualEditMethods[0])) == JNI_OK) 3304cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 3305cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Success. 3306cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = 0; 3307cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3308cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3309cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3310cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Return the result. 3311cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return(result); 3312cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 3313cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3314cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi/*******Audio Graph*******/ 3315cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3316cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic M4OSA_UInt32 getDecibelSound(M4OSA_UInt32 value) 3317cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 3318cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int dbSound = 1; 3319cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3320cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (value == 0) return 0; 3321cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3322cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (value > 0x4000 && value <= 0x8000) // 32768 3323cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 90; 3324cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x2000 && value <= 0x4000) // 16384 3325cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 84; 3326cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x1000 && value <= 0x2000) // 8192 3327cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 78; 3328cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x0800 && value <= 0x1000) // 4028 3329cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 72; 3330cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x0400 && value <= 0x0800) // 2048 3331cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 66; 3332cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x0200 && value <= 0x0400) // 1024 3333cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 60; 3334cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x0100 && value <= 0x0200) // 512 3335cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 54; 3336cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x0080 && value <= 0x0100) // 256 3337cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 48; 3338cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x0040 && value <= 0x0080) // 128 3339cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 42; 3340cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x0020 && value <= 0x0040) // 64 3341cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 36; 3342cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x0010 && value <= 0x0020) // 32 3343cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 30; 3344cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x0008 && value <= 0x0010) //16 3345cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 24; 3346cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x0007 && value <= 0x0008) //8 3347cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 24; 3348cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x0003 && value <= 0x0007) // 4 3349cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 18; 3350cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x0001 && value <= 0x0003) //2 3351cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 12; 3352cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else if (value > 0x000 && value == 0x0001) // 1 3353cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 6; 3354cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi else 3355cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbSound = 0; 3356cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3357cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return dbSound; 3358cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 3359cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3360cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargitypedef struct 3361cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 3362cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt8 *m_dataAddress; 3363cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 m_bufferSize; 3364cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} M4AM_Buffer; 3365cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3366cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3367581cad2221cb367e9e3ef6991c565cd37ced994fJames DongM4OSA_UInt8 logLookUp[256] = { 3368cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi0,120,137,146,154,159,163,167,171,173,176,178,181,182,184,186,188,189,190,192,193, 3369cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi194,195,196,198,199,199,200,201,202,203,204,205,205,206,207,207,208,209,209,210, 3370cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi211,211,212,212,213,213,214,215,215,216,216,216,217,217,218,218,219,219,220,220, 3371cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi220,221,221,222,222,222,223,223,223,224,224,224,225,225,225,226,226,226,227,227, 3372cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi227,228,228,228,229,229,229,229,230,230,230,230,231,231,231,232,232,232,232,233, 3373cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi233,233,233,233,234,234,234,234,235,235,235,235,236,236,236,236,236,237,237,237, 3374cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi237,237,238,238,238,238,238,239,239,239,239,239,240,240,240,240,240,240,241,241, 3375cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi241,241,241,241,242,242,242,242,242,242,243,243,243,243,243,243,244,244,244,244, 3376cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi244,244,245,245,245,245,245,245,245,246,246,246,246,246,246,246,247,247,247,247, 3377cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi247,247,247,247,248,248,248,248,248,248,248,249,249,249,249,249,249,249,249,250, 3378cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi250,250,250,250,250,250,250,250,251,251,251,251,251,251,251,251,252,252,252,252, 3379cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi252,252,252,252,252,253,253,253,253,253,253,253,253,253,253,254,254,254,254,254, 3380cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi254,254,254,254,255,255,255,255,255,255,255,255,255,255,255}; 3381cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3382cd196d3727db641e581d4223815367a5ca5d5637Dharmaray KundargiM4OSA_ERR M4MA_generateAudioGraphFile(JNIEnv* pEnv, M4OSA_Char* pInputFileURL, 3383cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Char* pOutFileURL, 3384cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 samplesPerValue, 3385cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 channels, 3386cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 frameDuration, 3387cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext) 3388cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 3389cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR err; 3390cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context outFileHandle = M4OSA_NULL; 3391cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Context inputFileHandle = M4OSA_NULL; 3392cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4AM_Buffer bufferIn = {0, 0}; 3393cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 peakVolumeDbValue = 0; 3394cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 samplesCountInBytes= 0 , numBytesToRead = 0, index = 0; 3395cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 writeCount = 0, samplesCountBigEndian = 0, volumeValuesCount = 0; 3396cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Int32 seekPos = 0; 3397cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 fileSize = 0; 3398cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 totalBytesRead = 0; 3399cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_UInt32 prevProgress = 0; 3400cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool threadStarted = true; 3401cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3402cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi int dbValue = 0; 3403cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_Int16 *ptr16 ; 3404cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3405cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jclass engineClass = pEnv->FindClass(MANUAL_EDIT_ENGINE_CLASS_NAME); 3406cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditJava_checkAndThrowIllegalStateException(&threadStarted, pEnv, 3407cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_NULL == engineClass), 3408cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "not initialized"); 3409cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3410cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* register the call back function pointer */ 3411cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->onAudioGraphProgressUpdateMethodId = 3412cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->GetMethodID(engineClass, "onAudioGraphExtractProgressUpdate", "(IZ)V"); 3413cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3414cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3415cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* ENTER */ 3416cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "ENTER - M4MA_generateAudioGraphFile"); 3417cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", 3418cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "Audio Graph samplesPerValue %d channels %d", samplesPerValue, channels); 3419cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3420cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /****************************************************************************** 3421cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi OPEN INPUT AND OUTPUT FILES 3422cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi *******************************************************************************/ 3423cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4OSA_fileReadOpen (&inputFileHandle, pInputFileURL, M4OSA_kFileRead); 3424cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (inputFileHandle == M4OSA_NULL) { 3425cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_ERROR(ANDROID_LOG_INFO, "VIDEO_EDITOR", 3426581cad2221cb367e9e3ef6991c565cd37ced994fJames Dong "M4MA_generateAudioGraphFile: Cannot open input file 0x%lx", err); 3427cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return err; 3428cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3429cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3430cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* get the file size for progress */ 3431cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4OSA_fileReadGetOption(inputFileHandle, M4OSA_kFileReadGetFileSize, 3432cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Void**)&fileSize); 3433cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ( err != M4NO_ERROR) { 3434cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //LVMEL_LOG_ERROR("M4MA_generateAudioGraphFile : File write failed \n"); 3435cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(pEnv, "java/lang/IOException", "file size get option failed"); 3436cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //return -1; 3437cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3438cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3439cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4OSA_fileWriteOpen (&outFileHandle,(M4OSA_Char*) pOutFileURL, 3440cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_kFileCreate | M4OSA_kFileWrite); 3441cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (outFileHandle == M4OSA_NULL) { 3442cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (inputFileHandle != NULL) 3443cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 3444cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileReadClose(inputFileHandle); 3445cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3446cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return err; 3447cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3448cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3449cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /****************************************************************************** 3450cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi PROCESS THE SAMPLES 3451cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi *******************************************************************************/ 3452cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi samplesCountInBytes = (samplesPerValue * sizeof(M4OSA_UInt16) * channels); 3453cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3454c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu bufferIn.m_dataAddress = (M4OSA_UInt8*)M4OSA_32bitAlignedMalloc(samplesCountInBytes*sizeof(M4OSA_UInt16), 0, 3455cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char*)"AudioGraph" ); 3456cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ( bufferIn.m_dataAddress != M4OSA_NULL) { 3457cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bufferIn.m_bufferSize = samplesCountInBytes*sizeof(M4OSA_UInt16); 3458cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } else { 3459cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_ERROR(ANDROID_LOG_INFO, "VIDEO_EDITOR", 3460581cad2221cb367e9e3ef6991c565cd37ced994fJames Dong "M4MA_generateAudioGraphFile: Malloc failed for bufferIn.m_dataAddress 0x%lx", 3461cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4ERR_ALLOC); 3462cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return M4ERR_ALLOC; 3463cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3464cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* sample to be converted to BIG endian ; store the frame duration */ 3465cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi samplesCountBigEndian = ((frameDuration>>24)&0xff) | // move byte 3 to byte 0 3466cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ((frameDuration<<8)&0xff0000) | // move byte 1 to byte 2 3467cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ((frameDuration>>8)&0xff00) | // move byte 2 to byte 1 3468cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ((frameDuration<<24)&0xff000000); // byte 0 to byte 3 3469cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3470cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* write the samples per value supplied to out file */ 3471cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4OSA_fileWriteData (outFileHandle, (M4OSA_MemAddr8)&samplesCountBigEndian, 3472cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi sizeof(M4OSA_UInt32) ); 3473cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (err != M4NO_ERROR) { 3474cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(pEnv, "java/lang/IOException", "file write failed"); 3475cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3476cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3477cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3478cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* write UIn32 value 0 for no of values as place holder */ 3479cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi samplesCountBigEndian = 0; /* reusing local var */ 3480cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4OSA_fileWriteData (outFileHandle, (M4OSA_MemAddr8)&samplesCountBigEndian, 3481cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi sizeof(M4OSA_UInt32) ); 3482cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (err != M4NO_ERROR) { 3483cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(pEnv, "java/lang/IOException", "file write failed"); 3484cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3485cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3486cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* loop until EOF */ 3487cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi do 3488cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 34893feb41ff6f617768eb25c1b69c473d33f4f2f37bShyam Pallapothu memset((void *)bufferIn.m_dataAddress,0,bufferIn.m_bufferSize); 3490cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3491cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi numBytesToRead = samplesCountInBytes; 3492cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3493cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4OSA_fileReadData( inputFileHandle, 3494cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_MemAddr8)bufferIn.m_dataAddress, 3495cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi &numBytesToRead ); 3496cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3497cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (err != M4NO_ERROR) { 3498cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // if out value of bytes-read is 0, break 3499cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ( numBytesToRead == 0) { 3500581cad2221cb367e9e3ef6991c565cd37ced994fJames Dong VIDEOEDIT_LOG_ERROR(ANDROID_LOG_INFO, "VIDEO_EDITOR", "numBytesToRead 0x%lx", 3501cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi numBytesToRead); 3502cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi break; /* stop if file is empty or EOF */ 3503cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3504cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3505cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3506cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ptr16 = (M4OSA_Int16*)bufferIn.m_dataAddress; 3507cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3508cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi peakVolumeDbValue = 0; 3509cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi index = 0; 3510cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3511cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // loop through half the lenght frame bytes read 'cause its 16 bits samples 3512cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi while (index < (numBytesToRead / 2)) { 3513cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* absolute values of 16 bit sample */ 3514cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (ptr16[index] < 0) { 3515cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ptr16[index] = -(ptr16[index]); 3516cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3517cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi peakVolumeDbValue = (peakVolumeDbValue > (M4OSA_UInt32)ptr16[index] ?\ 3518cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi peakVolumeDbValue : (M4OSA_UInt32)ptr16[index]); 3519cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi index++; 3520cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3521cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3522cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // move 7 bits , ignore sign bit 3523cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbValue = (peakVolumeDbValue >> 7); 3524cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi dbValue = logLookUp[(M4OSA_UInt8)dbValue]; 3525cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3526cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4OSA_fileWriteData (outFileHandle, (M4OSA_MemAddr8)&dbValue, sizeof(M4OSA_UInt8) ); 3527cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (err != M4NO_ERROR) { 3528cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_ERROR(ANDROID_LOG_INFO, "VIDEO_EDITOR", 3529cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "M4MA_generateAudioGraphFile : File write failed"); 3530cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi break; 3531cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3532cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3533cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi volumeValuesCount ++; 3534cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi totalBytesRead += numBytesToRead; 3535cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3536cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ((((totalBytesRead*100)/fileSize)) != prevProgress) { 3537cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ( (pContext->threadProgress != prevProgress) && (prevProgress != 0 )) { 3538cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //pContext->threadProgress = prevProgress; 3539cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //onWveformProgressUpdateMethodId(prevProgress, 0); 3540cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //LVME_callAudioGraphOnProgressUpdate(pContext, 0, prevProgress); 3541cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->CallVoidMethod(pContext->engine, 3542cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext->onAudioGraphProgressUpdateMethodId, 3543cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi prevProgress, 0); 3544cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "pContext->threadProgress %d", 3545cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi prevProgress); 3546cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3547cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3548cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi prevProgress = (((totalBytesRead*100)/fileSize)); 3549cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3550cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } while (numBytesToRead != 0); 3551cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3552581cad2221cb367e9e3ef6991c565cd37ced994fJames Dong VIDEOEDIT_LOG_ERROR(ANDROID_LOG_INFO, "VIDEO_EDITOR", "loop 0x%lx", volumeValuesCount); 3553cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3554cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* if some error occured in fwrite */ 3555cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (numBytesToRead != 0) { 3556cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi //err = -1; 3557cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(pEnv, "java/lang/IOException", "numBytesToRead != 0 ; file write failed"); 3558cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3559cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3560cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* write the count in place holder after seek */ 3561cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi seekPos = sizeof(M4OSA_UInt32); 3562cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4OSA_fileWriteSeek(outFileHandle, M4OSA_kFileSeekBeginning, 3563cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi &seekPos /* after samples per value */); 3564cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ( err != M4NO_ERROR) { 3565cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(pEnv, "java/lang/IOException", "file seek failed"); 3566cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } else { 3567cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi volumeValuesCount = ((volumeValuesCount>>24)&0xff) | // move byte 3 to byte 0 3568cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ((volumeValuesCount<<8)&0xff0000) | // move byte 1 to byte 2 3569cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ((volumeValuesCount>>8)&0xff00) | // move byte 2 to byte 1 3570cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ((volumeValuesCount<<24)&0xff000000); // byte 0 to byte 3 3571cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3572cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi err = M4OSA_fileWriteData (outFileHandle, (M4OSA_MemAddr8)&volumeValuesCount, 3573cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi sizeof(M4OSA_UInt32) ); 3574cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if ( err != M4NO_ERROR) { 3575cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jniThrowException(pEnv, "java/lang/IOException", "file write failed"); 3576cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3577cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3578cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3579cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /****************************************************************************** 3580cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi CLOSE AND FREE ALLOCATIONS 3581cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi *******************************************************************************/ 3582c0125dd4f1f8bb03ad16138f86d55ed3305240c4Shyam Pallapothu free(bufferIn.m_dataAddress); 3583cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileReadClose(inputFileHandle); 3584cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_fileWriteClose(outFileHandle); 3585cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* final finish callback */ 3586cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pEnv->CallVoidMethod(pContext->engine, pContext->onAudioGraphProgressUpdateMethodId, 100, 0); 3587cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3588cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* EXIT */ 3589cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "EXIT - M4MA_generateAudioGraphFile"); 3590cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3591cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return err; 3592cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 3593cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3594cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargistatic int videoEditor_generateAudioWaveFormSync (JNIEnv* pEnv, jobject thiz, 3595cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring pcmfilePath, 3596cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jstring outGraphfilePath, 3597cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint frameDuration, jint channels, 3598cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint samplesCount) 3599cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 3600cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi M4OSA_ERR result = M4NO_ERROR; 3601cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ManualEditContext* pContext = M4OSA_NULL; 3602cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool needToBeLoaded = true; 3603176dde85a0ba838c1aed4148473743d964edbaecChih-Chung Chang const char *pPCMFilePath, *pStringOutAudioGraphFile; 3604cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3605cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", 3606cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_generateAudioWaveFormSync() "); 3607cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3608cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* Get the context. */ 3609cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext = (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded, pEnv, thiz); 3610cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pContext == M4OSA_NULL) { 3611cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", 3612cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_generateAudioWaveFormSync() - pContext is NULL "); 3613cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3614cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3615cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", 3616cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_generateAudioWaveFormSync Retrieving pStringOutAudioGraphFile"); 3617cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3618176dde85a0ba838c1aed4148473743d964edbaecChih-Chung Chang pPCMFilePath = pEnv->GetStringUTFChars(pcmfilePath, NULL); 3619cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pPCMFilePath == M4OSA_NULL) { 3620176dde85a0ba838c1aed4148473743d964edbaecChih-Chung Chang jniThrowException(pEnv, "java/lang/RuntimeException", 3621176dde85a0ba838c1aed4148473743d964edbaecChih-Chung Chang "Input string PCMFilePath is null"); 3622176dde85a0ba838c1aed4148473743d964edbaecChih-Chung Chang result = M4ERR_PARAMETER; 3623176dde85a0ba838c1aed4148473743d964edbaecChih-Chung Chang goto out; 3624cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3625cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3626176dde85a0ba838c1aed4148473743d964edbaecChih-Chung Chang pStringOutAudioGraphFile = pEnv->GetStringUTFChars(outGraphfilePath, NULL); 3627cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pStringOutAudioGraphFile == M4OSA_NULL) { 3628176dde85a0ba838c1aed4148473743d964edbaecChih-Chung Chang jniThrowException(pEnv, "java/lang/RuntimeException", 3629176dde85a0ba838c1aed4148473743d964edbaecChih-Chung Chang "Input string outGraphfilePath is null"); 3630176dde85a0ba838c1aed4148473743d964edbaecChih-Chung Chang result = M4ERR_PARAMETER; 3631176dde85a0ba838c1aed4148473743d964edbaecChih-Chung Chang goto out2; 3632cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3633cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3634cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", 3635cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_generateAudioWaveFormSync Generate the waveform data %s %d %d %d", 3636cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pStringOutAudioGraphFile, frameDuration, channels, samplesCount); 3637cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3638cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi /* Generate the waveform */ 3639cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = M4MA_generateAudioGraphFile(pEnv, (M4OSA_Char*) pPCMFilePath, 3640cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_Char*) pStringOutAudioGraphFile, 3641cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_UInt32) samplesCount, 3642cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_UInt32) channels, 3643cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi (M4OSA_UInt32)frameDuration, 3644cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi pContext); 3645cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3646176dde85a0ba838c1aed4148473743d964edbaecChih-Chung Chang pEnv->ReleaseStringUTFChars(outGraphfilePath, pStringOutAudioGraphFile); 3647cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3648176dde85a0ba838c1aed4148473743d964edbaecChih-Chung Changout2: 364991ba3a0033f1ed7f26fc9e8cd9088479c7de134aSantosh Madhava if (pPCMFilePath != NULL) { 365091ba3a0033f1ed7f26fc9e8cd9088479c7de134aSantosh Madhava pEnv->ReleaseStringUTFChars(pcmfilePath, pPCMFilePath); 365191ba3a0033f1ed7f26fc9e8cd9088479c7de134aSantosh Madhava } 365291ba3a0033f1ed7f26fc9e8cd9088479c7de134aSantosh Madhava 3653176dde85a0ba838c1aed4148473743d964edbaecChih-Chung Changout: 3654cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", 3655cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi "videoEditor_generateAudioWaveFormSync pContext->bSkipState "); 3656cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3657cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return result; 3658cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 3659cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3660cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi/******** End Audio Graph *******/ 3661cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargijint JNI_OnLoad( 3662cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi JavaVM* pVm, 3663cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi void* pReserved) 3664cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi{ 3665cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi void* pEnv = NULL; 3666cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi bool needToBeInitialized = true; 3667cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi jint result = -1; 3668cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3669cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "JNI_OnLoad()"); 3670cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3671cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Add a text marker (the condition must always be true). 3672cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ADD_TEXT_MARKER_FUN(NULL != pVm) 3673cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3674cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Check the JNI version. 3675cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (pVm->GetEnv(&pEnv, JNI_VERSION_1_4) == JNI_OK) 3676cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 3677cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Add a code marker (the condition must always be true). 3678cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi ADD_CODE_MARKER_FUN(NULL != pEnv) 3679cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3680cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Register the manual edit JNI methods. 3681cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (videoEditor_registerManualEditMethods((JNIEnv*)pEnv) == 0) 3682cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 3683cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Initialize the classes. 3684cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi videoEditClasses_init(&needToBeInitialized, (JNIEnv*)pEnv); 3685cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi if (needToBeInitialized) 3686cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi { 3687cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Success, return valid version number. 3688cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi result = JNI_VERSION_1_4; 3689cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3690cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3691cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi } 3692cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3693cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi // Return the result. 3694cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi return(result); 3695cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi} 3696cd196d3727db641e581d4223815367a5ca5d5637Dharmaray Kundargi 3697