25 #include "xaconfigextensionsitf.h" |
25 #include "xaconfigextensionsitf.h" |
26 #include "xaequalizeritf.h" |
26 #include "xaequalizeritf.h" |
27 #include "xavolumeitf.h" |
27 #include "xavolumeitf.h" |
28 #include "xaoutputmixitf.h" |
28 #include "xaoutputmixitf.h" |
29 #include "xathreadsafety.h" |
29 #include "xathreadsafety.h" |
|
30 #include "xaoutputmixadaptctx.h" |
|
31 #include "xacapabilitiesmgr.h" |
30 |
32 |
31 /* Static mapping of enumeration XAOMixInterfaces to interface iids */ |
33 /* Static mapping of enumeration XAOMixInterfaces to interface iids */ |
32 static const XAInterfaceID* xaOMixItfIIDs[OMIX_ITFCOUNT]={ |
34 static const XAInterfaceID* xaOMixItfIIDs[OMIX_ITFCOUNT]={ |
33 &XA_IID_OBJECT, |
35 &XA_IID_OBJECT, |
34 &XA_IID_DYNAMICINTERFACEMANAGEMENT, |
36 &XA_IID_DYNAMICINTERFACEMANAGEMENT, |
48 * XAuint32 numInterfaces, |
50 * XAuint32 numInterfaces, |
49 * const XAInterfaceID *pInterfaceIds, |
51 * const XAInterfaceID *pInterfaceIds, |
50 * const XAboolean *pInterfaceRequired) |
52 * const XAboolean *pInterfaceRequired) |
51 * Description: Create object |
53 * Description: Create object |
52 */ |
54 */ |
53 XAresult XAOMixImpl_CreateOutputMix(XAObjectItf *pMix, |
55 XAresult XAOMixImpl_CreateOutputMix(FrameworkMap* mapper, |
|
56 XACapabilities* capabilities, |
|
57 XAObjectItf *pMix, |
54 XAuint32 numInterfaces, |
58 XAuint32 numInterfaces, |
55 const XAInterfaceID *pInterfaceIds, |
59 const XAInterfaceID *pInterfaceIds, |
56 const XAboolean *pInterfaceRequired) |
60 const XAboolean *pInterfaceRequired) |
57 { |
61 { |
58 |
62 |
59 XAObjectItfImpl* pBaseObj = NULL; |
63 XAObjectItfImpl* pBaseObj = NULL; |
60 XAOMixImpl* pImpl = NULL; |
64 XAOMixImpl* pImpl = NULL; |
61 XAuint32 itfIdx = 0; |
65 XAuint32 itfIdx = 0; |
62 DEBUG_API("->XAOMixImpl_CreateOutputMix"); |
66 DEBUG_API("->XAOMixImpl_CreateOutputMix"); |
63 XA_IMPL_THREAD_SAFETY_ENTRY(XATSOutputMix); |
67 XA_IMPL_THREAD_SAFETY_ENTRY(XATSOutputMix); |
|
68 |
|
69 |
|
70 |
64 if(!pMix) |
71 if(!pMix) |
65 { |
72 { |
66 XA_IMPL_THREAD_SAFETY_EXIT(XATSOutputMix); |
73 XA_IMPL_THREAD_SAFETY_EXIT(XATSOutputMix); |
67 /* invalid parameter */ |
74 /* invalid parameter */ |
68 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
75 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
124 } |
131 } |
125 } |
132 } |
126 } |
133 } |
127 /* Mark interfaces that can be handled dynamically */ |
134 /* Mark interfaces that can be handled dynamically */ |
128 pBaseObj->interfaceMap[OMIX_EQUALIZERITF].isDynamic = XA_BOOLEAN_TRUE; |
135 pBaseObj->interfaceMap[OMIX_EQUALIZERITF].isDynamic = XA_BOOLEAN_TRUE; |
129 #ifdef _GSTREAMER_BACKEND_ |
136 |
130 /* Create outputmix adaptation context */ |
|
131 pImpl->adaptationCtx = XAOutputMixAdapt_Create(); |
|
132 #endif |
|
133 |
|
134 /* This code is put here to return Feature Not Supported since adaptation is not present*/ |
137 /* This code is put here to return Feature Not Supported since adaptation is not present*/ |
135 /*************************************************/ |
138 /*************************************************/ |
136 XAObjectItfImpl_Destroy((XAObjectItf)&(pBaseObj)); |
139 XAObjectItfImpl_Destroy((XAObjectItf)&(pBaseObj)); |
137 XA_IMPL_THREAD_SAFETY_EXIT(XATSOutputMix); |
140 XA_IMPL_THREAD_SAFETY_EXIT(XATSOutputMix); |
138 DEBUG_ERR("Required interface not found - abort creation!"); |
141 DEBUG_ERR("Required interface not found - abort creation!"); |
139 return XA_RESULT_FEATURE_UNSUPPORTED; |
142 return XA_RESULT_FEATURE_UNSUPPORTED; |
140 /*************************************************/ |
143 /*************************************************/ |
141 |
144 |
142 /* Set ObjectItf to point to newly created object */ |
145 /* // Create outputmix adaptation context |
143 /* |
146 pImpl->adaptationCtx = XAOutputMixAdapt_Create(); |
|
147 |
|
148 //Set ObjectItf to point to newly created object |
144 *pMix = (XAObjectItf)&(pBaseObj->self); |
149 *pMix = (XAObjectItf)&(pBaseObj->self); |
145 |
150 |
146 XA_IMPL_THREAD_SAFETY_EXIT(XATSOutputMix); |
151 XA_IMPL_THREAD_SAFETY_EXIT(XATSOutputMix); |
147 |
152 |
148 DEBUG_API("<-XAOMixImpl_CreateOutputMix"); |
153 DEBUG_API("<-XAOMixImpl_CreateOutputMix"); |
149 return XA_RESULT_SUCCESS; |
154 return XA_RESULT_SUCCESS;*/ |
150 */ |
|
151 } |
155 } |
152 |
156 |
153 /* |
157 /* |
154 * XAresult XAOMixImpl_QueryNumSupportedInterfaces(XAuint32 * pNumSupportedInterfaces) |
158 * XAresult XAOMixImpl_QueryNumSupportedInterfaces(XAuint32 * pNumSupportedInterfaces) |
155 * Description: Query number of supported interfaces |
159 * Description: Query number of supported interfaces |
185 DEBUG_API("<-XAOMixImpl_QuerySupportedInterfaces"); |
189 DEBUG_API("<-XAOMixImpl_QuerySupportedInterfaces"); |
186 return XA_RESULT_PARAMETER_INVALID; |
190 return XA_RESULT_PARAMETER_INVALID; |
187 } |
191 } |
188 else |
192 else |
189 { |
193 { |
190 #ifdef _GSTREAMER_BACKEND_ |
194 |
191 *pInterfaceId = *(xaOMixItfIIDs[index]); |
195 *pInterfaceId = *(xaOMixItfIIDs[index]); |
192 #endif |
196 |
193 DEBUG_API("<-XAOMixImpl_QuerySupportedInterfaces"); |
197 DEBUG_API("<-XAOMixImpl_QuerySupportedInterfaces"); |
194 return XA_RESULT_SUCCESS; |
198 return XA_RESULT_SUCCESS; |
195 } |
199 } |
196 } |
200 } |
197 |
201 |
204 * Create and initialize implementation-specific variables. |
208 * Create and initialize implementation-specific variables. |
205 * Called from base object XAObjectItfImpl |
209 * Called from base object XAObjectItfImpl |
206 */ |
210 */ |
207 XAresult XAOMixImpl_DoRealize(XAObjectItf self) |
211 XAresult XAOMixImpl_DoRealize(XAObjectItf self) |
208 { |
212 { |
209 #ifdef _GSTREAMER_BACKEND_ |
213 |
210 XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self); |
214 XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self); |
211 XAresult ret = XA_RESULT_SUCCESS; |
215 XAresult ret = XA_RESULT_SUCCESS; |
212 DEBUG_API("->XAOMixImpl_DoRealize"); |
|
213 XAOMixImpl* pMixImpl = (XAOMixImpl*)(pObj); |
216 XAOMixImpl* pMixImpl = (XAOMixImpl*)(pObj); |
214 XAuint8 itfIdx = 0; |
217 XAuint8 itfIdx = 0; |
|
218 DEBUG_API("->XAOMixImpl_DoRealize"); |
215 XA_IMPL_THREAD_SAFETY_ENTRY(XATSOutputMix); |
219 XA_IMPL_THREAD_SAFETY_ENTRY(XATSOutputMix); |
216 |
220 |
217 /* check casting from correct pointer type */ |
221 /* check casting from correct pointer type */ |
218 if( !pMixImpl || pObj != pMixImpl->baseObj.self ) |
222 if( !pMixImpl || pObj != pMixImpl->baseObj.self ) |
219 { |
223 { |
223 DEBUG_API("<-XAOMixImpl_DoRealize"); |
227 DEBUG_API("<-XAOMixImpl_DoRealize"); |
224 return XA_RESULT_PARAMETER_INVALID; |
228 return XA_RESULT_PARAMETER_INVALID; |
225 } |
229 } |
226 |
230 |
227 /* Initialize adaptation */ |
231 /* Initialize adaptation */ |
228 ret = XAOutputMixAdapt_PostInit( pMixImpl->adaptationCtx ); |
232 ret = XAOutputMixAdapt_PostInit( (XAAdaptationGstCtx*)pMixImpl->adaptationCtx ); |
229 if( ret != XA_RESULT_SUCCESS ) |
233 if( ret != XA_RESULT_SUCCESS ) |
230 { |
234 { |
231 XA_IMPL_THREAD_SAFETY_EXIT(XATSOutputMix); |
235 XA_IMPL_THREAD_SAFETY_EXIT(XATSOutputMix); |
232 DEBUG_API("<-XAOMixImpl_DoRealize"); |
236 DEBUG_API("<-XAOMixImpl_DoRealize"); |
233 return ret; |
237 return ret; |
304 * void XAOMixImpl_FreeResources(XAObjectItf self) |
308 * void XAOMixImpl_FreeResources(XAObjectItf self) |
305 * Description: Free all resources reserved at XACameraDeviceImpl_DoRealize() |
309 * Description: Free all resources reserved at XACameraDeviceImpl_DoRealize() |
306 */ |
310 */ |
307 void XAOMixImpl_FreeResources(XAObjectItf self) |
311 void XAOMixImpl_FreeResources(XAObjectItf self) |
308 { |
312 { |
309 #ifdef _GSTREAMER_BACKEND_ |
313 |
310 XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self); |
314 XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self); |
311 XAOMixImpl* pImpl = (XAOMixImpl*)(*self); |
315 XAOMixImpl* pImpl = (XAOMixImpl*)(*self); |
312 XAuint8 itfIdx = 0; |
316 XAuint8 itfIdx = 0; |
313 DEBUG_API("->XAOMixImpl_FreeResources"); |
317 DEBUG_API("->XAOMixImpl_FreeResources"); |
314 XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS(XATSOutputMix); |
318 XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS(XATSOutputMix); |
315 assert( pObj && pImpl && pObj == pObj->self ); |
319 assert( pObj && pImpl && pObj == pObj->self ); |
316 |
320 |
317 if ( pImpl->adaptationCtx != NULL ) |
321 if ( pImpl->adaptationCtx != NULL ) |
318 { |
322 { |
319 XAOutputMixAdapt_Destroy( pImpl->adaptationCtx ); |
323 XAOutputMixAdapt_Destroy( (XAAdaptationGstCtx*)pImpl->adaptationCtx ); |
320 pImpl->adaptationCtx = NULL; |
324 pImpl->adaptationCtx = NULL; |
321 } |
325 } |
322 |
326 |
323 /* free all allocated interfaces */ |
327 /* free all allocated interfaces */ |
324 for(itfIdx = 0; itfIdx < OMIX_ITFCOUNT; itfIdx++) |
328 for(itfIdx = 0; itfIdx < OMIX_ITFCOUNT; itfIdx++) |
350 } |
354 } |
351 } |
355 } |
352 |
356 |
353 if ( pImpl->adaptationCtx != NULL ) |
357 if ( pImpl->adaptationCtx != NULL ) |
354 { |
358 { |
355 XAOutputMixAdapt_Destroy( pImpl->adaptationCtx ); |
359 XAOutputMixAdapt_Destroy( (XAAdaptationGstCtx*)pImpl->adaptationCtx ); |
356 pImpl->adaptationCtx = NULL; |
360 pImpl->adaptationCtx = NULL; |
357 } |
361 } |
358 |
362 |
359 XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS(XATSOutputMix); |
363 XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS(XATSOutputMix); |
360 #endif |
364 |
361 DEBUG_API("<-XAOMixImpl_FreeResources"); |
365 DEBUG_API("<-XAOMixImpl_FreeResources"); |
362 } |
366 } |
363 |
367 |
364 /***************************************************************************** |
368 /***************************************************************************** |
365 * MediaRecorderImpl -specific methods |
369 * MediaRecorderImpl -specific methods |
368 /* XAOMixImpl_DoAddItf |
372 /* XAOMixImpl_DoAddItf |
369 * Dynamically add an interface, object specific parts |
373 * Dynamically add an interface, object specific parts |
370 */ |
374 */ |
371 XAresult XAOMixImpl_DoAddItf(XAObjectItf self, XAObjItfMapEntry *mapEntry ) |
375 XAresult XAOMixImpl_DoAddItf(XAObjectItf self, XAObjItfMapEntry *mapEntry ) |
372 { |
376 { |
373 #ifdef _GSTREAMER_BACKEND_ |
377 |
374 XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self); |
378 XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self); |
375 XAOMixImpl* pImpl = (XAOMixImpl*)(pObj); |
379 XAOMixImpl* pImpl = (XAOMixImpl*)(pObj); |
376 #endif |
380 |
377 XAresult ret = XA_RESULT_SUCCESS; |
381 XAresult ret = XA_RESULT_SUCCESS; |
378 DEBUG_API("->XAOMixImpl_DoAddItf"); |
382 DEBUG_API("->XAOMixImpl_DoAddItf"); |
379 if(mapEntry) |
383 if(mapEntry) |
380 { |
384 { |
381 switch( mapEntry->mapIdx ) |
385 switch( mapEntry->mapIdx ) |
382 { |
386 { |
383 case OMIX_EQUALIZERITF: |
387 case OMIX_EQUALIZERITF: |
384 #ifdef _GSTREAMER_BACKEND_ |
388 |
385 mapEntry->pItf = XAEqualizerItfImpl_Create( pImpl->adaptationCtx ); |
389 mapEntry->pItf = XAEqualizerItfImpl_Create( pImpl->adaptationCtx ); |
386 #endif |
390 |
387 break; |
391 break; |
388 default: |
392 default: |
389 DEBUG_ERR("XAOMixImpl_DoAddItf unknown id"); |
393 DEBUG_ERR("XAOMixImpl_DoAddItf unknown id"); |
390 ret = XA_RESULT_FEATURE_UNSUPPORTED; |
394 ret = XA_RESULT_FEATURE_UNSUPPORTED; |
391 break; |
395 break; |