xref: /aosp_15_r20/frameworks/wilhelm/src/itf/IAudioIODeviceCapabilities.cpp (revision bebae9c0e76121f8312ccb50385c080b3a0b023c)
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