android_media_Utils.cpp revision 3762c311729fe9f3af085c14c5c1fb471d994c03
1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/* 2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright 2011, The Android Open Source Project 3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * you may not use this file except in compliance with the License. 6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * You may obtain a copy of the License at 7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * See the License for the specific language governing permissions and 14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * limitations under the License. 15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// #define LOG_NDEBUG 0 18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define LOG_TAG "AndroidMediaUtils" 19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Log.h> 21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "android_media_Utils.h" 22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 24c5b2c0bf8007562536b822eb060fc54a01f8e08bMathias Agopian 25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectbool ConvertKeyValueArraysToKeyedVector( 26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project JNIEnv *env, jobjectArray keys, jobjectArray values, 27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project KeyedVector<String8, String8>* keyedVector) { 28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int nKeyValuePairs = 0; 30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project bool failed = false; 31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (keys != NULL && values != NULL) { 32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project nKeyValuePairs = env->GetArrayLength(keys); 33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project failed = (nKeyValuePairs != env->GetArrayLength(values)); 34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (!failed) { 37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project failed = ((keys != NULL && values == NULL) || 38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project (keys == NULL && values != NULL)); 39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (failed) { 42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ALOGE("keys and values arrays have different length"); 43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project jniThrowException(env, "java/lang/IllegalArgumentException", NULL); 44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return false; 45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project for (int i = 0; i < nKeyValuePairs; ++i) { 4820f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian // No need to check on the ArrayIndexOutOfBoundsException, since 4920f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian // it won't happen here. 50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project jstring key = (jstring) env->GetObjectArrayElement(keys, i); 5120f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian jstring value = (jstring) env->GetObjectArrayElement(values, i); 5220f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian 53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const char* keyStr = env->GetStringUTFChars(key, NULL); 54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (!keyStr) { // OutOfMemoryError 55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return false; 560926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopian } 57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const char* valueStr = env->GetStringUTFChars(value, NULL); 59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (!valueStr) { // OutOfMemoryError 6020f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian env->ReleaseStringUTFChars(key, keyStr); 61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return false; 62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project keyedVector->add(String8(keyStr), String8(valueStr)); 65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project env->ReleaseStringUTFChars(key, keyStr); 6720f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian env->ReleaseStringUTFChars(value, valueStr); 68bed9dd128dfbdc7d9dbca005078536dadc0b9359Mathias Agopian env->DeleteLocalRef(key); 69bed9dd128dfbdc7d9dbca005078536dadc0b9359Mathias Agopian env->DeleteLocalRef(value); 70bed9dd128dfbdc7d9dbca005078536dadc0b9359Mathias Agopian } 71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return true; 72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 73bed9dd128dfbdc7d9dbca005078536dadc0b9359Mathias Agopian 74bed9dd128dfbdc7d9dbca005078536dadc0b9359Mathias Agopian} // namespace android 75bed9dd128dfbdc7d9dbca005078536dadc0b9359Mathias Agopian 76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project