media: fix MediaCodec key-value converter am: c3c53cf3e7

Change-Id: I81ec645b0fb6a4bd13cd0cd2a8d79219331846ba
This commit is contained in:
Wonsik Kim
2020-04-16 18:07:15 +00:00
committed by Automerger Merge Worker

View File

@@ -132,6 +132,8 @@ static struct {
jmethodID asReadOnlyBufferId; jmethodID asReadOnlyBufferId;
jmethodID positionId; jmethodID positionId;
jmethodID limitId; jmethodID limitId;
jmethodID getPositionId;
jmethodID getLimitId;
} gByteBufferInfo; } gByteBufferInfo;
static struct { static struct {
@@ -2033,13 +2035,11 @@ static status_t ConvertKeyValueListsToAMessage(
if (env->IsInstanceOf(jvalue.get(), sFields.mStringClass)) { if (env->IsInstanceOf(jvalue.get(), sFields.mStringClass)) {
const char *tmp = env->GetStringUTFChars((jstring)jvalue.get(), nullptr); const char *tmp = env->GetStringUTFChars((jstring)jvalue.get(), nullptr);
AString value; AString value;
if (tmp) { if (!tmp) {
value.setTo(tmp);
}
env->ReleaseStringUTFChars((jstring)jvalue.get(), tmp);
if (value.empty()) {
return NO_MEMORY; return NO_MEMORY;
} }
value.setTo(tmp);
env->ReleaseStringUTFChars((jstring)jvalue.get(), tmp);
result->setString(key.c_str(), value); result->setString(key.c_str(), value);
} else if (env->IsInstanceOf(jvalue.get(), sFields.mIntegerClass)) { } else if (env->IsInstanceOf(jvalue.get(), sFields.mIntegerClass)) {
jint value = env->CallIntMethod(jvalue.get(), sFields.mIntegerValueId); jint value = env->CallIntMethod(jvalue.get(), sFields.mIntegerValueId);
@@ -2051,8 +2051,8 @@ static status_t ConvertKeyValueListsToAMessage(
jfloat value = env->CallFloatMethod(jvalue.get(), sFields.mFloatValueId); jfloat value = env->CallFloatMethod(jvalue.get(), sFields.mFloatValueId);
result->setFloat(key.c_str(), value); result->setFloat(key.c_str(), value);
} else if (env->IsInstanceOf(jvalue.get(), gByteBufferInfo.clazz)) { } else if (env->IsInstanceOf(jvalue.get(), gByteBufferInfo.clazz)) {
jint position = env->CallIntMethod(jvalue.get(), gByteBufferInfo.positionId); jint position = env->CallIntMethod(jvalue.get(), gByteBufferInfo.getPositionId);
jint limit = env->CallIntMethod(jvalue.get(), gByteBufferInfo.limitId); jint limit = env->CallIntMethod(jvalue.get(), gByteBufferInfo.getLimitId);
sp<ABuffer> buffer{new ABuffer(limit - position)}; sp<ABuffer> buffer{new ABuffer(limit - position)};
void *data = env->GetDirectBufferAddress(jvalue.get()); void *data = env->GetDirectBufferAddress(jvalue.get());
if (data != nullptr) { if (data != nullptr) {
@@ -2773,6 +2773,14 @@ static void android_media_MediaCodec_native_init(JNIEnv *env, jclass) {
clazz.get(), "limit", "(I)Ljava/nio/Buffer;"); clazz.get(), "limit", "(I)Ljava/nio/Buffer;");
CHECK(gByteBufferInfo.limitId != NULL); CHECK(gByteBufferInfo.limitId != NULL);
gByteBufferInfo.getPositionId = env->GetMethodID(
clazz.get(), "position", "()I");
CHECK(gByteBufferInfo.getPositionId != NULL);
gByteBufferInfo.getLimitId = env->GetMethodID(
clazz.get(), "limit", "()I");
CHECK(gByteBufferInfo.getLimitId != NULL);
clazz.reset(env->FindClass("java/util/ArrayList")); clazz.reset(env->FindClass("java/util/ArrayList"));
CHECK(clazz.get() != NULL); CHECK(clazz.get() != NULL);