diff -r 80975da52420 -r 43d09473c595 khronosfws/openmax_al/src/metadataextractor/xametadataextractor.c --- a/khronosfws/openmax_al/src/metadataextractor/xametadataextractor.c Mon May 03 12:59:52 2010 +0300 +++ b/khronosfws/openmax_al/src/metadataextractor/xametadataextractor.c Fri May 14 16:22:35 2010 +0300 @@ -24,11 +24,15 @@ #include "xametadataextractionitf.h" #include "xametadatatraversalitf.h" #include "xaconfigextensionsitf.h" -#ifdef _GSTREAMER_BACKEND_ -#include "XAMetadataAdaptCtx.h" -#endif + +#include "xametadataadaptctx.h" +#include "xacapabilitiesmgr.h" #include "xathreadsafety.h" +#include "xaadaptationmmf.h" +#include "xametadataadaptctxmmf.h" + + /* Static mapping of enumeration XAMetadataInterfaces to interface iids */ static const XAInterfaceID* xaMetadataExtractorItfIIDs[MDE_ITFCOUNT]= { @@ -49,7 +53,9 @@ * Description: Create object * Add this method to XAGlobals.h */ -XAresult XAMetadataExtractorImpl_Create(XAObjectItf *pMetadataExtractor, +XAresult XAMetadataExtractorImpl_Create(FrameworkMap* mapper, + XACapabilities* capabilities, + XAObjectItf *pMetadataExtractor, XADataSource *pDataSource, XAuint32 numInterfaces, const XAInterfaceID * pInterfaceIds, @@ -58,6 +64,8 @@ XAMetadataExtractorImpl* pImpl = NULL; XAObjectItfImpl* pBaseObj = NULL; XAuint8 itfIndex = 0; + FWMgrFwType fwType; + const char *uri = NULL; XAresult res = XA_RESULT_SUCCESS; DEBUG_API("->XAMetadataExtractorImpl_Create"); @@ -139,29 +147,55 @@ } } - /* Mark interfaces that can be handled dynamically */ + + // Mark interfaces that can be handled dynamically pBaseObj->interfaceMap[MDE_CONFIGEXTENSIONITF].isDynamic = XA_BOOLEAN_TRUE; - /* Set ObjectItf to point to newly created object */ + //Set ObjectItf to point to newly created object *pMetadataExtractor = (XAObjectItf)&(pBaseObj->self); -#ifdef _GSTREAMER_BACKEND_ - /* Create metadata adaptation context */ - pImpl->adaptationCtx = XAMetadataAdaptCtx_Create(pDataSource); -#endif + //store member variables + pImpl->dataSrc = pDataSource; + + /* Determine framework type that can handle recording */ + fwType = (FWMgrFwType)FWMgrMOUnknown; + /**/ + if (pDataSource->pLocator) + { + XADataLocator_URI* dataLoc = (XADataLocator_URI*)pDataSource->pLocator; + if (dataLoc->locatorType == XA_DATALOCATOR_URI) + { + uri = (char*)dataLoc->URI; + } + } + + fwType = XAFrameworkMgr_GetFramework(mapper, uri, FWMgrMOPlayer); + + if (fwType == FWMgrMOUnknown) + { + XAObjectItfImpl_Destroy((XAObjectItf)&(pBaseObj)); + XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer ); + DEBUG_API("<-XAMetadataExtractorImpl_Create"); + return XA_RESULT_CONTENT_UNSUPPORTED; + } - /* This code is put here to return Feature Not Supported since adaptation is not present*/ - /*************************************************/ - XAObjectItfImpl_Destroy((XAObjectItf)&(pBaseObj)); + if(fwType == FWMgrFWMMF) + { + pImpl->adaptationCtxMMF = XAMetadataAdaptCtxMMF_Create(pDataSource); + + pImpl->curAdaptCtx = pImpl->adaptationCtxMMF; + } + else + { + // Create metadata adaptation context + pImpl->adaptationCtxGst = XAMetadataAdaptCtx_Create(pDataSource); + + pImpl->curAdaptCtx = pImpl->adaptationCtxGst; + } + XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); - DEBUG_ERR("Required interface not found - abort creation!"); DEBUG_API("<-XAMetadataExtractorImpl_Create"); - return XA_RESULT_FEATURE_UNSUPPORTED; - /*************************************************/ - -/* XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); - DEBUG_API("<-XAMetadataExtractorImpl_Create"); - return XA_RESULT_SUCCESS;*/ + return XA_RESULT_SUCCESS; } /* XAResult XAMetadataExtractorImpl_QueryNumSupportedInterfaces @@ -258,21 +292,21 @@ XAMetadataExtractorImpl_DoRemoveItf); } break; -#ifdef _GSTREAMER_BACKEND_ + case MDE_METADATAEXTRACTIONITF: - pItf = XAMetadataExtractionItfImpl_Create( pObjImpl->adaptationCtx ); + pItf = XAMetadataExtractionItfImpl_Create( pObjImpl->curAdaptCtx ); break; case MDE_METADATATRAVERSALITF: - pItf = XAMetadataTraversalItfImpl_Create( pObjImpl->adaptationCtx ); + pItf = XAMetadataTraversalItfImpl_Create( pObjImpl->curAdaptCtx ); break; case MDE_CONFIGEXTENSIONITF: pItf = XAConfigExtensionsItfImpl_Create(); - XAConfigExtensionsItfImpl_SetContext( pItf, pObjImpl->adaptationCtx ); + XAConfigExtensionsItfImpl_SetContext( pItf, pObjImpl->curAdaptCtx ); break; case MDE_DYNAMICSOURCEITF: - pItf = XADynamicSourceItfImpl_Create( pObjImpl->adaptationCtx ); + pItf = XADynamicSourceItfImpl_Create( pObjImpl->curAdaptCtx ); break; -#endif + default: break; } @@ -292,9 +326,16 @@ } /*Initialize adaptation context*/ /* init adaptation */ -#ifdef _GSTREAMER_BACKEND_ - ret = XAMetadataAdaptCtx_PostInit( pObjImpl->adaptationCtx ); -#endif + + if(pObjImpl->curAdaptCtx->fwtype == FWMgrFWMMF) + { + ret = XAMetadataAdaptCtxMMF_PostInit( (XAAdaptationMMFCtx*)pObjImpl->adaptationCtxMMF ); + } + else + { + ret = XAMetadataAdaptCtx_PostInit( (XAAdaptationGstCtx*)pObjImpl->adaptationCtxGst ); + } + if ( ret != XA_RESULT_SUCCESS ) { XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); @@ -328,12 +369,13 @@ XAuint8 itfIdx = 0; void *pItf = NULL; + XAMetadataExtractorImpl* pImpl = (XAMetadataExtractorImpl*)(*self); DEBUG_API("->XAMetadataExtractorImpl_FreeResources"); XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS(XATSMediaPlayer); -#ifdef _GSTREAMER_BACKEND_ - XAMetadataExtractorImpl* pImpl = (XAMetadataExtractorImpl*)(*self); + + assert( pObj && pImpl && pObj == pObj->self ); -#endif + for(itfIdx = 0; itfIdx < MDE_ITFCOUNT; itfIdx++) { pItf = pObj->interfaceMap[itfIdx].pItf; @@ -360,13 +402,23 @@ pObj->interfaceMap[itfIdx].pItf = NULL; } } -#ifdef _GSTREAMER_BACKEND_ - if ( pImpl->adaptationCtx != NULL ) - { - XAMetadataAdaptCtx_Destroy( pImpl->adaptationCtx ); - pImpl->adaptationCtx = NULL; - } -#endif + + if(pImpl->curAdaptCtx) + { + if(pImpl->curAdaptCtx->fwtype == FWMgrFWMMF) + { + XAMetadataAdaptCtxMMF_Destroy( (XAAdaptationMMFCtx*)pImpl->adaptationCtxMMF ); + pImpl->adaptationCtxMMF = NULL; + } + else + { + XAMetadataAdaptCtx_Destroy( (XAAdaptationGstCtx*)pImpl->adaptationCtxGst ); + pImpl->adaptationCtxGst = NULL; + } + } + + pImpl->curAdaptCtx = NULL; + XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS(XATSMediaPlayer); DEBUG_API("<-XAMetadataExtractorImpl_FreeResources"); return; @@ -381,10 +433,10 @@ */ XAresult XAMetadataExtractorImpl_DoAddItf(XAObjectItf self, XAObjItfMapEntry *mapEntry ) { -#ifdef _GSTREAMER_BACKEND_ + XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self); XAMetadataExtractorImpl* pImpl = (XAMetadataExtractorImpl*)(pObj); -#endif + XAresult ret = XA_RESULT_SUCCESS; DEBUG_API("->XAMetadataExtractorImpl_DoAddItf"); @@ -394,9 +446,9 @@ { case MDE_CONFIGEXTENSIONITF: mapEntry->pItf = XAConfigExtensionsItfImpl_Create(); -#ifdef _GSTREAMER_BACKEND_ - XAConfigExtensionsItfImpl_SetContext( mapEntry->pItf, pImpl->adaptationCtx); -#endif + + XAConfigExtensionsItfImpl_SetContext( mapEntry->pItf, pImpl->adaptationCtxGst); + break; default: DEBUG_ERR("XAMetadataExtractorImpl_DoAddItf unknown id");