1*bebae9c0SAndroid Build Coastguard Worker /*
2*bebae9c0SAndroid Build Coastguard Worker * Copyright (C) 2010 The Android Open Source Project
3*bebae9c0SAndroid Build Coastguard Worker *
4*bebae9c0SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*bebae9c0SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*bebae9c0SAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*bebae9c0SAndroid Build Coastguard Worker *
8*bebae9c0SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*bebae9c0SAndroid Build Coastguard Worker *
10*bebae9c0SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*bebae9c0SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*bebae9c0SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*bebae9c0SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*bebae9c0SAndroid Build Coastguard Worker * limitations under the License.
15*bebae9c0SAndroid Build Coastguard Worker */
16*bebae9c0SAndroid Build Coastguard Worker
17*bebae9c0SAndroid Build Coastguard Worker #include "sles_allinclusive.h"
18*bebae9c0SAndroid Build Coastguard Worker
19*bebae9c0SAndroid Build Coastguard Worker /* AudioIODeviceCapabilities implementation */
20*bebae9c0SAndroid Build Coastguard Worker
21*bebae9c0SAndroid Build Coastguard Worker // NTH make it platform-configurable
22*bebae9c0SAndroid Build Coastguard Worker
23*bebae9c0SAndroid Build Coastguard Worker
IAudioIODeviceCapabilities_GetAvailableAudioInputs(SLAudioIODeviceCapabilitiesItf self,SLint32 * pNumInputs,SLuint32 * pInputDeviceIDs)24*bebae9c0SAndroid Build Coastguard Worker static SLresult IAudioIODeviceCapabilities_GetAvailableAudioInputs(
25*bebae9c0SAndroid Build Coastguard Worker SLAudioIODeviceCapabilitiesItf self, SLint32 *pNumInputs, SLuint32 *pInputDeviceIDs)
26*bebae9c0SAndroid Build Coastguard Worker {
27*bebae9c0SAndroid Build Coastguard Worker SL_ENTER_INTERFACE
28*bebae9c0SAndroid Build Coastguard Worker
29*bebae9c0SAndroid Build Coastguard Worker if (NULL == pNumInputs) {
30*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_PARAMETER_INVALID;
31*bebae9c0SAndroid Build Coastguard Worker } else {
32*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_SUCCESS;
33*bebae9c0SAndroid Build Coastguard Worker if (NULL != pInputDeviceIDs) {
34*bebae9c0SAndroid Build Coastguard Worker if (1 > *pNumInputs) {
35*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_BUFFER_INSUFFICIENT;
36*bebae9c0SAndroid Build Coastguard Worker } else {
37*bebae9c0SAndroid Build Coastguard Worker pInputDeviceIDs[0] = SL_DEFAULTDEVICEID_AUDIOINPUT;
38*bebae9c0SAndroid Build Coastguard Worker }
39*bebae9c0SAndroid Build Coastguard Worker }
40*bebae9c0SAndroid Build Coastguard Worker *pNumInputs = 1;
41*bebae9c0SAndroid Build Coastguard Worker }
42*bebae9c0SAndroid Build Coastguard Worker
43*bebae9c0SAndroid Build Coastguard Worker SL_LEAVE_INTERFACE
44*bebae9c0SAndroid Build Coastguard Worker }
45*bebae9c0SAndroid Build Coastguard Worker
46*bebae9c0SAndroid Build Coastguard Worker
IAudioIODeviceCapabilities_QueryAudioInputCapabilities(SLAudioIODeviceCapabilitiesItf self,SLuint32 deviceID,SLAudioInputDescriptor * pDescriptor)47*bebae9c0SAndroid Build Coastguard Worker static SLresult IAudioIODeviceCapabilities_QueryAudioInputCapabilities(
48*bebae9c0SAndroid Build Coastguard Worker SLAudioIODeviceCapabilitiesItf self, SLuint32 deviceID, SLAudioInputDescriptor *pDescriptor)
49*bebae9c0SAndroid Build Coastguard Worker {
50*bebae9c0SAndroid Build Coastguard Worker SL_ENTER_INTERFACE
51*bebae9c0SAndroid Build Coastguard Worker
52*bebae9c0SAndroid Build Coastguard Worker if (NULL == pDescriptor) {
53*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_PARAMETER_INVALID;
54*bebae9c0SAndroid Build Coastguard Worker } else {
55*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_SUCCESS;
56*bebae9c0SAndroid Build Coastguard Worker switch (deviceID) {
57*bebae9c0SAndroid Build Coastguard Worker case SL_DEFAULTDEVICEID_AUDIOINPUT:
58*bebae9c0SAndroid Build Coastguard Worker *pDescriptor = *AudioInput_id_descriptors[0].descriptor;
59*bebae9c0SAndroid Build Coastguard Worker break;
60*bebae9c0SAndroid Build Coastguard Worker default:
61*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_IO_ERROR;
62*bebae9c0SAndroid Build Coastguard Worker break;
63*bebae9c0SAndroid Build Coastguard Worker }
64*bebae9c0SAndroid Build Coastguard Worker }
65*bebae9c0SAndroid Build Coastguard Worker
66*bebae9c0SAndroid Build Coastguard Worker SL_LEAVE_INTERFACE
67*bebae9c0SAndroid Build Coastguard Worker }
68*bebae9c0SAndroid Build Coastguard Worker
69*bebae9c0SAndroid Build Coastguard Worker
IAudioIODeviceCapabilities_RegisterAvailableAudioInputsChangedCallback(SLAudioIODeviceCapabilitiesItf self,slAvailableAudioInputsChangedCallback callback,void * pContext)70*bebae9c0SAndroid Build Coastguard Worker static SLresult IAudioIODeviceCapabilities_RegisterAvailableAudioInputsChangedCallback(
71*bebae9c0SAndroid Build Coastguard Worker SLAudioIODeviceCapabilitiesItf self, slAvailableAudioInputsChangedCallback callback,
72*bebae9c0SAndroid Build Coastguard Worker void *pContext)
73*bebae9c0SAndroid Build Coastguard Worker {
74*bebae9c0SAndroid Build Coastguard Worker SL_ENTER_INTERFACE
75*bebae9c0SAndroid Build Coastguard Worker
76*bebae9c0SAndroid Build Coastguard Worker IAudioIODeviceCapabilities * thiz = (IAudioIODeviceCapabilities *) self;
77*bebae9c0SAndroid Build Coastguard Worker interface_lock_exclusive(thiz);
78*bebae9c0SAndroid Build Coastguard Worker thiz->mAvailableAudioInputsChangedCallback = callback;
79*bebae9c0SAndroid Build Coastguard Worker thiz->mAvailableAudioInputsChangedContext = pContext;
80*bebae9c0SAndroid Build Coastguard Worker interface_unlock_exclusive(thiz);
81*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_SUCCESS;
82*bebae9c0SAndroid Build Coastguard Worker
83*bebae9c0SAndroid Build Coastguard Worker SL_LEAVE_INTERFACE
84*bebae9c0SAndroid Build Coastguard Worker }
85*bebae9c0SAndroid Build Coastguard Worker
86*bebae9c0SAndroid Build Coastguard Worker
IAudioIODeviceCapabilities_GetAvailableAudioOutputs(SLAudioIODeviceCapabilitiesItf self,SLint32 * pNumOutputs,SLuint32 * pOutputDeviceIDs)87*bebae9c0SAndroid Build Coastguard Worker static SLresult IAudioIODeviceCapabilities_GetAvailableAudioOutputs(
88*bebae9c0SAndroid Build Coastguard Worker SLAudioIODeviceCapabilitiesItf self, SLint32 *pNumOutputs, SLuint32 *pOutputDeviceIDs)
89*bebae9c0SAndroid Build Coastguard Worker {
90*bebae9c0SAndroid Build Coastguard Worker SL_ENTER_INTERFACE
91*bebae9c0SAndroid Build Coastguard Worker
92*bebae9c0SAndroid Build Coastguard Worker if (NULL == pNumOutputs) {
93*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_PARAMETER_INVALID;
94*bebae9c0SAndroid Build Coastguard Worker } else {
95*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_SUCCESS;
96*bebae9c0SAndroid Build Coastguard Worker if (NULL != pOutputDeviceIDs) {
97*bebae9c0SAndroid Build Coastguard Worker if (2 > *pNumOutputs) {
98*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_BUFFER_INSUFFICIENT;
99*bebae9c0SAndroid Build Coastguard Worker // if 1 slot available, should still fill that
100*bebae9c0SAndroid Build Coastguard Worker } else {
101*bebae9c0SAndroid Build Coastguard Worker pOutputDeviceIDs[0] = DEVICE_ID_HEADSET;
102*bebae9c0SAndroid Build Coastguard Worker pOutputDeviceIDs[1] = DEVICE_ID_HANDSFREE;
103*bebae9c0SAndroid Build Coastguard Worker // SL_DEFAULTDEVICEID_AUDIOOUTPUT?
104*bebae9c0SAndroid Build Coastguard Worker }
105*bebae9c0SAndroid Build Coastguard Worker }
106*bebae9c0SAndroid Build Coastguard Worker *pNumOutputs = 2;
107*bebae9c0SAndroid Build Coastguard Worker }
108*bebae9c0SAndroid Build Coastguard Worker
109*bebae9c0SAndroid Build Coastguard Worker SL_LEAVE_INTERFACE
110*bebae9c0SAndroid Build Coastguard Worker }
111*bebae9c0SAndroid Build Coastguard Worker
112*bebae9c0SAndroid Build Coastguard Worker
IAudioIODeviceCapabilities_QueryAudioOutputCapabilities(SLAudioIODeviceCapabilitiesItf self,SLuint32 deviceID,SLAudioOutputDescriptor * pDescriptor)113*bebae9c0SAndroid Build Coastguard Worker static SLresult IAudioIODeviceCapabilities_QueryAudioOutputCapabilities(
114*bebae9c0SAndroid Build Coastguard Worker SLAudioIODeviceCapabilitiesItf self, SLuint32 deviceID, SLAudioOutputDescriptor *pDescriptor)
115*bebae9c0SAndroid Build Coastguard Worker {
116*bebae9c0SAndroid Build Coastguard Worker SL_ENTER_INTERFACE
117*bebae9c0SAndroid Build Coastguard Worker
118*bebae9c0SAndroid Build Coastguard Worker if (NULL == pDescriptor) {
119*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_PARAMETER_INVALID;
120*bebae9c0SAndroid Build Coastguard Worker } else {
121*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_SUCCESS;
122*bebae9c0SAndroid Build Coastguard Worker switch (deviceID) {
123*bebae9c0SAndroid Build Coastguard Worker case DEVICE_ID_HEADSET:
124*bebae9c0SAndroid Build Coastguard Worker *pDescriptor = *AudioOutput_id_descriptors[1].descriptor;
125*bebae9c0SAndroid Build Coastguard Worker break;
126*bebae9c0SAndroid Build Coastguard Worker case DEVICE_ID_HANDSFREE:
127*bebae9c0SAndroid Build Coastguard Worker *pDescriptor = *AudioOutput_id_descriptors[2].descriptor;
128*bebae9c0SAndroid Build Coastguard Worker break;
129*bebae9c0SAndroid Build Coastguard Worker // SL_DEFAULTDEVICEID_AUDIOOUTPUT?
130*bebae9c0SAndroid Build Coastguard Worker default:
131*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_IO_ERROR;
132*bebae9c0SAndroid Build Coastguard Worker break;
133*bebae9c0SAndroid Build Coastguard Worker }
134*bebae9c0SAndroid Build Coastguard Worker }
135*bebae9c0SAndroid Build Coastguard Worker
136*bebae9c0SAndroid Build Coastguard Worker SL_LEAVE_INTERFACE
137*bebae9c0SAndroid Build Coastguard Worker }
138*bebae9c0SAndroid Build Coastguard Worker
139*bebae9c0SAndroid Build Coastguard Worker
IAudioIODeviceCapabilities_RegisterAvailableAudioOutputsChangedCallback(SLAudioIODeviceCapabilitiesItf self,slAvailableAudioOutputsChangedCallback callback,void * pContext)140*bebae9c0SAndroid Build Coastguard Worker static SLresult IAudioIODeviceCapabilities_RegisterAvailableAudioOutputsChangedCallback(
141*bebae9c0SAndroid Build Coastguard Worker SLAudioIODeviceCapabilitiesItf self, slAvailableAudioOutputsChangedCallback callback,
142*bebae9c0SAndroid Build Coastguard Worker void *pContext)
143*bebae9c0SAndroid Build Coastguard Worker {
144*bebae9c0SAndroid Build Coastguard Worker SL_ENTER_INTERFACE
145*bebae9c0SAndroid Build Coastguard Worker
146*bebae9c0SAndroid Build Coastguard Worker IAudioIODeviceCapabilities * thiz = (IAudioIODeviceCapabilities *) self;
147*bebae9c0SAndroid Build Coastguard Worker interface_lock_exclusive(thiz);
148*bebae9c0SAndroid Build Coastguard Worker thiz->mAvailableAudioOutputsChangedCallback = callback;
149*bebae9c0SAndroid Build Coastguard Worker thiz->mAvailableAudioOutputsChangedContext = pContext;
150*bebae9c0SAndroid Build Coastguard Worker interface_unlock_exclusive(thiz);
151*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_SUCCESS;
152*bebae9c0SAndroid Build Coastguard Worker
153*bebae9c0SAndroid Build Coastguard Worker SL_LEAVE_INTERFACE
154*bebae9c0SAndroid Build Coastguard Worker }
155*bebae9c0SAndroid Build Coastguard Worker
156*bebae9c0SAndroid Build Coastguard Worker
IAudioIODeviceCapabilities_RegisterDefaultDeviceIDMapChangedCallback(SLAudioIODeviceCapabilitiesItf self,slDefaultDeviceIDMapChangedCallback callback,void * pContext)157*bebae9c0SAndroid Build Coastguard Worker static SLresult IAudioIODeviceCapabilities_RegisterDefaultDeviceIDMapChangedCallback(
158*bebae9c0SAndroid Build Coastguard Worker SLAudioIODeviceCapabilitiesItf self, slDefaultDeviceIDMapChangedCallback callback,
159*bebae9c0SAndroid Build Coastguard Worker void *pContext)
160*bebae9c0SAndroid Build Coastguard Worker {
161*bebae9c0SAndroid Build Coastguard Worker SL_ENTER_INTERFACE
162*bebae9c0SAndroid Build Coastguard Worker
163*bebae9c0SAndroid Build Coastguard Worker IAudioIODeviceCapabilities * thiz = (IAudioIODeviceCapabilities *) self;
164*bebae9c0SAndroid Build Coastguard Worker interface_lock_exclusive(thiz);
165*bebae9c0SAndroid Build Coastguard Worker thiz->mDefaultDeviceIDMapChangedCallback = callback;
166*bebae9c0SAndroid Build Coastguard Worker thiz->mDefaultDeviceIDMapChangedContext = pContext;
167*bebae9c0SAndroid Build Coastguard Worker interface_unlock_exclusive(thiz);
168*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_SUCCESS;
169*bebae9c0SAndroid Build Coastguard Worker
170*bebae9c0SAndroid Build Coastguard Worker SL_LEAVE_INTERFACE
171*bebae9c0SAndroid Build Coastguard Worker }
172*bebae9c0SAndroid Build Coastguard Worker
173*bebae9c0SAndroid Build Coastguard Worker
IAudioIODeviceCapabilities_GetAssociatedAudioInputs(SLAudioIODeviceCapabilitiesItf self,SLuint32 deviceID,SLint32 * pNumAudioInputs,SLuint32 * pAudioInputDeviceIDs)174*bebae9c0SAndroid Build Coastguard Worker static SLresult IAudioIODeviceCapabilities_GetAssociatedAudioInputs(
175*bebae9c0SAndroid Build Coastguard Worker SLAudioIODeviceCapabilitiesItf self, SLuint32 deviceID,
176*bebae9c0SAndroid Build Coastguard Worker SLint32 *pNumAudioInputs, SLuint32 *pAudioInputDeviceIDs)
177*bebae9c0SAndroid Build Coastguard Worker {
178*bebae9c0SAndroid Build Coastguard Worker SL_ENTER_INTERFACE
179*bebae9c0SAndroid Build Coastguard Worker
180*bebae9c0SAndroid Build Coastguard Worker if (NULL == pNumAudioInputs) {
181*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_PARAMETER_INVALID;
182*bebae9c0SAndroid Build Coastguard Worker } else {
183*bebae9c0SAndroid Build Coastguard Worker // Incomplete
184*bebae9c0SAndroid Build Coastguard Worker *pNumAudioInputs = 0;
185*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_SUCCESS;
186*bebae9c0SAndroid Build Coastguard Worker }
187*bebae9c0SAndroid Build Coastguard Worker
188*bebae9c0SAndroid Build Coastguard Worker SL_LEAVE_INTERFACE
189*bebae9c0SAndroid Build Coastguard Worker }
190*bebae9c0SAndroid Build Coastguard Worker
191*bebae9c0SAndroid Build Coastguard Worker
IAudioIODeviceCapabilities_GetAssociatedAudioOutputs(SLAudioIODeviceCapabilitiesItf self,SLuint32 deviceID,SLint32 * pNumAudioOutputs,SLuint32 * pAudioOutputDeviceIDs)192*bebae9c0SAndroid Build Coastguard Worker static SLresult IAudioIODeviceCapabilities_GetAssociatedAudioOutputs(
193*bebae9c0SAndroid Build Coastguard Worker SLAudioIODeviceCapabilitiesItf self, SLuint32 deviceID,
194*bebae9c0SAndroid Build Coastguard Worker SLint32 *pNumAudioOutputs, SLuint32 *pAudioOutputDeviceIDs)
195*bebae9c0SAndroid Build Coastguard Worker {
196*bebae9c0SAndroid Build Coastguard Worker SL_ENTER_INTERFACE
197*bebae9c0SAndroid Build Coastguard Worker
198*bebae9c0SAndroid Build Coastguard Worker if (NULL == pNumAudioOutputs) {
199*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_PARAMETER_INVALID;
200*bebae9c0SAndroid Build Coastguard Worker } else {
201*bebae9c0SAndroid Build Coastguard Worker // Incomplete
202*bebae9c0SAndroid Build Coastguard Worker *pNumAudioOutputs = 0;
203*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_SUCCESS;
204*bebae9c0SAndroid Build Coastguard Worker }
205*bebae9c0SAndroid Build Coastguard Worker
206*bebae9c0SAndroid Build Coastguard Worker SL_LEAVE_INTERFACE
207*bebae9c0SAndroid Build Coastguard Worker }
208*bebae9c0SAndroid Build Coastguard Worker
209*bebae9c0SAndroid Build Coastguard Worker
IAudioIODeviceCapabilities_GetDefaultAudioDevices(SLAudioIODeviceCapabilitiesItf self,SLuint32 defaultDeviceID,SLint32 * pNumAudioDevices,SLuint32 * pAudioDeviceIDs)210*bebae9c0SAndroid Build Coastguard Worker static SLresult IAudioIODeviceCapabilities_GetDefaultAudioDevices(
211*bebae9c0SAndroid Build Coastguard Worker SLAudioIODeviceCapabilitiesItf self, SLuint32 defaultDeviceID,
212*bebae9c0SAndroid Build Coastguard Worker SLint32 *pNumAudioDevices, SLuint32 *pAudioDeviceIDs)
213*bebae9c0SAndroid Build Coastguard Worker {
214*bebae9c0SAndroid Build Coastguard Worker SL_ENTER_INTERFACE
215*bebae9c0SAndroid Build Coastguard Worker
216*bebae9c0SAndroid Build Coastguard Worker if (NULL == pNumAudioDevices) {
217*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_PARAMETER_INVALID;
218*bebae9c0SAndroid Build Coastguard Worker } else {
219*bebae9c0SAndroid Build Coastguard Worker switch (defaultDeviceID) {
220*bebae9c0SAndroid Build Coastguard Worker case SL_DEFAULTDEVICEID_AUDIOINPUT:
221*bebae9c0SAndroid Build Coastguard Worker case SL_DEFAULTDEVICEID_AUDIOOUTPUT:
222*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_SUCCESS;
223*bebae9c0SAndroid Build Coastguard Worker if (NULL != pAudioDeviceIDs) {
224*bebae9c0SAndroid Build Coastguard Worker switch (defaultDeviceID) {
225*bebae9c0SAndroid Build Coastguard Worker case SL_DEFAULTDEVICEID_AUDIOINPUT:
226*bebae9c0SAndroid Build Coastguard Worker if (1 > *pNumAudioDevices) {
227*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_BUFFER_INSUFFICIENT;
228*bebae9c0SAndroid Build Coastguard Worker } else {
229*bebae9c0SAndroid Build Coastguard Worker pAudioDeviceIDs[0] = SL_DEFAULTDEVICEID_AUDIOINPUT;
230*bebae9c0SAndroid Build Coastguard Worker }
231*bebae9c0SAndroid Build Coastguard Worker *pNumAudioDevices = 1;
232*bebae9c0SAndroid Build Coastguard Worker break;
233*bebae9c0SAndroid Build Coastguard Worker case SL_DEFAULTDEVICEID_AUDIOOUTPUT:
234*bebae9c0SAndroid Build Coastguard Worker if (2 > *pNumAudioDevices) {
235*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_BUFFER_INSUFFICIENT;
236*bebae9c0SAndroid Build Coastguard Worker } else {
237*bebae9c0SAndroid Build Coastguard Worker pAudioDeviceIDs[0] = DEVICE_ID_HEADSET;
238*bebae9c0SAndroid Build Coastguard Worker pAudioDeviceIDs[1] = DEVICE_ID_HANDSFREE;
239*bebae9c0SAndroid Build Coastguard Worker // should be capable of returning first item if 1 slot
240*bebae9c0SAndroid Build Coastguard Worker }
241*bebae9c0SAndroid Build Coastguard Worker *pNumAudioDevices = 2;
242*bebae9c0SAndroid Build Coastguard Worker break;
243*bebae9c0SAndroid Build Coastguard Worker default:
244*bebae9c0SAndroid Build Coastguard Worker assert(SL_BOOLEAN_FALSE);
245*bebae9c0SAndroid Build Coastguard Worker *pNumAudioDevices = 0;
246*bebae9c0SAndroid Build Coastguard Worker break;
247*bebae9c0SAndroid Build Coastguard Worker }
248*bebae9c0SAndroid Build Coastguard Worker }
249*bebae9c0SAndroid Build Coastguard Worker break;
250*bebae9c0SAndroid Build Coastguard Worker default:
251*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_IO_ERROR;
252*bebae9c0SAndroid Build Coastguard Worker break;
253*bebae9c0SAndroid Build Coastguard Worker }
254*bebae9c0SAndroid Build Coastguard Worker }
255*bebae9c0SAndroid Build Coastguard Worker
256*bebae9c0SAndroid Build Coastguard Worker SL_LEAVE_INTERFACE
257*bebae9c0SAndroid Build Coastguard Worker }
258*bebae9c0SAndroid Build Coastguard Worker
259*bebae9c0SAndroid Build Coastguard Worker
IAudioIODeviceCapabilities_QuerySampleFormatsSupported(SLAudioIODeviceCapabilitiesItf self,SLuint32 deviceID,SLmilliHertz samplingRate,SLint32 * pSampleFormats,SLint32 * pNumOfSampleFormats)260*bebae9c0SAndroid Build Coastguard Worker static SLresult IAudioIODeviceCapabilities_QuerySampleFormatsSupported(
261*bebae9c0SAndroid Build Coastguard Worker SLAudioIODeviceCapabilitiesItf self, SLuint32 deviceID, SLmilliHertz samplingRate,
262*bebae9c0SAndroid Build Coastguard Worker SLint32 *pSampleFormats, SLint32 *pNumOfSampleFormats)
263*bebae9c0SAndroid Build Coastguard Worker {
264*bebae9c0SAndroid Build Coastguard Worker SL_ENTER_INTERFACE
265*bebae9c0SAndroid Build Coastguard Worker
266*bebae9c0SAndroid Build Coastguard Worker if (NULL == pNumOfSampleFormats) {
267*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_PARAMETER_INVALID;
268*bebae9c0SAndroid Build Coastguard Worker } else {
269*bebae9c0SAndroid Build Coastguard Worker switch (deviceID) {
270*bebae9c0SAndroid Build Coastguard Worker case SL_DEFAULTDEVICEID_AUDIOINPUT:
271*bebae9c0SAndroid Build Coastguard Worker case SL_DEFAULTDEVICEID_AUDIOOUTPUT:
272*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_SUCCESS;
273*bebae9c0SAndroid Build Coastguard Worker // incomplete
274*bebae9c0SAndroid Build Coastguard Worker switch (samplingRate) {
275*bebae9c0SAndroid Build Coastguard Worker case SL_SAMPLINGRATE_44_1:
276*bebae9c0SAndroid Build Coastguard Worker break;
277*bebae9c0SAndroid Build Coastguard Worker default:
278*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_IO_ERROR;
279*bebae9c0SAndroid Build Coastguard Worker break;
280*bebae9c0SAndroid Build Coastguard Worker }
281*bebae9c0SAndroid Build Coastguard Worker if (NULL != pSampleFormats) {
282*bebae9c0SAndroid Build Coastguard Worker if (1 > *pNumOfSampleFormats)
283*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_BUFFER_INSUFFICIENT;
284*bebae9c0SAndroid Build Coastguard Worker // incomplete
285*bebae9c0SAndroid Build Coastguard Worker pSampleFormats[0] = SL_PCMSAMPLEFORMAT_FIXED_16;
286*bebae9c0SAndroid Build Coastguard Worker }
287*bebae9c0SAndroid Build Coastguard Worker *pNumOfSampleFormats = 1;
288*bebae9c0SAndroid Build Coastguard Worker break;
289*bebae9c0SAndroid Build Coastguard Worker default:
290*bebae9c0SAndroid Build Coastguard Worker result = SL_RESULT_IO_ERROR;
291*bebae9c0SAndroid Build Coastguard Worker break;
292*bebae9c0SAndroid Build Coastguard Worker }
293*bebae9c0SAndroid Build Coastguard Worker }
294*bebae9c0SAndroid Build Coastguard Worker
295*bebae9c0SAndroid Build Coastguard Worker SL_LEAVE_INTERFACE
296*bebae9c0SAndroid Build Coastguard Worker }
297*bebae9c0SAndroid Build Coastguard Worker
298*bebae9c0SAndroid Build Coastguard Worker
299*bebae9c0SAndroid Build Coastguard Worker static const struct SLAudioIODeviceCapabilitiesItf_ IAudioIODeviceCapabilities_Itf = {
300*bebae9c0SAndroid Build Coastguard Worker IAudioIODeviceCapabilities_GetAvailableAudioInputs,
301*bebae9c0SAndroid Build Coastguard Worker IAudioIODeviceCapabilities_QueryAudioInputCapabilities,
302*bebae9c0SAndroid Build Coastguard Worker IAudioIODeviceCapabilities_RegisterAvailableAudioInputsChangedCallback,
303*bebae9c0SAndroid Build Coastguard Worker IAudioIODeviceCapabilities_GetAvailableAudioOutputs,
304*bebae9c0SAndroid Build Coastguard Worker IAudioIODeviceCapabilities_QueryAudioOutputCapabilities,
305*bebae9c0SAndroid Build Coastguard Worker IAudioIODeviceCapabilities_RegisterAvailableAudioOutputsChangedCallback,
306*bebae9c0SAndroid Build Coastguard Worker IAudioIODeviceCapabilities_RegisterDefaultDeviceIDMapChangedCallback,
307*bebae9c0SAndroid Build Coastguard Worker IAudioIODeviceCapabilities_GetAssociatedAudioInputs,
308*bebae9c0SAndroid Build Coastguard Worker IAudioIODeviceCapabilities_GetAssociatedAudioOutputs,
309*bebae9c0SAndroid Build Coastguard Worker IAudioIODeviceCapabilities_GetDefaultAudioDevices,
310*bebae9c0SAndroid Build Coastguard Worker IAudioIODeviceCapabilities_QuerySampleFormatsSupported
311*bebae9c0SAndroid Build Coastguard Worker };
312*bebae9c0SAndroid Build Coastguard Worker
IAudioIODeviceCapabilities_init(void * self)313*bebae9c0SAndroid Build Coastguard Worker void IAudioIODeviceCapabilities_init(void *self)
314*bebae9c0SAndroid Build Coastguard Worker {
315*bebae9c0SAndroid Build Coastguard Worker IAudioIODeviceCapabilities *thiz = (IAudioIODeviceCapabilities *) self;
316*bebae9c0SAndroid Build Coastguard Worker thiz->mItf = &IAudioIODeviceCapabilities_Itf;
317*bebae9c0SAndroid Build Coastguard Worker thiz->mAvailableAudioInputsChangedCallback = NULL;
318*bebae9c0SAndroid Build Coastguard Worker thiz->mAvailableAudioInputsChangedContext = NULL;
319*bebae9c0SAndroid Build Coastguard Worker thiz->mAvailableAudioOutputsChangedCallback = NULL;
320*bebae9c0SAndroid Build Coastguard Worker thiz->mAvailableAudioOutputsChangedContext = NULL;
321*bebae9c0SAndroid Build Coastguard Worker thiz->mDefaultDeviceIDMapChangedCallback = NULL;
322*bebae9c0SAndroid Build Coastguard Worker thiz->mDefaultDeviceIDMapChangedContext = NULL;
323*bebae9c0SAndroid Build Coastguard Worker }
324