16 */ |
16 */ |
17 |
17 |
18 #include <stdio.h> |
18 #include <stdio.h> |
19 #include <stdlib.h> |
19 #include <stdlib.h> |
20 #include <string.h> |
20 #include <string.h> |
21 #include <assert.h> |
|
22 #include "xamediaplayer.h" |
21 #include "xamediaplayer.h" |
23 #include "xaplayitf.h" |
22 #include "xaplayitf.h" |
24 #include "xaseekitf.h" |
23 #include "xaseekitf.h" |
25 #include "xaprefetchstatusitf.h" |
24 #include "xaprefetchstatusitf.h" |
26 #include "xadynintmgmtitf.h" |
25 #include "xadynintmgmtitf.h" |
27 #include "xavolumeitf.h" |
26 #include "xavolumeitf.h" |
28 #include "xametadataextractionitf.h" |
27 #include "xametadataextractionitf.h" |
29 #include "xaplaybackrateitf.h" |
28 #include "xaplaybackrateitf.h" |
30 #include "xaconfigextensionsitf.h" |
|
31 #include "xathreadsafety.h" |
29 #include "xathreadsafety.h" |
32 #include "xametadataadaptation.h" |
|
33 #include "xacapabilitiesmgr.h" |
30 #include "xacapabilitiesmgr.h" |
34 #include "xadynamicsourceitf.h" |
31 #include "xadynamicsourceitf.h" |
35 #include "xastreaminformationitf.h" |
32 #include "xastreaminformationitf.h" |
36 #include "xanlinearvolumeitf.h" |
33 #include "xanlinearvolumeitf.h" |
|
34 #include "xavideopostprocessingitf.h" |
37 #include "xanvolumeextitf.h" |
35 #include "xanvolumeextitf.h" |
38 |
36 |
39 extern void* vfHandle; |
37 extern void* vfHandle; |
40 |
38 |
41 /* Static mapping of enumeration XAMediaPlayerInterfaces to interface iids */ |
39 /* Static mapping of enumeration XAMediaPlayerInterfaces to interface iids */ |
45 &XA_IID_DYNAMICINTERFACEMANAGEMENT, |
43 &XA_IID_DYNAMICINTERFACEMANAGEMENT, |
46 &XA_IID_PLAY, |
44 &XA_IID_PLAY, |
47 &XA_IID_SEEK, |
45 &XA_IID_SEEK, |
48 &XA_IID_VOLUME, |
46 &XA_IID_VOLUME, |
49 &XA_IID_PREFETCHSTATUS, |
47 &XA_IID_PREFETCHSTATUS, |
50 &XA_IID_CONFIGEXTENSION, |
|
51 &XA_IID_DYNAMICSOURCE, |
48 &XA_IID_DYNAMICSOURCE, |
52 &XA_IID_METADATAEXTRACTION, |
49 &XA_IID_METADATAEXTRACTION, |
53 &XA_IID_PLAYBACKRATE, |
50 &XA_IID_PLAYBACKRATE, |
54 &XA_IID_NOKIAVOLUMEEXT, |
51 &XA_IID_NOKIAVOLUMEEXT, |
55 &XA_IID_NOKIALINEARVOLUME, |
52 &XA_IID_NOKIALINEARVOLUME, |
56 &XA_IID_STREAMINFORMATION |
53 &XA_IID_STREAMINFORMATION, |
|
54 &XA_IID_VIDEOPOSTPROCESSING |
57 }; |
55 }; |
58 |
56 |
59 /* Global methods */ |
57 /* Global methods */ |
60 |
58 |
61 /* XAResult XAMediaPlayerImpl_CreateMediaPlayer |
59 /* XAResult XAMediaPlayerImpl_CreateMediaPlayer |
174 } |
172 } |
175 |
173 |
176 if (ret != XA_RESULT_SUCCESS) |
174 if (ret != XA_RESULT_SUCCESS) |
177 { /* creation fails */ |
175 { /* creation fails */ |
178 XAObjectItfImpl_Destroy((XAObjectItf) &(pBaseObj)); |
176 XAObjectItfImpl_Destroy((XAObjectItf) &(pBaseObj)); |
|
177 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
|
178 DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer"); |
179 return ret; |
179 return ret; |
180 } |
180 } |
181 |
181 |
182 /* Mark interfaces that can be handled dynamically */ |
182 /* Mark interfaces that can be handled dynamically */ |
183 /* Mandated dynamic itfs */ |
183 /* Mandated dynamic itfs */ |
184 pBaseObj->interfaceMap[MP_METADATAEXTRACTIONITF].isDynamic |
184 pBaseObj->interfaceMap[MP_METADATAEXTRACTIONITF].isDynamic |
185 = XA_BOOLEAN_TRUE; |
185 = XA_BOOLEAN_TRUE; |
186 pBaseObj->interfaceMap[MP_PLAYBACKRATEITF].isDynamic = XA_BOOLEAN_TRUE; |
186 pBaseObj->interfaceMap[MP_PLAYBACKRATEITF].isDynamic = XA_BOOLEAN_TRUE; |
187 |
|
188 /*Set ObjectItf to point to newly created object*/ |
|
189 *pPlayer = (XAObjectItf) &(pBaseObj->self); |
|
190 |
187 |
191 /*initialize XAPlayerImpl variables */ |
188 /*initialize XAPlayerImpl variables */ |
192 |
189 |
193 pPlayerImpl->dataSrc = pDataSrc; |
190 pPlayerImpl->dataSrc = pDataSrc; |
194 pPlayerImpl->bankSrc = pBankSrc; |
191 pPlayerImpl->bankSrc = pBankSrc; |
240 pPlayerImpl->curAdaptCtx = pPlayerImpl->adaptationCtxMMF; |
237 pPlayerImpl->curAdaptCtx = pPlayerImpl->adaptationCtxMMF; |
241 } |
238 } |
242 |
239 |
243 pPlayerImpl->curAdaptCtx->capslist = capabilities; |
240 pPlayerImpl->curAdaptCtx->capslist = capabilities; |
244 pPlayerImpl->curAdaptCtx->fwtype = fwType; |
241 pPlayerImpl->curAdaptCtx->fwtype = fwType; |
245 |
242 |
|
243 /*Set ObjectItf to point to newly created object*/ |
|
244 *pPlayer = (XAObjectItf) &(pBaseObj->self); |
|
245 |
246 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer ); |
246 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer ); |
247 DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer"); |
247 DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer"); |
248 return XA_RESULT_SUCCESS; |
248 return XA_RESULT_SUCCESS; |
249 } |
249 } |
250 |
250 |
374 pImpl->curAdaptCtx); |
374 pImpl->curAdaptCtx); |
375 break; |
375 break; |
376 case MP_PLAYBACKRATEITF: |
376 case MP_PLAYBACKRATEITF: |
377 pItf = XAPlaybackRateItfImpl_Create(pImpl); |
377 pItf = XAPlaybackRateItfImpl_Create(pImpl); |
378 break; |
378 break; |
379 case MP_CONFIGEXTENSIONITF: |
|
380 pItf = XAConfigExtensionsItfImpl_Create(); |
|
381 XAConfigExtensionsItfImpl_SetContext(pItf, |
|
382 pImpl->curAdaptCtx); |
|
383 break; |
|
384 case MP_DYNAMICSOURCEITF: |
379 case MP_DYNAMICSOURCEITF: |
385 pItf = XADynamicSourceItfImpl_Create(pImpl->curAdaptCtx); |
380 pItf = XADynamicSourceItfImpl_Create(pImpl->curAdaptCtx); |
386 break; |
381 break; |
387 case MP_NOKIAVOLUMEEXT: |
382 case MP_NOKIAVOLUMEEXT: |
388 pItf = XANokiaVolumeExtItfImpl_Create(pImpl->curAdaptCtx); |
383 pItf = XANokiaVolumeExtItfImpl_Create(pImpl->curAdaptCtx); |
455 XAuint8 itfIdx = 0; |
454 XAuint8 itfIdx = 0; |
456 XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*) pObj; |
455 XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*) pObj; |
457 DEBUG_API("->XAMediaPlayerImpl_FreeResources"); |
456 DEBUG_API("->XAMediaPlayerImpl_FreeResources"); |
458 XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS( XATSMediaPlayer ); |
457 XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS( XATSMediaPlayer ); |
459 |
458 |
460 assert(pObj && pImpl && pObj == pObj->self); |
|
461 for (itfIdx = 0; itfIdx < MP_ITFCOUNT; itfIdx++) |
459 for (itfIdx = 0; itfIdx < MP_ITFCOUNT; itfIdx++) |
462 { |
460 { |
463 void *pItf = pObj->interfaceMap[itfIdx].pItf; |
461 void *pItf = pObj->interfaceMap[itfIdx].pItf; |
464 if (pItf) |
462 if (pItf) |
465 { |
463 { |
484 XAMetadataExtractionItfImpl_Free(pItf); |
482 XAMetadataExtractionItfImpl_Free(pItf); |
485 break; |
483 break; |
486 case MP_PLAYBACKRATEITF: |
484 case MP_PLAYBACKRATEITF: |
487 XAPlaybackRateItfImpl_Free(pItf); |
485 XAPlaybackRateItfImpl_Free(pItf); |
488 break; |
486 break; |
489 case MP_CONFIGEXTENSIONITF: |
|
490 XAConfigExtensionsItfImpl_Free(pItf); |
|
491 break; |
|
492 case MP_DYNAMICSOURCEITF: |
487 case MP_DYNAMICSOURCEITF: |
493 XADynamicSourceItfImpl_Free(pItf); |
488 XADynamicSourceItfImpl_Free(pItf); |
494 break; |
489 break; |
495 case MP_NOKIAVOLUMEEXT: |
490 case MP_NOKIAVOLUMEEXT: |
496 XANokiaVolumeExtItfImpl_Free(pItf); |
491 XANokiaVolumeExtItfImpl_Free(pItf); |
498 case MP_NOKIALINEARVOLUME: |
493 case MP_NOKIALINEARVOLUME: |
499 XANokiaLinearVolumeItfImpl_Free(pItf); |
494 XANokiaLinearVolumeItfImpl_Free(pItf); |
500 break; |
495 break; |
501 case MP_STREAMINFORMATIONITF: |
496 case MP_STREAMINFORMATIONITF: |
502 XAStreamInformationItfImpl_Free(pItf); |
497 XAStreamInformationItfImpl_Free(pItf); |
|
498 break; |
|
499 case MP_VIDEOPOSTPROCESSINGITF: |
|
500 XAVideoPostProcessingItfImpl_Free(pItf); |
503 break; |
501 break; |
504 |
502 |
505 } |
503 } |
506 pObj->interfaceMap[itfIdx].pItf = NULL; |
504 pObj->interfaceMap[itfIdx].pItf = NULL; |
507 } |
505 } |