diff -r 80975da52420 -r 43d09473c595 khronosfws/openmax_al/src/mediaplayer/xamediaplayer.c --- a/khronosfws/openmax_al/src/mediaplayer/xamediaplayer.c Mon May 03 12:59:52 2010 +0300 +++ b/khronosfws/openmax_al/src/mediaplayer/xamediaplayer.c Fri May 14 16:22:35 2010 +0300 @@ -34,11 +34,12 @@ #include "xavideopostprocessingitf.h" #include "xaconfigextensionsitf.h" #include "xathreadsafety.h" -#ifdef _GSTREAMER_BACKEND_ -#include "XAMetadataAdaptation.h" -#endif +#include "xametadataadaptation.h" +#include "xacapabilitiesmgr.h" #include "xadynamicsourceitf.h" - +#include "xastreaminformationitf.h" +#include "xanlinearvolumeitf.h" +#include "xanvolumeextitf.h" extern void* vfHandle; @@ -59,7 +60,10 @@ &XA_IID_METADATAEXTRACTION, &XA_IID_METADATATRAVERSAL, &XA_IID_PLAYBACKRATE, - &XA_IID_VIDEOPOSTPROCESSING + &XA_IID_VIDEOPOSTPROCESSING, + &XA_IID_NOKIAVOLUMEEXT, + &XA_IID_NOKIALINEARVOLUME, + &XA_IID_STREAMINFORMATION }; /* Global methods */ @@ -67,7 +71,9 @@ /* XAResult XAMediaPlayerImpl_CreateMediaPlayer * Create object */ -XAresult XAMediaPlayerImpl_CreateMediaPlayer(XAObjectItf *pPlayer, +XAresult XAMediaPlayerImpl_CreateMediaPlayer(FrameworkMap* mapper, + XACapabilities* capabilities, + XAObjectItf *pPlayer, XADataSource *pDataSrc, XADataSource *pBankSrc, XADataSink *pAudioSnk, @@ -81,11 +87,13 @@ XAuint8 itfIdx = 0; XAMediaType mediaType = XA_MEDIATYPE_UNKNOWN; XAMediaPlayerImpl* pPlayerImpl = NULL; + FWMgrFwType fwType; XAObjectItfImpl* pBaseObj = NULL; + const char *uri = NULL; XAresult ret = XA_RESULT_SUCCESS; - XADataLocator_URI* tmpUri; + + DEBUG_API("->XAMediaPlayerImpl_CreateMediaPlayer"); - DEBUG_API("->XAMediaPlayerImpl_CreateMediaPlayer"); XA_IMPL_THREAD_SAFETY_ENTRY(XATSMediaPlayer); if(!pPlayer || !pDataSrc) @@ -199,11 +207,11 @@ pBaseObj->interfaceMap[MP_METADATATRAVERSALITF].isDynamic = XA_BOOLEAN_TRUE; pBaseObj->interfaceMap[MP_PLAYBACKRATEITF].isDynamic = XA_BOOLEAN_TRUE; - - /* Set ObjectItf to point to newly created object */ + + /*Set ObjectItf to point to newly created object*/ *pPlayer = (XAObjectItf)&(pBaseObj->self); - /* initialize XAPlayerImpl variables */ + /*initialize XAPlayerImpl variables */ pPlayerImpl->dataSrc = pDataSrc; pPlayerImpl->bankSrc = pBankSrc; @@ -211,43 +219,61 @@ pPlayerImpl->imageVideoSnk = pImageVideoSnk; pPlayerImpl->vibra = pVibra; pPlayerImpl->LEDArray = pLEDArray; - - tmpUri = (XADataLocator_URI*)(pPlayerImpl->dataSrc->pLocator); - XAMediaPlayerImpl_DeterminePlaybackEngine(*pPlayer, tmpUri); + + /* Determine framework type that can handle recording */ + fwType = (FWMgrFwType)FWMgrMOUnknown; + /**/ + if (pDataSrc->pLocator) + { + XADataLocator_URI* dataLoc = (XADataLocator_URI*)pDataSrc->pLocator; + if (dataLoc->locatorType == XA_DATALOCATOR_URI) + { + uri = (char*)dataLoc->URI; + } + } + fwType = XAFrameworkMgr_GetFramework( + mapper, + uri, + FWMgrMOPlayer); + + if (fwType == FWMgrMOUnknown) + { + ret = XA_RESULT_CONTENT_UNSUPPORTED; + XAObjectItfImpl_Destroy((XAObjectItf)&(pBaseObj)); + XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer ); + DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer"); + return ret; + } - /* This code is put here to return Feature Not Supported since adaptation is not present*/ - /*************************************************/ - XAObjectItfImpl_Destroy((XAObjectItf)&(pBaseObj)); - XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); - DEBUG_ERR("Required interface not found - abort creation!"); - DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer"); - return XA_RESULT_FEATURE_UNSUPPORTED; - /*************************************************/ - -/* if(pPlayerImpl->isMMFPlayback) - { + if(fwType == FWMgrFWMMF) + { pPlayerImpl->adaptationCtxMMF = XAMediaPlayerAdaptMMF_Create(pPlayerImpl->dataSrc, pPlayerImpl->bankSrc, pPlayerImpl->audioSnk, pPlayerImpl->imageVideoSnk, pPlayerImpl->vibra, pPlayerImpl->LEDArray); - + + pPlayerImpl->curAdaptCtx = pPlayerImpl->adaptationCtxMMF; } else { -#ifdef _GSTREAMER_BACKEND_ - pPlayerImpl->adaptationCtx = XAMediaPlayerAdapt_Create(pPlayerImpl->dataSrc, + pPlayerImpl->adaptationCtxGst = XAMediaPlayerAdapt_Create(pPlayerImpl->dataSrc, pPlayerImpl->bankSrc, pPlayerImpl->audioSnk, pPlayerImpl->imageVideoSnk, pPlayerImpl->vibra, pPlayerImpl->LEDArray); -#endif + + pPlayerImpl->curAdaptCtx = pPlayerImpl->adaptationCtxGst; } + + pPlayerImpl->curAdaptCtx->capslist = capabilities; + pPlayerImpl->curAdaptCtx->fwtype = fwType; + XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer ); DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer"); - return XA_RESULT_SUCCESS;*/ + return XA_RESULT_SUCCESS; } /* XAResult XAMediaPlayerImpl_QueryNumSupportedInterfaces @@ -282,9 +308,9 @@ if (index >= MP_ITFCOUNT || !pInterfaceId ) { if(pInterfaceId) - { + { *pInterfaceId = XA_IID_NULL; - } + } DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); DEBUG_API("<-XAMediaPlayerImpl_QuerySupportedInterfaces"); return XA_RESULT_PARAMETER_INVALID; @@ -307,7 +333,6 @@ XAuint8 itfIdx = 0; void *pItf = NULL; XAresult ret = XA_RESULT_SUCCESS; - XADataLocator_URI* tmpUri; DEBUG_API("->XAMediaPlayerImpl_DoRealize"); XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer ); @@ -340,11 +365,7 @@ } break; case MP_PLAYITF: - pItf = XAPlayItfImpl_Create( -#ifdef _GSTREAMER_BACKEND_ - pImpl->adaptationCtx, -#endif - pImpl->adaptationCtxMMF); + pItf = XAPlayItfImpl_Create(pImpl); if ( pImpl->dataSrc ) { XAuint32 locType = *((XAuint32*)(pImpl->dataSrc->pLocator)); @@ -357,11 +378,6 @@ DEBUG_INFO_A1("Stored view finder pointer to global address %x", vfHandle); } } - else if(locType == XA_DATALOCATOR_URI ) - { - tmpUri = (XADataLocator_URI*)(pImpl->dataSrc->pLocator); - XAPlayItfImpl_DeterminePlaybackEngine(pItf, tmpUri); - } else { @@ -369,44 +385,51 @@ } break; case MP_VOLUMEITF: -#ifdef _GSTREAMER_BACKEND_ - pItf = XAVolumeItfImpl_Create(pImpl->adaptationCtx); + pItf = XAVolumeItfImpl_Create(pImpl->curAdaptCtx); break; case MP_SEEKITF: - pItf = XASeekItfImpl_Create(pImpl->adaptationCtx); + pItf = XASeekItfImpl_Create(pImpl); break; case MP_PREFETCHSTATUSITF: - pItf = XAPrefetchStatusItfImpl_Create( pImpl->adaptationCtx ); + pItf = XAPrefetchStatusItfImpl_Create( pImpl ); break; case MP_METADATAEXTRACTIONITF: - pItf = XAMetadataExtractionItfImpl_Create( pImpl->adaptationCtx ); + pItf = XAMetadataExtractionItfImpl_Create( pImpl->curAdaptCtx ); break; case MP_METADATATRAVERSALITF: - pItf = XAMetadataTraversalItfImpl_Create( pImpl->adaptationCtx ); + pItf = XAMetadataTraversalItfImpl_Create( pImpl->curAdaptCtx ); break; case MP_PLAYBACKRATEITF: - pItf = XAPlaybackRateItfImpl_Create(pImpl->adaptationCtx); + pItf = XAPlaybackRateItfImpl_Create(pImpl); break; case MP_CONFIGEXTENSIONITF: pItf = XAConfigExtensionsItfImpl_Create(); - XAConfigExtensionsItfImpl_SetContext( pItf, pImpl->adaptationCtx); + XAConfigExtensionsItfImpl_SetContext( pItf, pImpl->curAdaptCtx); break; case MP_DYNAMICSOURCEITF: - pItf = XADynamicSourceItfImpl_Create(pImpl->adaptationCtx); + pItf = XADynamicSourceItfImpl_Create(pImpl->curAdaptCtx); break; case MP_EQUALIZERITF: - pItf = XAEqualizerItfImpl_Create(pImpl->adaptationCtx); + pItf = XAEqualizerItfImpl_Create(pImpl->curAdaptCtx); break; case MP_IMAGECONTROLSITF: - pItf = XAImageControlsItfImpl_Create(pImpl->adaptationCtx); + pItf = XAImageControlsItfImpl_Create(pImpl->curAdaptCtx); break; case MP_IMAGEEFFECTSITF: - pItf = XAImageEffectsItfImpl_Create(pImpl->adaptationCtx); + pItf = XAImageEffectsItfImpl_Create(pImpl->curAdaptCtx); break; case MP_VIDEOPOSTPROCESSINGITF: - pItf = XAVideoPostProcessingItfImpl_Create(pImpl->adaptationCtx); -#endif + pItf = XAVideoPostProcessingItfImpl_Create(pImpl->curAdaptCtx); + break; + case MP_NOKIAVOLUMEEXT: + pItf = XANokiaVolumeExtItfImpl_Create(pImpl->curAdaptCtx); break; + case MP_NOKIALINEARVOLUME: + pItf = XANokiaLinearVolumeItfImpl_Create(pImpl->curAdaptCtx); + break; + case MP_STREAMINFORMATIONITF: + pItf = XAStreamInformationItfImpl_Create(pImpl->curAdaptCtx); + break; default: break; } @@ -425,15 +448,13 @@ } } /* init adaptation */ - if(pImpl->isMMFPlayback) + if(pImpl->curAdaptCtx->fwtype == FWMgrFWMMF) { - ret = XAMediaPlayerAdaptMMF_PostInit( pImpl->adaptationCtxMMF ); + ret = XAMediaPlayerAdaptMMF_PostInit( (XAAdaptationMMFCtx*)pImpl->adaptationCtxMMF ); } else { -#ifdef _GSTREAMER_BACKEND_ - ret = XAMediaPlayerAdapt_PostInit( pImpl->adaptationCtx ); -#endif + ret = XAMediaPlayerAdapt_PostInit( (XAAdaptationGstCtx*)pImpl->adaptationCtxGst ); } if ( ret != XA_RESULT_SUCCESS ) { @@ -469,16 +490,11 @@ { XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self); XAuint8 itfIdx = 0; - + XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*)pObj; DEBUG_API("->XAMediaPlayerImpl_FreeResources"); XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS( XATSMediaPlayer ); -#ifdef _GSTREAMER_BACKEND_ - XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*)pObj; + assert(pObj && pImpl && pObj == pObj->self); -#endif - - - for(itfIdx = 0; itfIdx < MP_ITFCOUNT; itfIdx++) { void *pItf = pObj->interfaceMap[itfIdx].pItf; @@ -528,17 +544,33 @@ case MP_VIDEOPOSTPROCESSINGITF: XAVideoPostProcessingItfImpl_Free(pItf); break; + case MP_NOKIAVOLUMEEXT: + XANokiaVolumeExtItfImpl_Free(pItf); + break; + case MP_NOKIALINEARVOLUME: + XANokiaLinearVolumeItfImpl_Free(pItf); + break; + case MP_STREAMINFORMATIONITF: + XAStreamInformationItfImpl_Free(pItf); + break; + } pObj->interfaceMap[itfIdx].pItf = NULL; } } -#ifdef _GSTREAMER_BACKEND_ - if ( pImpl->adaptationCtx != NULL ) - { - XAMediaPlayerAdapt_Destroy( pImpl->adaptationCtx ); - pImpl->adaptationCtx = NULL; - } -#endif + + if(pImpl->curAdaptCtx) + { + if(pImpl->curAdaptCtx->fwtype == FWMgrFWMMF) + { + XAMediaPlayerAdaptMMF_Destroy( (XAAdaptationMMFCtx*)pImpl->adaptationCtxMMF ); + } + else + { + XAMediaPlayerAdapt_Destroy( (XAAdaptationGstCtx*)pImpl->adaptationCtxGst ); + } + } + XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS( XATSMediaPlayer ); DEBUG_API("<-XAMediaPlayerImpl_FreeResources"); return; @@ -549,10 +581,10 @@ */ XAresult XAMediaPlayerImpl_DoAddItf(XAObjectItf self, XAObjItfMapEntry *mapEntry ) { -#ifdef _GSTREAMER_BACKEND_ + XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self); XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*)(pObj); -#endif + XAresult ret = XA_RESULT_SUCCESS; DEBUG_API("->XAMediaPlayerImpl_DoAddItf"); @@ -560,23 +592,23 @@ { switch( mapEntry->mapIdx ) { -#ifdef _GSTREAMER_BACKEND_ + case MP_METADATAEXTRACTIONITF: - mapEntry->pItf = XAMetadataExtractionItfImpl_Create( pImpl->adaptationCtx ); + mapEntry->pItf = XAMetadataExtractionItfImpl_Create( pImpl->curAdaptCtx ); break; case MP_METADATATRAVERSALITF: - mapEntry->pItf = XAMetadataTraversalItfImpl_Create( pImpl->adaptationCtx ); + mapEntry->pItf = XAMetadataTraversalItfImpl_Create( pImpl->curAdaptCtx ); break; case MP_PLAYBACKRATEITF: - mapEntry->pItf = XAPlaybackRateItfImpl_Create(pImpl->adaptationCtx); + mapEntry->pItf = XAPlaybackRateItfImpl_Create(pImpl); break; case MP_EQUALIZERITF: - mapEntry->pItf = XAEqualizerItfImpl_Create( pImpl->adaptationCtx ); + mapEntry->pItf = XAEqualizerItfImpl_Create( pImpl->curAdaptCtx ); break; case MP_IMAGEEFFECTSITF: - mapEntry->pItf = XAImageEffectsItfImpl_Create( pImpl->adaptationCtx ); + mapEntry->pItf = XAImageEffectsItfImpl_Create( pImpl->curAdaptCtx ); break; -#endif + default: DEBUG_ERR("XAMediaPlayerImpl_DoAddItf unknown id"); ret = XA_RESULT_FEATURE_UNSUPPORTED; @@ -653,30 +685,4 @@ DEBUG_API("<-XAMediaPlayerImpl_DoRemoveItf"); return ret; } -XAresult XAMediaPlayerImpl_DeterminePlaybackEngine(XAObjectItf self, XADataLocator_URI *uri) -{ - - XAresult ret = XA_RESULT_SUCCESS; - char* tempPtr = NULL; - char extension[5]; - - XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self); - XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*)pObj; - DEBUG_API("->XAMediaPlayerImpl_DeterminePlaybackEngine"); - - //need to move to configuration file and add more in final class - - pImpl->isMMFPlayback = XA_BOOLEAN_TRUE; - - tempPtr = strchr((char*)(uri->URI), '.'); - strcpy(extension, tempPtr); - - if(!strcmp(extension, ".wav")) - { - pImpl->isMMFPlayback = XA_BOOLEAN_FALSE; - } - DEBUG_API("<-XAMediaPlayerImpl_DeterminePlaybackEngine"); - return ret; - -}