32 #include "xaimagecontrolsitf.h" |
32 #include "xaimagecontrolsitf.h" |
33 #include "xaimageeffectsitf.h" |
33 #include "xaimageeffectsitf.h" |
34 #include "xavideopostprocessingitf.h" |
34 #include "xavideopostprocessingitf.h" |
35 #include "xaconfigextensionsitf.h" |
35 #include "xaconfigextensionsitf.h" |
36 #include "xathreadsafety.h" |
36 #include "xathreadsafety.h" |
37 #ifdef _GSTREAMER_BACKEND_ |
37 #include "xametadataadaptation.h" |
38 #include "XAMetadataAdaptation.h" |
38 #include "xacapabilitiesmgr.h" |
39 #endif |
|
40 #include "xadynamicsourceitf.h" |
39 #include "xadynamicsourceitf.h" |
41 |
40 #include "xastreaminformationitf.h" |
|
41 #include "xanlinearvolumeitf.h" |
|
42 #include "xanvolumeextitf.h" |
42 |
43 |
43 extern void* vfHandle; |
44 extern void* vfHandle; |
44 |
45 |
45 /* Static mapping of enumeration XAMediaPlayerInterfaces to interface iids */ |
46 /* Static mapping of enumeration XAMediaPlayerInterfaces to interface iids */ |
46 static const XAInterfaceID* xaMediaPlayerItfIIDs[MP_ITFCOUNT] = |
47 static const XAInterfaceID* xaMediaPlayerItfIIDs[MP_ITFCOUNT] = |
57 &XA_IID_IMAGECONTROLS, |
58 &XA_IID_IMAGECONTROLS, |
58 &XA_IID_IMAGEEFFECTS, |
59 &XA_IID_IMAGEEFFECTS, |
59 &XA_IID_METADATAEXTRACTION, |
60 &XA_IID_METADATAEXTRACTION, |
60 &XA_IID_METADATATRAVERSAL, |
61 &XA_IID_METADATATRAVERSAL, |
61 &XA_IID_PLAYBACKRATE, |
62 &XA_IID_PLAYBACKRATE, |
62 &XA_IID_VIDEOPOSTPROCESSING |
63 &XA_IID_VIDEOPOSTPROCESSING, |
|
64 &XA_IID_NOKIAVOLUMEEXT, |
|
65 &XA_IID_NOKIALINEARVOLUME, |
|
66 &XA_IID_STREAMINFORMATION |
63 }; |
67 }; |
64 |
68 |
65 /* Global methods */ |
69 /* Global methods */ |
66 |
70 |
67 /* XAResult XAMediaPlayerImpl_CreateMediaPlayer |
71 /* XAResult XAMediaPlayerImpl_CreateMediaPlayer |
68 * Create object |
72 * Create object |
69 */ |
73 */ |
70 XAresult XAMediaPlayerImpl_CreateMediaPlayer(XAObjectItf *pPlayer, |
74 XAresult XAMediaPlayerImpl_CreateMediaPlayer(FrameworkMap* mapper, |
|
75 XACapabilities* capabilities, |
|
76 XAObjectItf *pPlayer, |
71 XADataSource *pDataSrc, |
77 XADataSource *pDataSrc, |
72 XADataSource *pBankSrc, |
78 XADataSource *pBankSrc, |
73 XADataSink *pAudioSnk, |
79 XADataSink *pAudioSnk, |
74 XADataSink *pImageVideoSnk, |
80 XADataSink *pImageVideoSnk, |
75 XADataSink *pVibra, |
81 XADataSink *pVibra, |
79 const XAboolean *pInterfaceRequired) |
85 const XAboolean *pInterfaceRequired) |
80 { |
86 { |
81 XAuint8 itfIdx = 0; |
87 XAuint8 itfIdx = 0; |
82 XAMediaType mediaType = XA_MEDIATYPE_UNKNOWN; |
88 XAMediaType mediaType = XA_MEDIATYPE_UNKNOWN; |
83 XAMediaPlayerImpl* pPlayerImpl = NULL; |
89 XAMediaPlayerImpl* pPlayerImpl = NULL; |
|
90 FWMgrFwType fwType; |
84 XAObjectItfImpl* pBaseObj = NULL; |
91 XAObjectItfImpl* pBaseObj = NULL; |
|
92 const char *uri = NULL; |
85 XAresult ret = XA_RESULT_SUCCESS; |
93 XAresult ret = XA_RESULT_SUCCESS; |
86 XADataLocator_URI* tmpUri; |
94 |
87 |
|
88 DEBUG_API("->XAMediaPlayerImpl_CreateMediaPlayer"); |
95 DEBUG_API("->XAMediaPlayerImpl_CreateMediaPlayer"); |
|
96 |
89 XA_IMPL_THREAD_SAFETY_ENTRY(XATSMediaPlayer); |
97 XA_IMPL_THREAD_SAFETY_ENTRY(XATSMediaPlayer); |
90 |
98 |
91 if(!pPlayer || !pDataSrc) |
99 if(!pPlayer || !pDataSrc) |
92 { |
100 { |
93 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
101 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
197 pBaseObj->interfaceMap[MP_IMAGEEFFECTSITF].isDynamic = XA_BOOLEAN_TRUE; |
205 pBaseObj->interfaceMap[MP_IMAGEEFFECTSITF].isDynamic = XA_BOOLEAN_TRUE; |
198 pBaseObj->interfaceMap[MP_METADATAEXTRACTIONITF].isDynamic = XA_BOOLEAN_TRUE; |
206 pBaseObj->interfaceMap[MP_METADATAEXTRACTIONITF].isDynamic = XA_BOOLEAN_TRUE; |
199 pBaseObj->interfaceMap[MP_METADATATRAVERSALITF].isDynamic = XA_BOOLEAN_TRUE; |
207 pBaseObj->interfaceMap[MP_METADATATRAVERSALITF].isDynamic = XA_BOOLEAN_TRUE; |
200 pBaseObj->interfaceMap[MP_PLAYBACKRATEITF].isDynamic = XA_BOOLEAN_TRUE; |
208 pBaseObj->interfaceMap[MP_PLAYBACKRATEITF].isDynamic = XA_BOOLEAN_TRUE; |
201 |
209 |
202 |
210 |
203 /* Set ObjectItf to point to newly created object */ |
211 /*Set ObjectItf to point to newly created object*/ |
204 *pPlayer = (XAObjectItf)&(pBaseObj->self); |
212 *pPlayer = (XAObjectItf)&(pBaseObj->self); |
205 |
213 |
206 /* initialize XAPlayerImpl variables */ |
214 /*initialize XAPlayerImpl variables */ |
207 |
215 |
208 pPlayerImpl->dataSrc = pDataSrc; |
216 pPlayerImpl->dataSrc = pDataSrc; |
209 pPlayerImpl->bankSrc = pBankSrc; |
217 pPlayerImpl->bankSrc = pBankSrc; |
210 pPlayerImpl->audioSnk = pAudioSnk; |
218 pPlayerImpl->audioSnk = pAudioSnk; |
211 pPlayerImpl->imageVideoSnk = pImageVideoSnk; |
219 pPlayerImpl->imageVideoSnk = pImageVideoSnk; |
212 pPlayerImpl->vibra = pVibra; |
220 pPlayerImpl->vibra = pVibra; |
213 pPlayerImpl->LEDArray = pLEDArray; |
221 pPlayerImpl->LEDArray = pLEDArray; |
|
222 |
|
223 /* Determine framework type that can handle recording */ |
|
224 fwType = (FWMgrFwType)FWMgrMOUnknown; |
|
225 /**/ |
|
226 if (pDataSrc->pLocator) |
|
227 { |
|
228 XADataLocator_URI* dataLoc = (XADataLocator_URI*)pDataSrc->pLocator; |
|
229 if (dataLoc->locatorType == XA_DATALOCATOR_URI) |
|
230 { |
|
231 uri = (char*)dataLoc->URI; |
|
232 } |
|
233 } |
|
234 fwType = XAFrameworkMgr_GetFramework( |
|
235 mapper, |
|
236 uri, |
|
237 FWMgrMOPlayer); |
|
238 |
|
239 if (fwType == FWMgrMOUnknown) |
|
240 { |
|
241 ret = XA_RESULT_CONTENT_UNSUPPORTED; |
|
242 XAObjectItfImpl_Destroy((XAObjectItf)&(pBaseObj)); |
|
243 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer ); |
|
244 DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer"); |
|
245 return ret; |
|
246 } |
214 |
247 |
215 tmpUri = (XADataLocator_URI*)(pPlayerImpl->dataSrc->pLocator); |
248 if(fwType == FWMgrFWMMF) |
216 XAMediaPlayerImpl_DeterminePlaybackEngine(*pPlayer, tmpUri); |
249 { |
217 |
|
218 /* This code is put here to return Feature Not Supported since adaptation is not present*/ |
|
219 /*************************************************/ |
|
220 XAObjectItfImpl_Destroy((XAObjectItf)&(pBaseObj)); |
|
221 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
|
222 DEBUG_ERR("Required interface not found - abort creation!"); |
|
223 DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer"); |
|
224 return XA_RESULT_FEATURE_UNSUPPORTED; |
|
225 /*************************************************/ |
|
226 |
|
227 /* if(pPlayerImpl->isMMFPlayback) |
|
228 { |
|
229 pPlayerImpl->adaptationCtxMMF = XAMediaPlayerAdaptMMF_Create(pPlayerImpl->dataSrc, |
250 pPlayerImpl->adaptationCtxMMF = XAMediaPlayerAdaptMMF_Create(pPlayerImpl->dataSrc, |
230 pPlayerImpl->bankSrc, |
251 pPlayerImpl->bankSrc, |
231 pPlayerImpl->audioSnk, |
252 pPlayerImpl->audioSnk, |
232 pPlayerImpl->imageVideoSnk, |
253 pPlayerImpl->imageVideoSnk, |
233 pPlayerImpl->vibra, |
254 pPlayerImpl->vibra, |
234 pPlayerImpl->LEDArray); |
255 pPlayerImpl->LEDArray); |
235 |
256 |
|
257 pPlayerImpl->curAdaptCtx = pPlayerImpl->adaptationCtxMMF; |
236 } |
258 } |
237 else |
259 else |
238 { |
260 { |
239 #ifdef _GSTREAMER_BACKEND_ |
261 pPlayerImpl->adaptationCtxGst = XAMediaPlayerAdapt_Create(pPlayerImpl->dataSrc, |
240 pPlayerImpl->adaptationCtx = XAMediaPlayerAdapt_Create(pPlayerImpl->dataSrc, |
|
241 pPlayerImpl->bankSrc, |
262 pPlayerImpl->bankSrc, |
242 pPlayerImpl->audioSnk, |
263 pPlayerImpl->audioSnk, |
243 pPlayerImpl->imageVideoSnk, |
264 pPlayerImpl->imageVideoSnk, |
244 pPlayerImpl->vibra, |
265 pPlayerImpl->vibra, |
245 pPlayerImpl->LEDArray); |
266 pPlayerImpl->LEDArray); |
246 #endif |
267 |
247 } |
268 pPlayerImpl->curAdaptCtx = pPlayerImpl->adaptationCtxGst; |
|
269 } |
|
270 |
|
271 pPlayerImpl->curAdaptCtx->capslist = capabilities; |
|
272 pPlayerImpl->curAdaptCtx->fwtype = fwType; |
|
273 |
248 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer ); |
274 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer ); |
249 DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer"); |
275 DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer"); |
250 return XA_RESULT_SUCCESS;*/ |
276 return XA_RESULT_SUCCESS; |
251 } |
277 } |
252 |
278 |
253 /* XAResult XAMediaPlayerImpl_QueryNumSupportedInterfaces |
279 /* XAResult XAMediaPlayerImpl_QueryNumSupportedInterfaces |
254 * Statically query supported interfaces |
280 * Statically query supported interfaces |
255 */ |
281 */ |
355 { |
376 { |
356 vfHandle = (void*) pItf; |
377 vfHandle = (void*) pItf; |
357 DEBUG_INFO_A1("Stored view finder pointer to global address %x", vfHandle); |
378 DEBUG_INFO_A1("Stored view finder pointer to global address %x", vfHandle); |
358 } |
379 } |
359 } |
380 } |
360 else if(locType == XA_DATALOCATOR_URI ) |
|
361 { |
|
362 tmpUri = (XADataLocator_URI*)(pImpl->dataSrc->pLocator); |
|
363 XAPlayItfImpl_DeterminePlaybackEngine(pItf, tmpUri); |
|
364 } |
|
365 else |
381 else |
366 { |
382 { |
367 |
383 |
368 } |
384 } |
369 } |
385 } |
370 break; |
386 break; |
371 case MP_VOLUMEITF: |
387 case MP_VOLUMEITF: |
372 #ifdef _GSTREAMER_BACKEND_ |
388 pItf = XAVolumeItfImpl_Create(pImpl->curAdaptCtx); |
373 pItf = XAVolumeItfImpl_Create(pImpl->adaptationCtx); |
|
374 break; |
389 break; |
375 case MP_SEEKITF: |
390 case MP_SEEKITF: |
376 pItf = XASeekItfImpl_Create(pImpl->adaptationCtx); |
391 pItf = XASeekItfImpl_Create(pImpl); |
377 break; |
392 break; |
378 case MP_PREFETCHSTATUSITF: |
393 case MP_PREFETCHSTATUSITF: |
379 pItf = XAPrefetchStatusItfImpl_Create( pImpl->adaptationCtx ); |
394 pItf = XAPrefetchStatusItfImpl_Create( pImpl ); |
380 break; |
395 break; |
381 case MP_METADATAEXTRACTIONITF: |
396 case MP_METADATAEXTRACTIONITF: |
382 pItf = XAMetadataExtractionItfImpl_Create( pImpl->adaptationCtx ); |
397 pItf = XAMetadataExtractionItfImpl_Create( pImpl->curAdaptCtx ); |
383 break; |
398 break; |
384 case MP_METADATATRAVERSALITF: |
399 case MP_METADATATRAVERSALITF: |
385 pItf = XAMetadataTraversalItfImpl_Create( pImpl->adaptationCtx ); |
400 pItf = XAMetadataTraversalItfImpl_Create( pImpl->curAdaptCtx ); |
386 break; |
401 break; |
387 case MP_PLAYBACKRATEITF: |
402 case MP_PLAYBACKRATEITF: |
388 pItf = XAPlaybackRateItfImpl_Create(pImpl->adaptationCtx); |
403 pItf = XAPlaybackRateItfImpl_Create(pImpl); |
389 break; |
404 break; |
390 case MP_CONFIGEXTENSIONITF: |
405 case MP_CONFIGEXTENSIONITF: |
391 pItf = XAConfigExtensionsItfImpl_Create(); |
406 pItf = XAConfigExtensionsItfImpl_Create(); |
392 XAConfigExtensionsItfImpl_SetContext( pItf, pImpl->adaptationCtx); |
407 XAConfigExtensionsItfImpl_SetContext( pItf, pImpl->curAdaptCtx); |
393 break; |
408 break; |
394 case MP_DYNAMICSOURCEITF: |
409 case MP_DYNAMICSOURCEITF: |
395 pItf = XADynamicSourceItfImpl_Create(pImpl->adaptationCtx); |
410 pItf = XADynamicSourceItfImpl_Create(pImpl->curAdaptCtx); |
396 break; |
411 break; |
397 case MP_EQUALIZERITF: |
412 case MP_EQUALIZERITF: |
398 pItf = XAEqualizerItfImpl_Create(pImpl->adaptationCtx); |
413 pItf = XAEqualizerItfImpl_Create(pImpl->curAdaptCtx); |
399 break; |
414 break; |
400 case MP_IMAGECONTROLSITF: |
415 case MP_IMAGECONTROLSITF: |
401 pItf = XAImageControlsItfImpl_Create(pImpl->adaptationCtx); |
416 pItf = XAImageControlsItfImpl_Create(pImpl->curAdaptCtx); |
402 break; |
417 break; |
403 case MP_IMAGEEFFECTSITF: |
418 case MP_IMAGEEFFECTSITF: |
404 pItf = XAImageEffectsItfImpl_Create(pImpl->adaptationCtx); |
419 pItf = XAImageEffectsItfImpl_Create(pImpl->curAdaptCtx); |
405 break; |
420 break; |
406 case MP_VIDEOPOSTPROCESSINGITF: |
421 case MP_VIDEOPOSTPROCESSINGITF: |
407 pItf = XAVideoPostProcessingItfImpl_Create(pImpl->adaptationCtx); |
422 pItf = XAVideoPostProcessingItfImpl_Create(pImpl->curAdaptCtx); |
408 #endif |
423 break; |
409 break; |
424 case MP_NOKIAVOLUMEEXT: |
|
425 pItf = XANokiaVolumeExtItfImpl_Create(pImpl->curAdaptCtx); |
|
426 break; |
|
427 case MP_NOKIALINEARVOLUME: |
|
428 pItf = XANokiaLinearVolumeItfImpl_Create(pImpl->curAdaptCtx); |
|
429 break; |
|
430 case MP_STREAMINFORMATIONITF: |
|
431 pItf = XAStreamInformationItfImpl_Create(pImpl->curAdaptCtx); |
|
432 break; |
410 default: |
433 default: |
411 break; |
434 break; |
412 } |
435 } |
413 if(!pItf) |
436 if(!pItf) |
414 { |
437 { |
526 XAImageEffectsItfImpl_Free(pItf); |
542 XAImageEffectsItfImpl_Free(pItf); |
527 break; |
543 break; |
528 case MP_VIDEOPOSTPROCESSINGITF: |
544 case MP_VIDEOPOSTPROCESSINGITF: |
529 XAVideoPostProcessingItfImpl_Free(pItf); |
545 XAVideoPostProcessingItfImpl_Free(pItf); |
530 break; |
546 break; |
|
547 case MP_NOKIAVOLUMEEXT: |
|
548 XANokiaVolumeExtItfImpl_Free(pItf); |
|
549 break; |
|
550 case MP_NOKIALINEARVOLUME: |
|
551 XANokiaLinearVolumeItfImpl_Free(pItf); |
|
552 break; |
|
553 case MP_STREAMINFORMATIONITF: |
|
554 XAStreamInformationItfImpl_Free(pItf); |
|
555 break; |
|
556 |
531 } |
557 } |
532 pObj->interfaceMap[itfIdx].pItf = NULL; |
558 pObj->interfaceMap[itfIdx].pItf = NULL; |
533 } |
559 } |
534 } |
560 } |
535 #ifdef _GSTREAMER_BACKEND_ |
561 |
536 if ( pImpl->adaptationCtx != NULL ) |
562 if(pImpl->curAdaptCtx) |
537 { |
563 { |
538 XAMediaPlayerAdapt_Destroy( pImpl->adaptationCtx ); |
564 if(pImpl->curAdaptCtx->fwtype == FWMgrFWMMF) |
539 pImpl->adaptationCtx = NULL; |
565 { |
540 } |
566 XAMediaPlayerAdaptMMF_Destroy( (XAAdaptationMMFCtx*)pImpl->adaptationCtxMMF ); |
541 #endif |
567 } |
|
568 else |
|
569 { |
|
570 XAMediaPlayerAdapt_Destroy( (XAAdaptationGstCtx*)pImpl->adaptationCtxGst ); |
|
571 } |
|
572 } |
|
573 |
542 XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS( XATSMediaPlayer ); |
574 XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS( XATSMediaPlayer ); |
543 DEBUG_API("<-XAMediaPlayerImpl_FreeResources"); |
575 DEBUG_API("<-XAMediaPlayerImpl_FreeResources"); |
544 return; |
576 return; |
545 } |
577 } |
546 |
578 |
547 /* XAMediaPlayerImpl_DoAddItf |
579 /* XAMediaPlayerImpl_DoAddItf |
548 * Dynamically add an interface, object specific parts |
580 * Dynamically add an interface, object specific parts |
549 */ |
581 */ |
550 XAresult XAMediaPlayerImpl_DoAddItf(XAObjectItf self, XAObjItfMapEntry *mapEntry ) |
582 XAresult XAMediaPlayerImpl_DoAddItf(XAObjectItf self, XAObjItfMapEntry *mapEntry ) |
551 { |
583 { |
552 #ifdef _GSTREAMER_BACKEND_ |
584 |
553 XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self); |
585 XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self); |
554 XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*)(pObj); |
586 XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*)(pObj); |
555 #endif |
587 |
556 XAresult ret = XA_RESULT_SUCCESS; |
588 XAresult ret = XA_RESULT_SUCCESS; |
557 DEBUG_API("->XAMediaPlayerImpl_DoAddItf"); |
589 DEBUG_API("->XAMediaPlayerImpl_DoAddItf"); |
558 |
590 |
559 if(mapEntry) |
591 if(mapEntry) |
560 { |
592 { |
561 switch( mapEntry->mapIdx ) |
593 switch( mapEntry->mapIdx ) |
562 { |
594 { |
563 #ifdef _GSTREAMER_BACKEND_ |
595 |
564 case MP_METADATAEXTRACTIONITF: |
596 case MP_METADATAEXTRACTIONITF: |
565 mapEntry->pItf = XAMetadataExtractionItfImpl_Create( pImpl->adaptationCtx ); |
597 mapEntry->pItf = XAMetadataExtractionItfImpl_Create( pImpl->curAdaptCtx ); |
566 break; |
598 break; |
567 case MP_METADATATRAVERSALITF: |
599 case MP_METADATATRAVERSALITF: |
568 mapEntry->pItf = XAMetadataTraversalItfImpl_Create( pImpl->adaptationCtx ); |
600 mapEntry->pItf = XAMetadataTraversalItfImpl_Create( pImpl->curAdaptCtx ); |
569 break; |
601 break; |
570 case MP_PLAYBACKRATEITF: |
602 case MP_PLAYBACKRATEITF: |
571 mapEntry->pItf = XAPlaybackRateItfImpl_Create(pImpl->adaptationCtx); |
603 mapEntry->pItf = XAPlaybackRateItfImpl_Create(pImpl); |
572 break; |
604 break; |
573 case MP_EQUALIZERITF: |
605 case MP_EQUALIZERITF: |
574 mapEntry->pItf = XAEqualizerItfImpl_Create( pImpl->adaptationCtx ); |
606 mapEntry->pItf = XAEqualizerItfImpl_Create( pImpl->curAdaptCtx ); |
575 break; |
607 break; |
576 case MP_IMAGEEFFECTSITF: |
608 case MP_IMAGEEFFECTSITF: |
577 mapEntry->pItf = XAImageEffectsItfImpl_Create( pImpl->adaptationCtx ); |
609 mapEntry->pItf = XAImageEffectsItfImpl_Create( pImpl->curAdaptCtx ); |
578 break; |
610 break; |
579 #endif |
611 |
580 default: |
612 default: |
581 DEBUG_ERR("XAMediaPlayerImpl_DoAddItf unknown id"); |
613 DEBUG_ERR("XAMediaPlayerImpl_DoAddItf unknown id"); |
582 ret = XA_RESULT_FEATURE_UNSUPPORTED; |
614 ret = XA_RESULT_FEATURE_UNSUPPORTED; |
583 break; |
615 break; |
584 } |
616 } |