diff options
author | Wonsik Kim <wonsik@google.com> | 2020-04-17 10:55:19 -0700 |
---|---|---|
committer | Wonsik Kim <wonsik@google.com> | 2020-04-17 10:55:19 -0700 |
commit | bedf6bac626a367ca7bd35c9f4ffc325bd4aeac5 (patch) | |
tree | 3f9ef797dc5356c7984fcf030d7646fe022e1090 /media/jni/android_media_MediaCodec.cpp | |
parent | efda8ff71a3d54c1340f4b32a67ec9d9719a8111 (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.cpp | 15 |
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) { |