xref: /aosp_15_r20/frameworks/av/media/libmediahelper/AudioParameter.cpp (revision ec779b8e0859a360c3d303172224686826e6e0e1)
1*ec779b8eSAndroid Build Coastguard Worker /*
2*ec779b8eSAndroid Build Coastguard Worker  * Copyright (C) 2006-2011 The Android Open Source Project
3*ec779b8eSAndroid Build Coastguard Worker  *
4*ec779b8eSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*ec779b8eSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*ec779b8eSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*ec779b8eSAndroid Build Coastguard Worker  *
8*ec779b8eSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*ec779b8eSAndroid Build Coastguard Worker  *
10*ec779b8eSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*ec779b8eSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*ec779b8eSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*ec779b8eSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*ec779b8eSAndroid Build Coastguard Worker  * limitations under the License.
15*ec779b8eSAndroid Build Coastguard Worker  */
16*ec779b8eSAndroid Build Coastguard Worker 
17*ec779b8eSAndroid Build Coastguard Worker #define LOG_TAG "AudioParameter"
18*ec779b8eSAndroid Build Coastguard Worker //#define LOG_NDEBUG 0
19*ec779b8eSAndroid Build Coastguard Worker 
20*ec779b8eSAndroid Build Coastguard Worker #include <utils/Log.h>
21*ec779b8eSAndroid Build Coastguard Worker 
22*ec779b8eSAndroid Build Coastguard Worker #include <media/AudioParameter.h>
23*ec779b8eSAndroid Build Coastguard Worker #include <hardware/audio.h>
24*ec779b8eSAndroid Build Coastguard Worker #include <system/audio.h>
25*ec779b8eSAndroid Build Coastguard Worker 
26*ec779b8eSAndroid Build Coastguard Worker namespace android {
27*ec779b8eSAndroid Build Coastguard Worker 
28*ec779b8eSAndroid Build Coastguard Worker // static
29*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyRouting = AUDIO_PARAMETER_STREAM_ROUTING;
30*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keySamplingRate = AUDIO_PARAMETER_STREAM_SAMPLING_RATE;
31*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyFormat = AUDIO_PARAMETER_STREAM_FORMAT;
32*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyChannels = AUDIO_PARAMETER_STREAM_CHANNELS;
33*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyFrameCount = AUDIO_PARAMETER_STREAM_FRAME_COUNT;
34*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyInputSource = AUDIO_PARAMETER_STREAM_INPUT_SOURCE;
35*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyScreenState = AUDIO_PARAMETER_KEY_SCREEN_STATE;
36*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyScreenRotation = AUDIO_PARAMETER_KEY_ROTATION;
37*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyClosing = AUDIO_PARAMETER_KEY_CLOSING;
38*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyExiting = AUDIO_PARAMETER_KEY_EXITING;
39*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyBtSco = AUDIO_PARAMETER_KEY_BT_SCO;
40*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyBtScoHeadsetName = AUDIO_PARAMETER_KEY_BT_SCO_HEADSET_NAME;
41*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyBtNrec = AUDIO_PARAMETER_KEY_BT_NREC;
42*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyBtScoWb = AUDIO_PARAMETER_KEY_BT_SCO_WB;
43*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyBtHfpEnable = AUDIO_PARAMETER_KEY_HFP_ENABLE;
44*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyBtHfpSamplingRate = AUDIO_PARAMETER_KEY_HFP_SET_SAMPLING_RATE;
45*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyBtHfpVolume = AUDIO_PARAMETER_KEY_HFP_VOLUME;
46*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyTtyMode = AUDIO_PARAMETER_KEY_TTY_MODE;
47*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::valueTtyModeOff = AUDIO_PARAMETER_VALUE_TTY_OFF;
48*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::valueTtyModeFull = AUDIO_PARAMETER_VALUE_TTY_FULL;
49*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::valueTtyModeHco = AUDIO_PARAMETER_VALUE_TTY_HCO;
50*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::valueTtyModeVco = AUDIO_PARAMETER_VALUE_TTY_VCO;
51*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyHacSetting = AUDIO_PARAMETER_KEY_HAC;
52*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::valueHacOff = AUDIO_PARAMETER_VALUE_HAC_OFF;
53*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::valueHacOn = AUDIO_PARAMETER_VALUE_HAC_ON;
54*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyHwAvSync = AUDIO_PARAMETER_HW_AV_SYNC;
55*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyPresentationId = AUDIO_PARAMETER_STREAM_PRESENTATION_ID;
56*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyProgramId = AUDIO_PARAMETER_STREAM_PROGRAM_ID;
57*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyAudioLanguagePreferred =
58*ec779b8eSAndroid Build Coastguard Worker         AUDIO_PARAMETER_KEY_AUDIO_LANGUAGE_PREFERRED;
59*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyMonoOutput = AUDIO_PARAMETER_MONO_OUTPUT;
60*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyStreamHwAvSync = AUDIO_PARAMETER_STREAM_HW_AV_SYNC;
61*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyDeviceConnect = AUDIO_PARAMETER_DEVICE_CONNECT;
62*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyDeviceDisconnect = AUDIO_PARAMETER_DEVICE_DISCONNECT;
63*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyStreamConnect = AUDIO_PARAMETER_DEVICE_CONNECT;
64*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyStreamDisconnect = AUDIO_PARAMETER_DEVICE_DISCONNECT;
65*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyStreamSupportedFormats = AUDIO_PARAMETER_STREAM_SUP_FORMATS;
66*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyStreamSupportedChannels = AUDIO_PARAMETER_STREAM_SUP_CHANNELS;
67*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyStreamSupportedSamplingRates =
68*ec779b8eSAndroid Build Coastguard Worker         AUDIO_PARAMETER_STREAM_SUP_SAMPLING_RATES;
69*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::valueOn = AUDIO_PARAMETER_VALUE_ON;
70*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::valueOff = AUDIO_PARAMETER_VALUE_OFF;
71*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::valueTrue = AUDIO_PARAMETER_VALUE_TRUE;
72*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::valueFalse = AUDIO_PARAMETER_VALUE_FALSE;
73*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::valueListSeparator = AUDIO_PARAMETER_VALUE_LIST_SEPARATOR;
74*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyBtA2dpSuspended = AUDIO_PARAMETER_KEY_BT_A2DP_SUSPENDED;
75*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyReconfigA2dp = AUDIO_PARAMETER_RECONFIG_A2DP;
76*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyReconfigA2dpSupported = AUDIO_PARAMETER_A2DP_RECONFIG_SUPPORTED;
77*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyBtLeSuspended = AUDIO_PARAMETER_KEY_BT_LE_SUSPENDED;
78*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyReconfigLe = AUDIO_PARAMETER_RECONFIG_LE;
79*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyReconfigLeSupported = AUDIO_PARAMETER_LE_RECONFIG_SUPPORTED;
80*ec779b8eSAndroid Build Coastguard Worker // const char * const AudioParameter::keyDeviceSupportedEncapsulationModes =
81*ec779b8eSAndroid Build Coastguard Worker //        AUDIO_PARAMETER_DEVICE_SUP_ENCAPSULATION_MODES;
82*ec779b8eSAndroid Build Coastguard Worker // const char * const AudioParameter::keyDeviceSupportedEncapsulationMetadataTypes =
83*ec779b8eSAndroid Build Coastguard Worker //        AUDIO_PARAMETER_DEVICE_SUP_ENCAPSULATION_METADATA_TYPES;
84*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyAdditionalOutputDeviceDelay =
85*ec779b8eSAndroid Build Coastguard Worker         AUDIO_PARAMETER_DEVICE_ADDITIONAL_OUTPUT_DELAY;
86*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyMaxAdditionalOutputDeviceDelay =
87*ec779b8eSAndroid Build Coastguard Worker         AUDIO_PARAMETER_DEVICE_MAX_ADDITIONAL_OUTPUT_DELAY;
88*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyOffloadCodecAverageBitRate = AUDIO_OFFLOAD_CODEC_AVG_BIT_RATE;
89*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyOffloadCodecSampleRate = AUDIO_OFFLOAD_CODEC_SAMPLE_RATE;
90*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyOffloadCodecChannels = AUDIO_OFFLOAD_CODEC_NUM_CHANNEL;
91*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyOffloadCodecDelaySamples = AUDIO_OFFLOAD_CODEC_DELAY_SAMPLES;
92*ec779b8eSAndroid Build Coastguard Worker const char * const AudioParameter::keyOffloadCodecPaddingSamples =
93*ec779b8eSAndroid Build Coastguard Worker         AUDIO_OFFLOAD_CODEC_PADDING_SAMPLES;
94*ec779b8eSAndroid Build Coastguard Worker 
AudioParameter(const String8 & keyValuePairs)95*ec779b8eSAndroid Build Coastguard Worker AudioParameter::AudioParameter(const String8& keyValuePairs)
96*ec779b8eSAndroid Build Coastguard Worker {
97*ec779b8eSAndroid Build Coastguard Worker     char *str = new char[keyValuePairs.length()+1];
98*ec779b8eSAndroid Build Coastguard Worker     mKeyValuePairs = keyValuePairs;
99*ec779b8eSAndroid Build Coastguard Worker     char *last;
100*ec779b8eSAndroid Build Coastguard Worker 
101*ec779b8eSAndroid Build Coastguard Worker     strcpy(str, keyValuePairs.c_str());
102*ec779b8eSAndroid Build Coastguard Worker     char *pair = strtok_r(str, ";", &last);
103*ec779b8eSAndroid Build Coastguard Worker     while (pair != NULL) {
104*ec779b8eSAndroid Build Coastguard Worker         if (strlen(pair) != 0) {
105*ec779b8eSAndroid Build Coastguard Worker             size_t eqIdx = strcspn(pair, "=");
106*ec779b8eSAndroid Build Coastguard Worker             String8 key = String8(pair, eqIdx);
107*ec779b8eSAndroid Build Coastguard Worker             String8 value;
108*ec779b8eSAndroid Build Coastguard Worker             if (eqIdx == strlen(pair)) {
109*ec779b8eSAndroid Build Coastguard Worker                 value = String8("");
110*ec779b8eSAndroid Build Coastguard Worker             } else {
111*ec779b8eSAndroid Build Coastguard Worker                 value = String8(pair + eqIdx + 1);
112*ec779b8eSAndroid Build Coastguard Worker             }
113*ec779b8eSAndroid Build Coastguard Worker             if (mParameters.indexOfKey(key) < 0) {
114*ec779b8eSAndroid Build Coastguard Worker                 mParameters.add(key, value);
115*ec779b8eSAndroid Build Coastguard Worker             } else {
116*ec779b8eSAndroid Build Coastguard Worker                 mParameters.replaceValueFor(key, value);
117*ec779b8eSAndroid Build Coastguard Worker             }
118*ec779b8eSAndroid Build Coastguard Worker         } else {
119*ec779b8eSAndroid Build Coastguard Worker             ALOGV("AudioParameter() cstor empty key value pair");
120*ec779b8eSAndroid Build Coastguard Worker         }
121*ec779b8eSAndroid Build Coastguard Worker         pair = strtok_r(NULL, ";", &last);
122*ec779b8eSAndroid Build Coastguard Worker     }
123*ec779b8eSAndroid Build Coastguard Worker 
124*ec779b8eSAndroid Build Coastguard Worker     delete[] str;
125*ec779b8eSAndroid Build Coastguard Worker }
126*ec779b8eSAndroid Build Coastguard Worker 
~AudioParameter()127*ec779b8eSAndroid Build Coastguard Worker AudioParameter::~AudioParameter()
128*ec779b8eSAndroid Build Coastguard Worker {
129*ec779b8eSAndroid Build Coastguard Worker     mParameters.clear();
130*ec779b8eSAndroid Build Coastguard Worker }
131*ec779b8eSAndroid Build Coastguard Worker 
toStringImpl(bool useValues) const132*ec779b8eSAndroid Build Coastguard Worker String8 AudioParameter::toStringImpl(bool useValues) const
133*ec779b8eSAndroid Build Coastguard Worker {
134*ec779b8eSAndroid Build Coastguard Worker     String8 str = String8("");
135*ec779b8eSAndroid Build Coastguard Worker 
136*ec779b8eSAndroid Build Coastguard Worker     size_t size = mParameters.size();
137*ec779b8eSAndroid Build Coastguard Worker     for (size_t i = 0; i < size; i++) {
138*ec779b8eSAndroid Build Coastguard Worker         str += mParameters.keyAt(i);
139*ec779b8eSAndroid Build Coastguard Worker         if (useValues) {
140*ec779b8eSAndroid Build Coastguard Worker             str += "=";
141*ec779b8eSAndroid Build Coastguard Worker             str += mParameters.valueAt(i);
142*ec779b8eSAndroid Build Coastguard Worker         }
143*ec779b8eSAndroid Build Coastguard Worker         if (i < (size - 1)) str += ";";
144*ec779b8eSAndroid Build Coastguard Worker     }
145*ec779b8eSAndroid Build Coastguard Worker     return str;
146*ec779b8eSAndroid Build Coastguard Worker }
147*ec779b8eSAndroid Build Coastguard Worker 
add(const String8 & key,const String8 & value)148*ec779b8eSAndroid Build Coastguard Worker status_t AudioParameter::add(const String8& key, const String8& value)
149*ec779b8eSAndroid Build Coastguard Worker {
150*ec779b8eSAndroid Build Coastguard Worker     if (mParameters.indexOfKey(key) < 0) {
151*ec779b8eSAndroid Build Coastguard Worker         mParameters.add(key, value);
152*ec779b8eSAndroid Build Coastguard Worker         return NO_ERROR;
153*ec779b8eSAndroid Build Coastguard Worker     } else {
154*ec779b8eSAndroid Build Coastguard Worker         mParameters.replaceValueFor(key, value);
155*ec779b8eSAndroid Build Coastguard Worker         return ALREADY_EXISTS;
156*ec779b8eSAndroid Build Coastguard Worker     }
157*ec779b8eSAndroid Build Coastguard Worker }
158*ec779b8eSAndroid Build Coastguard Worker 
addKey(const String8 & key)159*ec779b8eSAndroid Build Coastguard Worker status_t AudioParameter::addKey(const String8& key)
160*ec779b8eSAndroid Build Coastguard Worker {
161*ec779b8eSAndroid Build Coastguard Worker     return add(key, String8());
162*ec779b8eSAndroid Build Coastguard Worker }
163*ec779b8eSAndroid Build Coastguard Worker 
addInt(const String8 & key,const int value)164*ec779b8eSAndroid Build Coastguard Worker status_t AudioParameter::addInt(const String8& key, const int value)
165*ec779b8eSAndroid Build Coastguard Worker {
166*ec779b8eSAndroid Build Coastguard Worker     char str[12];
167*ec779b8eSAndroid Build Coastguard Worker     if (snprintf(str, 12, "%d", value) > 0) {
168*ec779b8eSAndroid Build Coastguard Worker         String8 str8 = String8(str);
169*ec779b8eSAndroid Build Coastguard Worker         return add(key, str8);
170*ec779b8eSAndroid Build Coastguard Worker     } else {
171*ec779b8eSAndroid Build Coastguard Worker         return BAD_VALUE;
172*ec779b8eSAndroid Build Coastguard Worker     }
173*ec779b8eSAndroid Build Coastguard Worker }
174*ec779b8eSAndroid Build Coastguard Worker 
addFloat(const String8 & key,const float value)175*ec779b8eSAndroid Build Coastguard Worker status_t AudioParameter::addFloat(const String8& key, const float value)
176*ec779b8eSAndroid Build Coastguard Worker {
177*ec779b8eSAndroid Build Coastguard Worker     char str[23];
178*ec779b8eSAndroid Build Coastguard Worker     if (snprintf(str, 23, "%.10f", value) > 0) {
179*ec779b8eSAndroid Build Coastguard Worker         String8 str8 = String8(str);
180*ec779b8eSAndroid Build Coastguard Worker         return add(key, str8);
181*ec779b8eSAndroid Build Coastguard Worker     } else {
182*ec779b8eSAndroid Build Coastguard Worker         return BAD_VALUE;
183*ec779b8eSAndroid Build Coastguard Worker     }
184*ec779b8eSAndroid Build Coastguard Worker }
185*ec779b8eSAndroid Build Coastguard Worker 
remove(const String8 & key)186*ec779b8eSAndroid Build Coastguard Worker status_t AudioParameter::remove(const String8& key)
187*ec779b8eSAndroid Build Coastguard Worker {
188*ec779b8eSAndroid Build Coastguard Worker     if (mParameters.indexOfKey(key) >= 0) {
189*ec779b8eSAndroid Build Coastguard Worker         mParameters.removeItem(key);
190*ec779b8eSAndroid Build Coastguard Worker         return NO_ERROR;
191*ec779b8eSAndroid Build Coastguard Worker     } else {
192*ec779b8eSAndroid Build Coastguard Worker         return BAD_VALUE;
193*ec779b8eSAndroid Build Coastguard Worker     }
194*ec779b8eSAndroid Build Coastguard Worker }
195*ec779b8eSAndroid Build Coastguard Worker 
get(const String8 & key,String8 & value) const196*ec779b8eSAndroid Build Coastguard Worker status_t AudioParameter::get(const String8& key, String8& value) const
197*ec779b8eSAndroid Build Coastguard Worker {
198*ec779b8eSAndroid Build Coastguard Worker     if (mParameters.indexOfKey(key) >= 0) {
199*ec779b8eSAndroid Build Coastguard Worker         value = mParameters.valueFor(key);
200*ec779b8eSAndroid Build Coastguard Worker         return NO_ERROR;
201*ec779b8eSAndroid Build Coastguard Worker     } else {
202*ec779b8eSAndroid Build Coastguard Worker         return BAD_VALUE;
203*ec779b8eSAndroid Build Coastguard Worker     }
204*ec779b8eSAndroid Build Coastguard Worker }
205*ec779b8eSAndroid Build Coastguard Worker 
getInt(const String8 & key,int & value) const206*ec779b8eSAndroid Build Coastguard Worker status_t AudioParameter::getInt(const String8& key, int& value) const
207*ec779b8eSAndroid Build Coastguard Worker {
208*ec779b8eSAndroid Build Coastguard Worker     String8 str8;
209*ec779b8eSAndroid Build Coastguard Worker     status_t result = get(key, str8);
210*ec779b8eSAndroid Build Coastguard Worker     value = 0;
211*ec779b8eSAndroid Build Coastguard Worker     if (result == NO_ERROR) {
212*ec779b8eSAndroid Build Coastguard Worker         int val;
213*ec779b8eSAndroid Build Coastguard Worker         if (sscanf(str8.c_str(), "%d", &val) == 1) {
214*ec779b8eSAndroid Build Coastguard Worker             value = val;
215*ec779b8eSAndroid Build Coastguard Worker         } else {
216*ec779b8eSAndroid Build Coastguard Worker             result = INVALID_OPERATION;
217*ec779b8eSAndroid Build Coastguard Worker         }
218*ec779b8eSAndroid Build Coastguard Worker     }
219*ec779b8eSAndroid Build Coastguard Worker     return result;
220*ec779b8eSAndroid Build Coastguard Worker }
221*ec779b8eSAndroid Build Coastguard Worker 
getFloat(const String8 & key,float & value) const222*ec779b8eSAndroid Build Coastguard Worker status_t AudioParameter::getFloat(const String8& key, float& value) const
223*ec779b8eSAndroid Build Coastguard Worker {
224*ec779b8eSAndroid Build Coastguard Worker     String8 str8;
225*ec779b8eSAndroid Build Coastguard Worker     status_t result = get(key, str8);
226*ec779b8eSAndroid Build Coastguard Worker     value = 0;
227*ec779b8eSAndroid Build Coastguard Worker     if (result == NO_ERROR) {
228*ec779b8eSAndroid Build Coastguard Worker         float val;
229*ec779b8eSAndroid Build Coastguard Worker         if (sscanf(str8.c_str(), "%f", &val) == 1) {
230*ec779b8eSAndroid Build Coastguard Worker             value = val;
231*ec779b8eSAndroid Build Coastguard Worker         } else {
232*ec779b8eSAndroid Build Coastguard Worker             result = INVALID_OPERATION;
233*ec779b8eSAndroid Build Coastguard Worker         }
234*ec779b8eSAndroid Build Coastguard Worker     }
235*ec779b8eSAndroid Build Coastguard Worker     return result;
236*ec779b8eSAndroid Build Coastguard Worker }
237*ec779b8eSAndroid Build Coastguard Worker 
getAt(size_t index,String8 & key) const238*ec779b8eSAndroid Build Coastguard Worker status_t AudioParameter::getAt(size_t index, String8& key) const
239*ec779b8eSAndroid Build Coastguard Worker {
240*ec779b8eSAndroid Build Coastguard Worker     if (mParameters.size() > index) {
241*ec779b8eSAndroid Build Coastguard Worker         key = mParameters.keyAt(index);
242*ec779b8eSAndroid Build Coastguard Worker         return NO_ERROR;
243*ec779b8eSAndroid Build Coastguard Worker     } else {
244*ec779b8eSAndroid Build Coastguard Worker         return BAD_VALUE;
245*ec779b8eSAndroid Build Coastguard Worker     }
246*ec779b8eSAndroid Build Coastguard Worker }
247*ec779b8eSAndroid Build Coastguard Worker 
getAt(size_t index,String8 & key,String8 & value) const248*ec779b8eSAndroid Build Coastguard Worker status_t AudioParameter::getAt(size_t index, String8& key, String8& value) const
249*ec779b8eSAndroid Build Coastguard Worker {
250*ec779b8eSAndroid Build Coastguard Worker     if (mParameters.size() > index) {
251*ec779b8eSAndroid Build Coastguard Worker         key = mParameters.keyAt(index);
252*ec779b8eSAndroid Build Coastguard Worker         value = mParameters.valueAt(index);
253*ec779b8eSAndroid Build Coastguard Worker         return NO_ERROR;
254*ec779b8eSAndroid Build Coastguard Worker     } else {
255*ec779b8eSAndroid Build Coastguard Worker         return BAD_VALUE;
256*ec779b8eSAndroid Build Coastguard Worker     }
257*ec779b8eSAndroid Build Coastguard Worker }
258*ec779b8eSAndroid Build Coastguard Worker 
containsKey(const String8 & key) const259*ec779b8eSAndroid Build Coastguard Worker bool AudioParameter::containsKey(const String8& key) const
260*ec779b8eSAndroid Build Coastguard Worker {
261*ec779b8eSAndroid Build Coastguard Worker     return mParameters.indexOfKey(key) >= 0;
262*ec779b8eSAndroid Build Coastguard Worker }
263*ec779b8eSAndroid Build Coastguard Worker 
264*ec779b8eSAndroid Build Coastguard Worker } // namespace android
265