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
This commit is contained in:
Wonsik Kim
2020-04-17 10:55:19 -07:00
parent efda8ff71a
commit bedf6bac62

View File

@@ -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) {