diff --git a/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp index 362dfa0c88f43..947cfc038b7f9 100644 --- a/media/jni/android_media_MediaCodec.cpp +++ b/media/jni/android_media_MediaCodec.cpp @@ -735,14 +735,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 mediaFormatClass{env, env->FindClass("android/media/MediaFormat")}; + ScopedLocalRef format{env, env->NewObject( + mediaFormatClass.get(), + env->GetMethodID(mediaFormatClass.get(), "", "(Ljava/util/Map;)V"), + formatMap)}; + env->SetObjectField(frame, gFields.outputFrameFormatID, format.get()); + env->DeleteLocalRef(formatMap); + formatMap = nullptr; sp obj; if (buffer->meta()->findObject("changedKeys", &obj) && obj) {