summaryrefslogtreecommitdiffstats
path: root/media/jni
diff options
context:
space:
mode:
authorwfeng6 <wei.feng@intel.com>2012-06-25 18:48:49 +0800
committerShuo Gao <shuo.gao@intel.com>2012-08-17 10:22:57 +0800
commitc96a7294a4ec7f807dbe0fd82a2ba2d58008304b (patch)
treee30c2ee7902f6d124092258f8eb3f047a88763f9 /media/jni
parenta950daf5c14a0009c2c62e9c3e0e8d51eb0cf7d9 (diff)
downloadframeworks_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-xmedia/jni/mediaeditor/VideoEditorClasses.cpp9
-rwxr-xr-xmedia/jni/mediaeditor/VideoEditorJava.cpp3
-rwxr-xr-xmedia/jni/mediaeditor/VideoEditorMain.cpp5
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;
}
}