media: fix MediaCodec key-value converter

Bug: 152617514
Bug: 152617342
Bug: 152617976
Bug: 152617895
Bug: 152617259
Test: atest CtsMediaTestCases:MediaCodecBlockModelTest
Change-Id: Ibb8863c79b4f2a722b8c776555539eb5bd4ee519
diff --git a/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp
index a31f177..362dfa0 100644
--- a/media/jni/android_media_MediaCodec.cpp
+++ b/media/jni/android_media_MediaCodec.cpp
@@ -132,6 +132,8 @@
     jmethodID asReadOnlyBufferId;
     jmethodID positionId;
     jmethodID limitId;
+    jmethodID getPositionId;
+    jmethodID getLimitId;
 } gByteBufferInfo;
 
 static struct {
@@ -2033,13 +2035,11 @@
         if (env->IsInstanceOf(jvalue.get(), sFields.mStringClass)) {
             const char *tmp = env->GetStringUTFChars((jstring)jvalue.get(), nullptr);
             AString value;
-            if (tmp) {
-                value.setTo(tmp);
-            }
-            env->ReleaseStringUTFChars((jstring)jvalue.get(), tmp);
-            if (value.empty()) {
+            if (!tmp) {
                 return NO_MEMORY;
             }
+            value.setTo(tmp);
+            env->ReleaseStringUTFChars((jstring)jvalue.get(), tmp);
             result->setString(key.c_str(), value);
         } else if (env->IsInstanceOf(jvalue.get(), sFields.mIntegerClass)) {
             jint value = env->CallIntMethod(jvalue.get(), sFields.mIntegerValueId);
@@ -2051,8 +2051,8 @@
             jfloat value = env->CallFloatMethod(jvalue.get(), sFields.mFloatValueId);
             result->setFloat(key.c_str(), value);
         } else if (env->IsInstanceOf(jvalue.get(), gByteBufferInfo.clazz)) {
-            jint position = env->CallIntMethod(jvalue.get(), gByteBufferInfo.positionId);
-            jint limit = env->CallIntMethod(jvalue.get(), gByteBufferInfo.limitId);
+            jint position = env->CallIntMethod(jvalue.get(), gByteBufferInfo.getPositionId);
+            jint limit = env->CallIntMethod(jvalue.get(), gByteBufferInfo.getLimitId);
             sp<ABuffer> buffer{new ABuffer(limit - position)};
             void *data = env->GetDirectBufferAddress(jvalue.get());
             if (data != nullptr) {
@@ -2773,6 +2773,14 @@
             clazz.get(), "limit", "(I)Ljava/nio/Buffer;");
     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"));
     CHECK(clazz.get() != NULL);