summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--media/jni/android_media_MediaCodec.cpp14
-rw-r--r--media/jni/android_media_MediaCodec.h1
2 files changed, 13 insertions, 2 deletions
diff --git a/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp
index b2b707b00829..98e68b8b53f2 100644
--- a/media/jni/android_media_MediaCodec.cpp
+++ b/media/jni/android_media_MediaCodec.cpp
@@ -232,6 +232,13 @@ void JMediaCodec::release() {
});
}
+void JMediaCodec::releaseAsync() {
+ if (mCodec != NULL) {
+ mCodec->releaseAsync();
+ }
+ mInitStatus = NO_INIT;
+}
+
JMediaCodec::~JMediaCodec() {
if (mLooper != NULL) {
/* MediaCodec and looper should have been released explicitly already
@@ -1114,7 +1121,10 @@ static sp<JMediaCodec> getMediaCodec(JNIEnv *env, jobject thiz) {
}
static void android_media_MediaCodec_release(JNIEnv *env, jobject thiz) {
- setMediaCodec(env, thiz, NULL);
+ sp<JMediaCodec> codec = getMediaCodec(env, thiz);
+ if (codec != NULL) {
+ codec->releaseAsync();
+ }
}
static void throwCodecException(JNIEnv *env, status_t err, int32_t actionCode, const char *msg) {
@@ -2889,7 +2899,7 @@ static void android_media_MediaCodec_native_setup(
static void android_media_MediaCodec_native_finalize(
JNIEnv *env, jobject thiz) {
- android_media_MediaCodec_release(env, thiz);
+ setMediaCodec(env, thiz, NULL);
}
// MediaCodec.LinearBlock
diff --git a/media/jni/android_media_MediaCodec.h b/media/jni/android_media_MediaCodec.h
index 8899fee7a73d..400ce1bc98e7 100644
--- a/media/jni/android_media_MediaCodec.h
+++ b/media/jni/android_media_MediaCodec.h
@@ -61,6 +61,7 @@ struct JMediaCodec : public AHandler {
void registerSelf();
void release();
+ void releaseAsync();
status_t enableOnFrameRenderedListener(jboolean enable);