--- 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");