media: fix MediaCodec key-value converter am: c3c53cf3e7
Change-Id: I81ec645b0fb6a4bd13cd0cd2a8d79219331846ba
This commit is contained in:
@@ -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);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user