1db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin/* 2db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin * Copyright (C) 2006-2011 The Android Open Source Project 3db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin * 4db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin * Licensed under the Apache License, Version 2.0 (the "License"); 5db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin * you may not use this file except in compliance with the License. 6db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin * You may obtain a copy of the License at 7db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin * 8db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin * http://www.apache.org/licenses/LICENSE-2.0 9db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin * 10db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin * Unless required by applicable law or agreed to in writing, software 11db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin * distributed under the License is distributed on an "AS IS" BASIS, 12db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin * See the License for the specific language governing permissions and 14db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin * limitations under the License. 15db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin */ 16db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin 17db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin#define LOG_TAG "AudioParameter" 18db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin//#define LOG_NDEBUG 0 19db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin 20db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin#include <utils/Log.h> 21db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin 22db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin#include <media/AudioParameter.h> 23388360c786cdcbec650b79db65c734b8952dfec0Mikhail Naganov#include <system/audio.h> 24db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin 25db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavinnamespace android { 26db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin 27edf47a8cba2d1d8985b64bf4a4fac661ba34f35aGlenn Kasten// static 28edf47a8cba2d1d8985b64bf4a4fac661ba34f35aGlenn Kastenconst char * const AudioParameter::keyRouting = AUDIO_PARAMETER_STREAM_ROUTING; 29edf47a8cba2d1d8985b64bf4a4fac661ba34f35aGlenn Kastenconst char * const AudioParameter::keySamplingRate = AUDIO_PARAMETER_STREAM_SAMPLING_RATE; 30edf47a8cba2d1d8985b64bf4a4fac661ba34f35aGlenn Kastenconst char * const AudioParameter::keyFormat = AUDIO_PARAMETER_STREAM_FORMAT; 31edf47a8cba2d1d8985b64bf4a4fac661ba34f35aGlenn Kastenconst char * const AudioParameter::keyChannels = AUDIO_PARAMETER_STREAM_CHANNELS; 32edf47a8cba2d1d8985b64bf4a4fac661ba34f35aGlenn Kastenconst char * const AudioParameter::keyFrameCount = AUDIO_PARAMETER_STREAM_FRAME_COUNT; 33edf47a8cba2d1d8985b64bf4a4fac661ba34f35aGlenn Kastenconst char * const AudioParameter::keyInputSource = AUDIO_PARAMETER_STREAM_INPUT_SOURCE; 3428ed2f93324988767b5658eba7c1fa781a275183Glenn Kastenconst char * const AudioParameter::keyScreenState = AUDIO_PARAMETER_KEY_SCREEN_STATE; 3500260b5e6996b0a4b12f71c5b84e44adea040534Mikhail Naganovconst char * const AudioParameter::keyBtNrec = AUDIO_PARAMETER_KEY_BT_NREC; 3600260b5e6996b0a4b12f71c5b84e44adea040534Mikhail Naganovconst char * const AudioParameter::keyHwAvSync = AUDIO_PARAMETER_HW_AV_SYNC; 3700260b5e6996b0a4b12f71c5b84e44adea040534Mikhail Naganovconst char * const AudioParameter::keyMonoOutput = AUDIO_PARAMETER_MONO_OUTPUT; 3800260b5e6996b0a4b12f71c5b84e44adea040534Mikhail Naganovconst char * const AudioParameter::keyStreamHwAvSync = AUDIO_PARAMETER_STREAM_HW_AV_SYNC; 39388360c786cdcbec650b79db65c734b8952dfec0Mikhail Naganovconst char * const AudioParameter::keyStreamConnect = AUDIO_PARAMETER_DEVICE_CONNECT; 40388360c786cdcbec650b79db65c734b8952dfec0Mikhail Naganovconst char * const AudioParameter::keyStreamDisconnect = AUDIO_PARAMETER_DEVICE_DISCONNECT; 41388360c786cdcbec650b79db65c734b8952dfec0Mikhail Naganovconst char * const AudioParameter::keyStreamSupportedFormats = AUDIO_PARAMETER_STREAM_SUP_FORMATS; 42388360c786cdcbec650b79db65c734b8952dfec0Mikhail Naganovconst char * const AudioParameter::keyStreamSupportedChannels = AUDIO_PARAMETER_STREAM_SUP_CHANNELS; 43388360c786cdcbec650b79db65c734b8952dfec0Mikhail Naganovconst char * const AudioParameter::keyStreamSupportedSamplingRates = 44388360c786cdcbec650b79db65c734b8952dfec0Mikhail Naganov AUDIO_PARAMETER_STREAM_SUP_SAMPLING_RATES; 4500260b5e6996b0a4b12f71c5b84e44adea040534Mikhail Naganovconst char * const AudioParameter::valueOn = AUDIO_PARAMETER_VALUE_ON; 4600260b5e6996b0a4b12f71c5b84e44adea040534Mikhail Naganovconst char * const AudioParameter::valueOff = AUDIO_PARAMETER_VALUE_OFF; 47388360c786cdcbec650b79db65c734b8952dfec0Mikhail Naganovconst char * const AudioParameter::valueListSeparator = AUDIO_PARAMETER_VALUE_LIST_SEPARATOR; 48db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin 49db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima ZavinAudioParameter::AudioParameter(const String8& keyValuePairs) 50db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin{ 51db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin char *str = new char[keyValuePairs.length()+1]; 52db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin mKeyValuePairs = keyValuePairs; 53ff7455c0c1df0c316a306fb81ee660840d08b6d0seunghak.han char *last; 54db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin 55db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin strcpy(str, keyValuePairs.string()); 56ff7455c0c1df0c316a306fb81ee660840d08b6d0seunghak.han char *pair = strtok_r(str, ";", &last); 57db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin while (pair != NULL) { 58db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin if (strlen(pair) != 0) { 59db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin size_t eqIdx = strcspn(pair, "="); 60db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin String8 key = String8(pair, eqIdx); 61db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin String8 value; 62db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin if (eqIdx == strlen(pair)) { 63db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin value = String8(""); 64db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin } else { 65db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin value = String8(pair + eqIdx + 1); 66db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin } 67db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin if (mParameters.indexOfKey(key) < 0) { 68db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin mParameters.add(key, value); 69db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin } else { 70db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin mParameters.replaceValueFor(key, value); 71db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin } 72db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin } else { 733856b090cd04ba5dd4a59a12430ed724d5995909Steve Block ALOGV("AudioParameter() cstor empty key value pair"); 74db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin } 75ff7455c0c1df0c316a306fb81ee660840d08b6d0seunghak.han pair = strtok_r(NULL, ";", &last); 76db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin } 77db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin 78db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin delete[] str; 79db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin} 80db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin 81db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima ZavinAudioParameter::~AudioParameter() 82db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin{ 83db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin mParameters.clear(); 84db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin} 85db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin 86aad28fc2465edadca45b2953c92186cb26f5ef51Mikhail NaganovString8 AudioParameter::toStringImpl(bool useValues) const 87db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin{ 88db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin String8 str = String8(""); 89db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin 90db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin size_t size = mParameters.size(); 91db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin for (size_t i = 0; i < size; i++) { 92db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin str += mParameters.keyAt(i); 93aad28fc2465edadca45b2953c92186cb26f5ef51Mikhail Naganov if (useValues) { 94aad28fc2465edadca45b2953c92186cb26f5ef51Mikhail Naganov str += "="; 95aad28fc2465edadca45b2953c92186cb26f5ef51Mikhail Naganov str += mParameters.valueAt(i); 96aad28fc2465edadca45b2953c92186cb26f5ef51Mikhail Naganov } 97db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin if (i < (size - 1)) str += ";"; 98db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin } 99db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin return str; 100db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin} 101db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin 102db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavinstatus_t AudioParameter::add(const String8& key, const String8& value) 103db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin{ 104db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin if (mParameters.indexOfKey(key) < 0) { 105db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin mParameters.add(key, value); 106db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin return NO_ERROR; 107db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin } else { 108db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin mParameters.replaceValueFor(key, value); 109db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin return ALREADY_EXISTS; 110db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin } 111db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin} 112db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin 113aad28fc2465edadca45b2953c92186cb26f5ef51Mikhail Naganovstatus_t AudioParameter::addKey(const String8& key) 114aad28fc2465edadca45b2953c92186cb26f5ef51Mikhail Naganov{ 115aad28fc2465edadca45b2953c92186cb26f5ef51Mikhail Naganov return add(key, String8()); 116aad28fc2465edadca45b2953c92186cb26f5ef51Mikhail Naganov} 117aad28fc2465edadca45b2953c92186cb26f5ef51Mikhail Naganov 118db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavinstatus_t AudioParameter::addInt(const String8& key, const int value) 119db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin{ 120db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin char str[12]; 121db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin if (snprintf(str, 12, "%d", value) > 0) { 122db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin String8 str8 = String8(str); 123db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin return add(key, str8); 124db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin } else { 125db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin return BAD_VALUE; 126db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin } 127db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin} 128db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin 129db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavinstatus_t AudioParameter::addFloat(const String8& key, const float value) 130db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin{ 131db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin char str[23]; 132db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin if (snprintf(str, 23, "%.10f", value) > 0) { 133db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin String8 str8 = String8(str); 134db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin return add(key, str8); 135db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin } else { 136db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin return BAD_VALUE; 137db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin } 138db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin} 139db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin 140db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavinstatus_t AudioParameter::remove(const String8& key) 141db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin{ 142db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin if (mParameters.indexOfKey(key) >= 0) { 143db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin mParameters.removeItem(key); 144db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin return NO_ERROR; 145db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin } else { 146db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin return BAD_VALUE; 147db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin } 148db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin} 149db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin 150913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovstatus_t AudioParameter::get(const String8& key, String8& value) const 151db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin{ 152db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin if (mParameters.indexOfKey(key) >= 0) { 153db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin value = mParameters.valueFor(key); 154db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin return NO_ERROR; 155db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin } else { 156db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin return BAD_VALUE; 157db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin } 158db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin} 159db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin 160913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovstatus_t AudioParameter::getInt(const String8& key, int& value) const 161db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin{ 162db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin String8 str8; 163db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin status_t result = get(key, str8); 164db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin value = 0; 165db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin if (result == NO_ERROR) { 166db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin int val; 167db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin if (sscanf(str8.string(), "%d", &val) == 1) { 168db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin value = val; 169db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin } else { 170db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin result = INVALID_OPERATION; 171db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin } 172db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin } 173db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin return result; 174db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin} 175db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin 176913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovstatus_t AudioParameter::getFloat(const String8& key, float& value) const 177db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin{ 178db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin String8 str8; 179db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin status_t result = get(key, str8); 180db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin value = 0; 181db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin if (result == NO_ERROR) { 182db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin float val; 183db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin if (sscanf(str8.string(), "%f", &val) == 1) { 184db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin value = val; 185db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin } else { 186db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin result = INVALID_OPERATION; 187db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin } 188db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin } 189db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin return result; 190db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin} 191db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin 192f558e0218d2677a813c9c600886f673894eec927Mikhail Naganovstatus_t AudioParameter::getAt(size_t index, String8& key) const 193f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov{ 194f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov if (mParameters.size() > index) { 195f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov key = mParameters.keyAt(index); 196f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov return NO_ERROR; 197f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov } else { 198f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov return BAD_VALUE; 199f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov } 200f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov} 201f558e0218d2677a813c9c600886f673894eec927Mikhail Naganov 202913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovstatus_t AudioParameter::getAt(size_t index, String8& key, String8& value) const 203db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin{ 204db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin if (mParameters.size() > index) { 205db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin key = mParameters.keyAt(index); 206db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin value = mParameters.valueAt(index); 207db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin return NO_ERROR; 208db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin } else { 209db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin return BAD_VALUE; 210db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin } 211db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin} 212db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903Dima Zavin 21340bc906252974d0b389ae4a147232d0c9a97193fGlenn Kasten} // namespace android 214