diff options
author | wfeng6 <wei.feng@intel.com> | 2012-06-25 18:48:49 +0800 |
---|---|---|
committer | Shuo Gao <shuo.gao@intel.com> | 2012-08-17 10:22:57 +0800 |
commit | c96a7294a4ec7f807dbe0fd82a2ba2d58008304b (patch) | |
tree | e30c2ee7902f6d124092258f8eb3f047a88763f9 /media/jni | |
parent | a950daf5c14a0009c2c62e9c3e0e8d51eb0cf7d9 (diff) | |
download | frameworks_base-c96a7294a4ec7f807dbe0fd82a2ba2d58008304b.zip frameworks_base-c96a7294a4ec7f807dbe0fd82a2ba2d58008304b.tar.gz frameworks_base-c96a7294a4ec7f807dbe0fd82a2ba2d58008304b.tar.bz2 |
To avoid the JNI memory leaks in video editor codes
There is a protential memory leak in video editor JNI codes.
When importing so many video clips, the number of local reference
will exceed 512, which will cause the Dalvik virtual machine
crash. The patch will free each local reference when it's no
longer used to avoid memory leaks.
Change-Id: Iecd986c83f05a1103641746d6d43eef0a9c5ee40
Author: Wei Feng <wei.feng@intel.com>
Signed-off-by: Wei Feng <wei.feng@intel.com>
Singed-off-by: Shuo Gao <shuo.gao@intel.com>
Signed-off-by: Bruce Beare <bruce.j.beare@intel.com>
Signed-off-by: Jack Ren <jack.ren@intel.com>
Author-tracking-BZ: 40786
Diffstat (limited to 'media/jni')
-rwxr-xr-x | media/jni/mediaeditor/VideoEditorClasses.cpp | 9 | ||||
-rwxr-xr-x | media/jni/mediaeditor/VideoEditorJava.cpp | 3 | ||||
-rwxr-xr-x | media/jni/mediaeditor/VideoEditorMain.cpp | 5 |
3 files changed, 17 insertions, 0 deletions
diff --git a/media/jni/mediaeditor/VideoEditorClasses.cpp b/media/jni/mediaeditor/VideoEditorClasses.cpp index 4e0e0f2..4982a47 100755 --- a/media/jni/mediaeditor/VideoEditorClasses.cpp +++ b/media/jni/mediaeditor/VideoEditorClasses.cpp @@ -1853,6 +1853,9 @@ videoEditClasses_getEditSettings( // Get the clip settings. videoEditClasses_getClipSettings(pResult, pEnv, clipSettings, &pSettings->pClipList[i]); + + // Free the local references to avoid memory leaks + pEnv->DeleteLocalRef(clipSettings); } } } @@ -1877,6 +1880,9 @@ videoEditClasses_getEditSettings( // Get the transition settings. videoEditClasses_getTransitionSettings(pResult, pEnv, transitionSettings, &pSettings->pTransitionList[i]); + + // Free the local references to avoid memory leaks + pEnv->DeleteLocalRef(transitionSettings); } } } @@ -1900,6 +1906,9 @@ videoEditClasses_getEditSettings( // Get the effect settings. videoEditClasses_getEffectSettings(pResult, pEnv, effectSettings, &pSettings->Effects[i]); + + // Free the local references to avoid memory leaks + pEnv->DeleteLocalRef(effectSettings); } } } diff --git a/media/jni/mediaeditor/VideoEditorJava.cpp b/media/jni/mediaeditor/VideoEditorJava.cpp index ec8050f..bcf9099 100755 --- a/media/jni/mediaeditor/VideoEditorJava.cpp +++ b/media/jni/mediaeditor/VideoEditorJava.cpp @@ -387,6 +387,9 @@ videoEditJava_getString( (*pLength) = length; } } + + // Delete local references to avoid memory leaks + pEnv->DeleteLocalRef(string); } // Return the string. diff --git a/media/jni/mediaeditor/VideoEditorMain.cpp b/media/jni/mediaeditor/VideoEditorMain.cpp index 41ec120..41c28c0 100755 --- a/media/jni/mediaeditor/VideoEditorMain.cpp +++ b/media/jni/mediaeditor/VideoEditorMain.cpp @@ -380,6 +380,9 @@ getClipSetting( pEnv->GetIntField(object,fid); M4OSA_TRACE1_1("videoRotation = %d", pSettings->ClipProperties.videoRotationDegrees); + + // Free the local references to avoid memory leaks + pEnv->DeleteLocalRef(clazz); } static void jniPreviewProgressCallback (void* cookie, M4OSA_UInt32 msgType, @@ -1849,7 +1852,9 @@ videoEditor_populateSettings( "not initialized"); if (needToBeLoaded) { getClipSetting(pEnv,properties, pContext->pEditSettings->pClipList[i]); + pEnv->DeleteLocalRef(properties); } else { + pEnv->DeleteLocalRef(properties); goto videoEditor_populateSettings_cleanup; } } |