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