summaryrefslogtreecommitdiff
path: root/media/jni/android_media_MediaCodec.cpp
diff options
context:
space:
mode:
authorWonsik Kim <wonsik@google.com>2020-04-17 10:55:19 -0700
committerWonsik Kim <wonsik@google.com>2020-04-17 10:55:19 -0700
commitbedf6bac626a367ca7bd35c9f4ffc325bd4aeac5 (patch)
tree3f9ef797dc5356c7984fcf030d7646fe022e1090 /media/jni/android_media_MediaCodec.cpp
parentefda8ff71a3d54c1340f4b32a67ec9d9719a8111 (diff)
media: fix OutputFrame.getFormat()
JMediaCodec::getOutputFormat generates underlying Map object, not the MediaFormat object proper. Bug: 152618093 Bug: 154107928 Test: atest CtsMediaTestCases:MediaCodecBlockModelTest Change-Id: I9acddc14b6c4f25cfea616ec9724b7503539688b
Diffstat (limited to 'media/jni/android_media_MediaCodec.cpp')
-rw-r--r--media/jni/android_media_MediaCodec.cpp15
1 files changed, 10 insertions, 5 deletions
diff --git a/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp
index a31f177d66ab..cde7df22006e 100644
--- a/media/jni/android_media_MediaCodec.cpp
+++ b/media/jni/android_media_MediaCodec.cpp
@@ -733,14 +733,19 @@ status_t JMediaCodec::getOutputFrame(
}
}
- jobject format;
- err = getOutputFormat(env, index, &format);
+ jobject formatMap;
+ err = getOutputFormat(env, index, &formatMap);
if (err != OK) {
return err;
}
- env->SetObjectField(frame, gFields.outputFrameFormatID, format);
- env->DeleteLocalRef(format);
- format = nullptr;
+ ScopedLocalRef<jclass> mediaFormatClass{env, env->FindClass("android/media/MediaFormat")};
+ ScopedLocalRef<jobject> format{env, env->NewObject(
+ mediaFormatClass.get(),
+ env->GetMethodID(mediaFormatClass.get(), "<init>", "(Ljava/util/Map;)V"),
+ formatMap)};
+ env->SetObjectField(frame, gFields.outputFrameFormatID, format.get());
+ env->DeleteLocalRef(formatMap);
+ formatMap = nullptr;
sp<RefBase> obj;
if (buffer->meta()->findObject("changedKeys", &obj) && obj) {