khronosfws/openmax_al/src/metadataextractor/xametadataextractor.c
changeset 25 6f7ceef7b1d1
parent 19 4a629bc82c5e
child 33 5e8b14bae8c3
equal deleted inserted replaced
21:2ed61feeead6 25:6f7ceef7b1d1
     1 /*
     1 /*
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
     2  * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3 * All rights reserved.
     3  * All rights reserved.
     4 * This component and the accompanying materials are made available
     4  * This component and the accompanying materials are made available
     5 * under the terms of "Eclipse Public License v1.0"
     5  * under the terms of "Eclipse Public License v1.0"
     6 * which accompanies this distribution, and is available
     6  * which accompanies this distribution, and is available
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7  * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     8 *
     8  *
     9 * Initial Contributors:
     9  * Initial Contributors:
    10 * Nokia Corporation - initial contribution.
    10  * Nokia Corporation - initial contribution.
    11 *
    11  *
    12 * Contributors:
    12  * Contributors:
    13 *
    13  *
    14 * Description: 
    14  * Description: Metadata Extractor Object Impl
    15 *
    15  *
    16 */
    16  */
    17 
    17 
    18 #include <stdio.h>
    18 #include <stdio.h>
    19 #include <stdlib.h>
    19 #include <stdlib.h>
    20 #include <assert.h>
    20 #include <assert.h>
    21 #include "xametadataextractor.h"
    21 #include "xametadataextractor.h"
    30 #include "xathreadsafety.h"
    30 #include "xathreadsafety.h"
    31 
    31 
    32 #include "xaadaptationmmf.h"
    32 #include "xaadaptationmmf.h"
    33 #include "xametadataadaptctxmmf.h"
    33 #include "xametadataadaptctxmmf.h"
    34 
    34 
    35 
       
    36 /* Static mapping of enumeration XAMetadataInterfaces to interface iids */
    35 /* Static mapping of enumeration XAMetadataInterfaces to interface iids */
    37 static const XAInterfaceID* xaMetadataExtractorItfIIDs[MDE_ITFCOUNT]=
    36 static const XAInterfaceID* xaMetadataExtractorItfIIDs[MDE_ITFCOUNT] =
    38 {
    37     {
    39     &XA_IID_OBJECT,
    38             &XA_IID_OBJECT,
    40     &XA_IID_DYNAMICINTERFACEMANAGEMENT,
    39             &XA_IID_DYNAMICINTERFACEMANAGEMENT,
    41     &XA_IID_METADATAEXTRACTION,
    40             &XA_IID_METADATAEXTRACTION,
    42     &XA_IID_METADATATRAVERSAL,
    41             &XA_IID_METADATATRAVERSAL,
    43     &XA_IID_CONFIGEXTENSION,
    42             &XA_IID_CONFIGEXTENSION,
    44     &XA_IID_DYNAMICSOURCE
    43             &XA_IID_DYNAMICSOURCE
    45 };
    44     };
    46 
       
    47 
    45 
    48 /*****************************************************************************
    46 /*****************************************************************************
    49  * Global methods
    47  * Global methods
    50  *****************************************************************************/
    48  *****************************************************************************/
    51 
    49 
    52 /* XAResult XAMetadataExtractorImpl_Create
    50 /* XAResult XAMetadataExtractorImpl_Create
    53  * Description: Create object
    51  * Description: Create object
    54  * Add this method to XAGlobals.h
    52  * Add this method to XAGlobals.h
    55  */
    53  */
    56 XAresult XAMetadataExtractorImpl_Create(FrameworkMap* mapper,
    54 XAresult XAMetadataExtractorImpl_Create(FrameworkMap* mapper,
    57                                         XACapabilities* capabilities,
    55         XACapabilities* capabilities, XAObjectItf *pMetadataExtractor,
    58                                         XAObjectItf *pMetadataExtractor,
    56         XADataSource *pDataSource, XAuint32 numInterfaces,
    59                                         XADataSource *pDataSource,
    57         const XAInterfaceID * pInterfaceIds,
    60                                         XAuint32 numInterfaces,
    58         const XAboolean * pInterfaceRequired)
    61                                         const XAInterfaceID * pInterfaceIds,
    59     {
    62                                         const XAboolean * pInterfaceRequired)
       
    63 {
       
    64     XAMetadataExtractorImpl* pImpl = NULL;
    60     XAMetadataExtractorImpl* pImpl = NULL;
    65     XAObjectItfImpl* pBaseObj = NULL;
    61     XAObjectItfImpl* pBaseObj = NULL;
    66     XAuint8 itfIndex = 0;
    62     XAuint8 itfIndex = 0;
    67     FWMgrFwType fwType;
    63     FWMgrFwType fwType;
    68     const char *uri = NULL;    
    64     const char *uri = NULL;
    69     XAresult res = XA_RESULT_SUCCESS;
    65     XAresult res = XA_RESULT_SUCCESS;
    70 
    66 
    71     DEBUG_API("->XAMetadataExtractorImpl_Create");
    67     DEBUG_API("->XAMetadataExtractorImpl_Create");
    72     XA_IMPL_THREAD_SAFETY_ENTRY(XATSMediaPlayer);
    68     XA_IMPL_THREAD_SAFETY_ENTRY(XATSMediaPlayer);
    73 
    69 
    74     if( !pMetadataExtractor )
    70     if (!pMetadataExtractor)
    75     {
    71         {
    76         XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
    72         XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
    77         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
    73         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
    78         /* invalid parameter */
    74         /* invalid parameter */
    79         DEBUG_API("<-XAMetadataExtractorImpl_Create");
    75         DEBUG_API("<-XAMetadataExtractorImpl_Create");
    80         return XA_RESULT_PARAMETER_INVALID;
    76         return XA_RESULT_PARAMETER_INVALID;
    81     }
    77         }
    82 
    78 
    83     res = XACommon_CheckDataSource(pDataSource,NULL);
    79     res = XACommon_CheckDataSource(pDataSource, NULL);
    84     if(res!=XA_RESULT_SUCCESS)
    80     if (res != XA_RESULT_SUCCESS)
    85     {
    81         {
    86         XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
    82         XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
    87         DEBUG_API("<-XAMetadataExtractorImpl_Create");
    83         DEBUG_API("<-XAMetadataExtractorImpl_Create");
    88         return res;
    84         return res;
    89     }
    85         }
    90 
    86 
    91     /* instantiate object implementation */
    87     /* instantiate object implementation */
    92     pImpl = (XAMetadataExtractorImpl*)calloc(1,sizeof(XAMetadataExtractorImpl));
    88     pImpl = (XAMetadataExtractorImpl*) calloc(1,
    93     if(!pImpl)
    89             sizeof(XAMetadataExtractorImpl));
    94     {
    90     if (!pImpl)
       
    91         {
    95         XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
    92         XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
    96         DEBUG_ERR("XA_RESULT_MEMORY_FAILURE");
    93         DEBUG_ERR("XA_RESULT_MEMORY_FAILURE");
    97         /* memory allocation failed */
    94         /* memory allocation failed */
    98         DEBUG_API("<-XAMetadataExtractorImpl_Create");
    95         DEBUG_API("<-XAMetadataExtractorImpl_Create");
    99         return XA_RESULT_MEMORY_FAILURE;
    96         return XA_RESULT_MEMORY_FAILURE;
   100     }
    97         }
   101     pBaseObj = &pImpl->baseObj;
    98     pBaseObj = &pImpl->baseObj;
   102 
    99 
   103     /* Initialize base object default implementation */
   100     /* Initialize base object default implementation */
   104     XAObjectItfImpl_Init(pBaseObj,
   101     XAObjectItfImpl_Init(pBaseObj, MDE_ITFCOUNT, xaMetadataExtractorItfIIDs,
   105                          MDE_ITFCOUNT,
   102             XAMetadataExtractorImpl_DoRealize,
   106                          xaMetadataExtractorItfIIDs,
   103             XAMetadataExtractorImpl_DoResume,
   107                          XAMetadataExtractorImpl_DoRealize,
   104             XAMetadataExtractorImpl_FreeResources);
   108                          XAMetadataExtractorImpl_DoResume,
       
   109                          XAMetadataExtractorImpl_FreeResources);
       
   110 
   105 
   111     /* Mark interfaces that need to be exposed */
   106     /* Mark interfaces that need to be exposed */
   112     /* Implicit and mandated interfaces */
   107     /* Implicit and mandated interfaces */
   113     pBaseObj->interfaceMap[MDE_METADATAEXTRACTIONITF].required = XA_BOOLEAN_TRUE;
   108     pBaseObj->interfaceMap[MDE_METADATAEXTRACTIONITF].required
   114     pBaseObj->interfaceMap[MDE_METADATATRAVERSALITF].required = XA_BOOLEAN_TRUE;
   109             = XA_BOOLEAN_TRUE;
       
   110     pBaseObj->interfaceMap[MDE_METADATATRAVERSALITF].required
       
   111             = XA_BOOLEAN_TRUE;
   115     pBaseObj->interfaceMap[MDE_DYNAMICSOURCEITF].required = XA_BOOLEAN_TRUE;
   112     pBaseObj->interfaceMap[MDE_DYNAMICSOURCEITF].required = XA_BOOLEAN_TRUE;
   116     pBaseObj->interfaceMap[MDE_DIMITF].required = XA_BOOLEAN_TRUE;
   113     pBaseObj->interfaceMap[MDE_DIMITF].required = XA_BOOLEAN_TRUE;
   117 
   114 
   118     /* Explicit interfaces */
   115     /* Explicit interfaces */
   119     if ((numInterfaces != 0) && pInterfaceIds && pInterfaceRequired )
   116     if ((numInterfaces != 0) && pInterfaceIds && pInterfaceRequired)
   120     {
   117         {
   121         /* Check required interfaces */
   118         /* Check required interfaces */
   122         for(itfIndex = 0; itfIndex < numInterfaces; itfIndex++)
   119         for (itfIndex = 0; itfIndex < numInterfaces; itfIndex++)
   123         {
   120             {
   124             /* If mapEntry is null then required interface is not supported.*/
   121             /* If mapEntry is null then required interface is not supported.*/
   125             XAObjItfMapEntry *entry =
   122             XAObjItfMapEntry *entry = XAObjectItfImpl_GetItfEntry(
   126                 XAObjectItfImpl_GetItfEntry((XAObjectItf)&(pBaseObj), pInterfaceIds[itfIndex]);
   123                     (XAObjectItf) &(pBaseObj), pInterfaceIds[itfIndex]);
   127             if( !entry  )
   124             if (!entry)
   128             {
       
   129                 if( pInterfaceRequired[itfIndex] )
       
   130                 {
   125                 {
       
   126                 if (pInterfaceRequired[itfIndex])
       
   127                     {
   131                     /* required interface cannot be accommodated - fail creation */
   128                     /* required interface cannot be accommodated - fail creation */
   132                     XAObjectItfImpl_Destroy((XAObjectItf)&(pBaseObj));
   129                     XAObjectItfImpl_Destroy((XAObjectItf) &(pBaseObj));
   133                     XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
   130                     XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
   134                     DEBUG_ERR("Required interface not found - abort creation!");
   131                     DEBUG_ERR("Required interface not found - abort creation!");
   135                     DEBUG_API("<-XAMetadataExtractorImpl_Create");
   132                     DEBUG_API("<-XAMetadataExtractorImpl_Create");
   136                     return XA_RESULT_FEATURE_UNSUPPORTED;
   133                     return XA_RESULT_FEATURE_UNSUPPORTED;
       
   134                     }
       
   135                 else
       
   136                     {
       
   137                     DEBUG_INFO("Requested (not required) interface not found - continue creation");
       
   138                     }
   137                 }
   139                 }
   138                 else
   140             else
   139                 {
   141                 {
   140                     DEBUG_INFO("Requested (not required) interface not found - continue creation");
   142                 entry->required = XA_BOOLEAN_TRUE;
   141                 }
   143                 }
   142             }
   144             }
   143             else
   145         }
   144             {
   146 
   145                 entry->required = XA_BOOLEAN_TRUE;
       
   146             }
       
   147         }
       
   148     }
       
   149 
       
   150    
       
   151     // Mark interfaces that can be handled dynamically 
   147     // Mark interfaces that can be handled dynamically 
   152     pBaseObj->interfaceMap[MDE_CONFIGEXTENSIONITF].isDynamic = XA_BOOLEAN_TRUE;
   148     pBaseObj->interfaceMap[MDE_CONFIGEXTENSIONITF].isDynamic
   153 
   149             = XA_BOOLEAN_TRUE;
   154      //Set ObjectItf to point to newly created object 
   150 
   155     *pMetadataExtractor = (XAObjectItf)&(pBaseObj->self);
   151     //Set ObjectItf to point to newly created object 
   156 
   152     *pMetadataExtractor = (XAObjectItf) &(pBaseObj->self);
   157 	//store member variables
   153 
   158 	pImpl->dataSrc = pDataSource;
   154     //store member variables
   159 
   155     pImpl->dataSrc = pDataSource;
   160 	/* Determine framework type that can handle recording */
   156 
   161     fwType = (FWMgrFwType)FWMgrMOUnknown;
   157     /* Determine framework type that can handle recording */
       
   158     fwType = (FWMgrFwType) FWMgrMOUnknown;
   162     /**/
   159     /**/
   163     if (pDataSource->pLocator)
   160     if (pDataSource->pLocator)
   164     {
   161         {
   165         XADataLocator_URI* dataLoc = (XADataLocator_URI*)pDataSource->pLocator;
   162         XADataLocator_URI* dataLoc =
       
   163                 (XADataLocator_URI*) pDataSource->pLocator;
   166         if (dataLoc->locatorType == XA_DATALOCATOR_URI)
   164         if (dataLoc->locatorType == XA_DATALOCATOR_URI)
   167         {
   165             {
   168             uri = (char*)dataLoc->URI;
   166             uri = (char*) dataLoc->URI;
   169         }
   167             }
   170     }
   168         }
   171 	
   169 
   172     fwType = XAFrameworkMgr_GetFramework(mapper, uri, FWMgrMOPlayer);
   170     fwType = XAFrameworkMgr_GetFramework(mapper, uri, FWMgrMOPlayer);
   173 
   171 
   174     if (fwType == FWMgrMOUnknown)
   172     if (fwType == FWMgrMOUnknown)
   175     {
   173         {
   176         XAObjectItfImpl_Destroy((XAObjectItf)&(pBaseObj));
   174         XAObjectItfImpl_Destroy((XAObjectItf) &(pBaseObj));
   177         XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   175         XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   178         DEBUG_API("<-XAMetadataExtractorImpl_Create");
   176         DEBUG_API("<-XAMetadataExtractorImpl_Create");
   179         return XA_RESULT_CONTENT_UNSUPPORTED;
   177         return XA_RESULT_CONTENT_UNSUPPORTED;
   180     }
   178         }
   181     
   179 
   182     if(fwType == FWMgrFWMMF)
   180     if (fwType == FWMgrFWMMF)
   183     {    
   181         {
   184         pImpl->adaptationCtxMMF = XAMetadataAdaptCtxMMF_Create(pDataSource);
   182         pImpl->adaptationCtxMMF = XAMetadataAdaptCtxMMF_Create(pDataSource);
   185         
   183 
   186         pImpl->curAdaptCtx = pImpl->adaptationCtxMMF;    
   184         pImpl->curAdaptCtx = pImpl->adaptationCtxMMF;
   187     }
   185         }
   188     else
   186     else
   189     {
   187         {
   190 		// Create metadata adaptation context 
   188         // Create metadata adaptation context 
   191 		pImpl->adaptationCtxGst = XAMetadataAdaptCtx_Create(pDataSource);
   189         pImpl->adaptationCtxGst = XAMetadataAdaptCtx_Create(pDataSource);
   192        
   190 
   193        	pImpl->curAdaptCtx   = pImpl->adaptationCtxGst;
   191         pImpl->curAdaptCtx = pImpl->adaptationCtxGst;
   194     }
   192         }
   195 
   193 
   196     XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
   194     XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
   197     DEBUG_API("<-XAMetadataExtractorImpl_Create");
   195     DEBUG_API("<-XAMetadataExtractorImpl_Create");
   198     return XA_RESULT_SUCCESS;
   196     return XA_RESULT_SUCCESS;
   199 }
   197     }
   200 
   198 
   201 /* XAResult XAMetadataExtractorImpl_QueryNumSupportedInterfaces
   199 /* XAResult XAMetadataExtractorImpl_QueryNumSupportedInterfaces
   202  * Description: Statically query number of supported interfaces
   200  * Description: Statically query number of supported interfaces
   203  */
   201  */
   204 XAresult XAMetadataExtractorImpl_QueryNumSupportedInterfaces(
   202 XAresult XAMetadataExtractorImpl_QueryNumSupportedInterfaces(
   205                                     XAuint32 *pNumSupportedInterfaces)
   203         XAuint32 *pNumSupportedInterfaces)
   206 {
   204     {
   207     XAresult res = XA_RESULT_SUCCESS;
   205     XAresult res = XA_RESULT_SUCCESS;
   208     DEBUG_API("->XAMetadataExtractorImpl_QueryNumSupportedInterfaces");
   206     DEBUG_API("->XAMetadataExtractorImpl_QueryNumSupportedInterfaces");
   209     if(pNumSupportedInterfaces)
   207     if (pNumSupportedInterfaces)
   210     {
   208         {
   211         *pNumSupportedInterfaces = MDE_ITFCOUNT;
   209         *pNumSupportedInterfaces = MDE_ITFCOUNT;
   212         res = XA_RESULT_SUCCESS;
   210         res = XA_RESULT_SUCCESS;
   213     }
   211         }
   214     else
   212     else
   215     {
   213         {
   216         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   214         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   217         res = XA_RESULT_PARAMETER_INVALID;
   215         res = XA_RESULT_PARAMETER_INVALID;
   218     }
   216         }DEBUG_API_A1("<-XAMetadataExtractorImpl_QueryNumSupportedInterfaces (%d)", (int)res);
   219     DEBUG_API_A1("<-XAMetadataExtractorImpl_QueryNumSupportedInterfaces (%d)", (int)res);
       
   220     return res;
   217     return res;
   221 }
   218     }
   222 /* XAResult XAMetadataExtractorImpl_QuerySupportedInterfaces
   219 /* XAResult XAMetadataExtractorImpl_QuerySupportedInterfaces
   223  * Description: Statically query supported interfaces
   220  * Description: Statically query supported interfaces
   224  */
   221  */
   225 XAresult XAMetadataExtractorImpl_QuerySupportedInterfaces(
   222 XAresult XAMetadataExtractorImpl_QuerySupportedInterfaces(XAuint32 index,
   226                                     XAuint32 index,
   223         XAInterfaceID * pInterfaceId)
   227                                     XAInterfaceID * pInterfaceId)
   224     {
   228 {
       
   229     XAresult res = XA_RESULT_SUCCESS;
   225     XAresult res = XA_RESULT_SUCCESS;
   230     DEBUG_API("->XAMetadataExtractorImpl_QuerySupportedInterfaces");
   226     DEBUG_API("->XAMetadataExtractorImpl_QuerySupportedInterfaces");
   231 
   227 
   232     if (index >= MDE_ITFCOUNT || !pInterfaceId )
   228     if (index >= MDE_ITFCOUNT || !pInterfaceId)
   233     {
   229         {
   234         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   230         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   235         res = XA_RESULT_PARAMETER_INVALID;
   231         res = XA_RESULT_PARAMETER_INVALID;
   236     }
   232         }
   237     else
   233     else
   238     {
   234         {
   239         *pInterfaceId = *(xaMetadataExtractorItfIIDs[index]);
   235         *pInterfaceId = *(xaMetadataExtractorItfIIDs[index]);
   240         res = XA_RESULT_SUCCESS;
   236         res = XA_RESULT_SUCCESS;
   241     }
   237         }DEBUG_API_A1("<-XAMetadataExtractorImpl_QuerySupportedInterfaces (%d)", (int)res);
   242     DEBUG_API_A1("<-XAMetadataExtractorImpl_QuerySupportedInterfaces (%d)", (int)res);
       
   243     return res;
   238     return res;
   244 }
   239     }
   245 
       
   246 
   240 
   247 /*****************************************************************************
   241 /*****************************************************************************
   248  * base object XAObjectItfImpl methods
   242  * base object XAObjectItfImpl methods
   249  *****************************************************************************/
   243  *****************************************************************************/
   250 
   244 
   251 /* XAresult XAMetadataExtractorImpl_DoRealize( XAObjectItf self )
   245 /* XAresult XAMetadataExtractorImpl_DoRealize( XAObjectItf self )
   252  * Description: Realize all implicit and explicitly wanted interfaces.
   246  * Description: Realize all implicit and explicitly wanted interfaces.
   253  * Create and initialize implementation-specific variables.
   247  * Create and initialize implementation-specific variables.
   254  * Called from base object XAObjectItfImpl
   248  * Called from base object XAObjectItfImpl
   255  */
   249  */
   256 XAresult XAMetadataExtractorImpl_DoRealize( XAObjectItf self )
   250 XAresult XAMetadataExtractorImpl_DoRealize(XAObjectItf self)
   257 {
   251     {
   258     XAuint8 itfIdx = 0;
   252     XAuint8 itfIdx = 0;
   259     XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self);
   253     XAObjectItfImpl* pObj = (XAObjectItfImpl*) (*self);
   260     XAMetadataExtractorImpl* pObjImpl = (XAMetadataExtractorImpl*)(pObj);
   254     XAMetadataExtractorImpl* pObjImpl = (XAMetadataExtractorImpl*) (pObj);
   261     void *pItf = NULL;
   255     void *pItf = NULL;
   262     XAresult ret = XA_RESULT_SUCCESS;
   256     XAresult ret = XA_RESULT_SUCCESS;
   263 
   257 
   264     DEBUG_API("->XAMetadataExtractorImpl_DoRealize");
   258     DEBUG_API("->XAMetadataExtractorImpl_DoRealize");
   265     XA_IMPL_THREAD_SAFETY_ENTRY(XATSMediaPlayer);
   259     XA_IMPL_THREAD_SAFETY_ENTRY(XATSMediaPlayer);
   266 
   260 
   267     /* check casting from correct pointer type */
   261     /* check casting from correct pointer type */
   268     if( !pObjImpl || pObj != pObjImpl->baseObj.self )
   262     if (!pObjImpl || pObj != pObjImpl->baseObj.self)
   269     {
   263         {
   270         XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
   264         XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
   271         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   265         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   272         /* invalid parameter */
   266         /* invalid parameter */
   273         DEBUG_API("<-XAMetadataExtractorImpl_DoRealize");
   267         DEBUG_API("<-XAMetadataExtractorImpl_DoRealize");
   274         return XA_RESULT_PARAMETER_INVALID;
   268         return XA_RESULT_PARAMETER_INVALID;
   275     }
   269         }
   276 
   270 
   277     /* Realize all implicit and explicitly wanted interfaces */
   271     /* Realize all implicit and explicitly wanted interfaces */
   278     for(itfIdx=0; itfIdx<MDE_ITFCOUNT; itfIdx++)
   272     for (itfIdx = 0; itfIdx < MDE_ITFCOUNT; itfIdx++)
   279     {
   273         {
   280         if(!(pObj->interfaceMap[itfIdx].pItf) &&
   274         if (!(pObj->interfaceMap[itfIdx].pItf)
   281             pObj->interfaceMap[itfIdx].required )
   275                 && pObj->interfaceMap[itfIdx].required)
   282         {
   276             {
   283             switch(itfIdx)
   277             switch (itfIdx)
   284             {
   278                 {
   285                 case MDE_DIMITF:
   279                 case MDE_DIMITF:
   286                     pItf = XADIMItfImpl_Create();
   280                     pItf = XADIMItfImpl_Create();
   287                     if(pItf)
   281                     if (pItf)
   288                     {
   282                         {
   289                         XADIMItfImpl_Init(pItf, self,
   283                         XADIMItfImpl_Init(pItf, self,
   290                                       XAMetadataExtractorImpl_DoAddItf,
   284                                 XAMetadataExtractorImpl_DoAddItf,
   291                                       XAMetadataExtractorImpl_DoResumeItf,
   285                                 XAMetadataExtractorImpl_DoResumeItf,
   292                                       XAMetadataExtractorImpl_DoRemoveItf);
   286                                 XAMetadataExtractorImpl_DoRemoveItf);
   293                     }
   287                         }
   294                     break;
   288                     break;
   295 
   289 
   296                 case MDE_METADATAEXTRACTIONITF:
   290                 case MDE_METADATAEXTRACTIONITF:
   297                     pItf = XAMetadataExtractionItfImpl_Create( pObjImpl->curAdaptCtx );
   291                     pItf = XAMetadataExtractionItfImpl_Create(
       
   292                             pObjImpl->curAdaptCtx);
   298                     break;
   293                     break;
   299                 case MDE_METADATATRAVERSALITF:
   294                 case MDE_METADATATRAVERSALITF:
   300                     pItf = XAMetadataTraversalItfImpl_Create( pObjImpl->curAdaptCtx );
   295                     pItf = XAMetadataTraversalItfImpl_Create(
       
   296                             pObjImpl->curAdaptCtx);
   301                     break;
   297                     break;
   302                 case MDE_CONFIGEXTENSIONITF:
   298                 case MDE_CONFIGEXTENSIONITF:
   303                     pItf = XAConfigExtensionsItfImpl_Create();
   299                     pItf = XAConfigExtensionsItfImpl_Create();
   304                     XAConfigExtensionsItfImpl_SetContext( pItf, pObjImpl->curAdaptCtx );
   300                     XAConfigExtensionsItfImpl_SetContext(pItf,
       
   301                             pObjImpl->curAdaptCtx);
   305                     break;
   302                     break;
   306                 case MDE_DYNAMICSOURCEITF:
   303                 case MDE_DYNAMICSOURCEITF:
   307                     pItf = XADynamicSourceItfImpl_Create( pObjImpl->curAdaptCtx );
   304                     pItf = XADynamicSourceItfImpl_Create(
       
   305                             pObjImpl->curAdaptCtx);
   308                     break;
   306                     break;
   309 
   307 
   310                 default:
   308                 default:
   311                     break;
   309                     break;
   312             }
   310                 }
   313             if(!pItf)
   311             if (!pItf)
   314             {
   312                 {
   315                 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
   313                 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
   316                 DEBUG_ERR("XA_RESULT_MEMORY_FAILURE");
   314                 DEBUG_ERR("XA_RESULT_MEMORY_FAILURE");
   317                 /* memory allocation failed */
   315                 /* memory allocation failed */
   318                 DEBUG_API("<-XAMetadataExtractorImpl_DoRealize");
   316                 DEBUG_API("<-XAMetadataExtractorImpl_DoRealize");
   319                 return XA_RESULT_MEMORY_FAILURE;
   317                 return XA_RESULT_MEMORY_FAILURE;
   320             }
   318                 }
   321             else
   319             else
   322             {
   320                 {
   323                 pObj->interfaceMap[itfIdx].pItf = pItf;
   321                 pObj->interfaceMap[itfIdx].pItf = pItf;
   324             }
   322                 }
   325         }
   323             }
   326     }
   324         }
   327     /*Initialize adaptation context*/
   325     /*Initialize adaptation context*/
   328     /* init adaptation */
   326     /* init adaptation */
   329 
   327 
   330     if(pObjImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
   328     if (pObjImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
   331     {
   329         {
   332        ret = XAMetadataAdaptCtxMMF_PostInit( (XAAdaptationMMFCtx*)pObjImpl->adaptationCtxMMF );
   330         ret = XAMetadataAdaptCtxMMF_PostInit(
   333     }
   331                 (XAAdaptationMMFCtx*) pObjImpl->adaptationCtxMMF);
       
   332         }
   334     else
   333     else
   335     {
   334         {
   336 	    ret = XAMetadataAdaptCtx_PostInit( (XAAdaptationGstCtx*)pObjImpl->adaptationCtxGst );
   335         ret = XAMetadataAdaptCtx_PostInit(
   337     }
   336                 (XAAdaptationGstCtx*) pObjImpl->adaptationCtxGst);
   338 
   337         }
   339     if ( ret != XA_RESULT_SUCCESS )
   338 
   340     {
   339     if (ret != XA_RESULT_SUCCESS)
       
   340         {
   341         XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
   341         XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
   342         DEBUG_ERR("Adaptation init failed!");
   342         DEBUG_ERR("Adaptation init failed!");
   343         DEBUG_API("<-XAMetadataExtractorImpl_DoRealize");
   343         DEBUG_API("<-XAMetadataExtractorImpl_DoRealize");
   344         return ret;
   344         return ret;
   345     }
   345         }
   346     pObj->state = XA_OBJECT_STATE_REALIZED;
   346     pObj->state = XA_OBJECT_STATE_REALIZED;
   347     XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
   347     XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
   348     DEBUG_API("<-XAMetadataExtractorImpl_DoRealize");
   348     DEBUG_API("<-XAMetadataExtractorImpl_DoRealize");
   349     return XA_RESULT_SUCCESS;
   349     return XA_RESULT_SUCCESS;
   350 }
   350     }
   351 
   351 
   352 /* XAresult XAMetadataExtractorImpl_DoResume
   352 /* XAresult XAMetadataExtractorImpl_DoResume
   353  * Description: Resume object from suspended state
   353  * Description: Resume object from suspended state
   354  */
   354  */
   355 XAresult XAMetadataExtractorImpl_DoResume(XAObjectItf self)
   355 XAresult XAMetadataExtractorImpl_DoResume(XAObjectItf self)
   356 {
   356     {
   357     DEBUG_API("->XAMetadataExtractorImpl_DoResume");
   357     DEBUG_API("->XAMetadataExtractorImpl_DoResume");
   358     DEBUG_API("<-XAMetadataExtractorImpl_DoResume");
   358     DEBUG_API("<-XAMetadataExtractorImpl_DoResume");
   359     /* "suspended" state not supported by this implementation */
   359     /* "suspended" state not supported by this implementation */
   360     return XA_RESULT_PRECONDITIONS_VIOLATED;
   360     return XA_RESULT_PRECONDITIONS_VIOLATED;
   361 }
   361     }
   362 
   362 
   363 /* void XAMetadataExtractorImpl_FreeResources
   363 /* void XAMetadataExtractorImpl_FreeResources
   364  * Description: Free all resources reserved at XAMetadataExtractorImpl_DoRealize()
   364  * Description: Free all resources reserved at XAMetadataExtractorImpl_DoRealize()
   365  */
   365  */
   366 void XAMetadataExtractorImpl_FreeResources(XAObjectItf self)
   366 void XAMetadataExtractorImpl_FreeResources(XAObjectItf self)
   367 {
   367     {
   368     XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self);
   368     XAObjectItfImpl* pObj = (XAObjectItfImpl*) (*self);
   369     
   369 
   370     XAuint8 itfIdx = 0;
   370     XAuint8 itfIdx = 0;
   371     void *pItf = NULL;
   371     void *pItf = NULL;
   372     XAMetadataExtractorImpl* pImpl = (XAMetadataExtractorImpl*)(*self);
   372     XAMetadataExtractorImpl* pImpl = (XAMetadataExtractorImpl*) (*self);
   373     DEBUG_API("->XAMetadataExtractorImpl_FreeResources");
   373     DEBUG_API("->XAMetadataExtractorImpl_FreeResources");
   374     XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS(XATSMediaPlayer);
   374     XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS(XATSMediaPlayer);
   375 
   375 
   376     
       
   377     assert( pObj && pImpl && pObj == pObj->self );
   376     assert( pObj && pImpl && pObj == pObj->self );
   378 
   377 
   379     for(itfIdx = 0; itfIdx < MDE_ITFCOUNT; itfIdx++)
   378     for (itfIdx = 0; itfIdx < MDE_ITFCOUNT; itfIdx++)
   380     {
   379         {
   381         pItf = pObj->interfaceMap[itfIdx].pItf;
   380         pItf = pObj->interfaceMap[itfIdx].pItf;
   382         if(pItf)
   381         if (pItf)
   383         {
   382             {
   384             switch(itfIdx)
   383             switch (itfIdx)
   385             {
   384                 {
   386                 case MDE_METADATAEXTRACTIONITF:
   385                 case MDE_METADATAEXTRACTIONITF:
   387                     XAMetadataExtractionItfImpl_Free(pItf);
   386                     XAMetadataExtractionItfImpl_Free(pItf);
   388                     break;
   387                     break;
   389                 case MDE_METADATATRAVERSALITF:
   388                 case MDE_METADATATRAVERSALITF:
   390                     XAMetadataTraversalItfImpl_Free(pItf);
   389                     XAMetadataTraversalItfImpl_Free(pItf);
   396                     XADIMItfImpl_Free(pItf);
   395                     XADIMItfImpl_Free(pItf);
   397                     break;
   396                     break;
   398                 case MDE_CONFIGEXTENSIONITF:
   397                 case MDE_CONFIGEXTENSIONITF:
   399                     XAConfigExtensionsItfImpl_Free(pItf);
   398                     XAConfigExtensionsItfImpl_Free(pItf);
   400                     break;
   399                     break;
   401             }
   400                 }
   402             pObj->interfaceMap[itfIdx].pItf = NULL;
   401             pObj->interfaceMap[itfIdx].pItf = NULL;
   403         }
   402             }
   404     }
   403         }
   405 	
   404 
   406 	if(pImpl->curAdaptCtx)
   405     if (pImpl->curAdaptCtx)
   407 	{
   406         {
   408 		if(pImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
   407         if (pImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
   409 		{
   408             {
   410 			XAMetadataAdaptCtxMMF_Destroy( (XAAdaptationMMFCtx*)pImpl->adaptationCtxMMF );
   409             XAMetadataAdaptCtxMMF_Destroy(
   411 			pImpl->adaptationCtxMMF = NULL;
   410                     (XAAdaptationMMFCtx*) pImpl->adaptationCtxMMF);
   412 		}
   411             pImpl->adaptationCtxMMF = NULL;
   413 		else
   412             }
   414 		{
   413         else
   415 			XAMetadataAdaptCtx_Destroy( (XAAdaptationGstCtx*)pImpl->adaptationCtxGst );
   414             {
   416 			pImpl->adaptationCtxGst = NULL;
   415             XAMetadataAdaptCtx_Destroy(
   417 		}
   416                     (XAAdaptationGstCtx*) pImpl->adaptationCtxGst);
   418 	}
   417             pImpl->adaptationCtxGst = NULL;
   419 	
   418             }
   420 	pImpl->curAdaptCtx = NULL;
   419         }
       
   420 
       
   421     pImpl->curAdaptCtx = NULL;
   421 
   422 
   422     XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS(XATSMediaPlayer);
   423     XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS(XATSMediaPlayer);
   423     DEBUG_API("<-XAMetadataExtractorImpl_FreeResources");
   424     DEBUG_API("<-XAMetadataExtractorImpl_FreeResources");
   424     return;
   425     return;
   425 }
   426     }
   426 
   427 
   427 /*****************************************************************************
   428 /*****************************************************************************
   428  * MetadataExtractorImpl -specific methods
   429  * MetadataExtractorImpl -specific methods
   429  *****************************************************************************/
   430  *****************************************************************************/
   430 
   431 
   431 /* XAMetadataExtractorImpl_DoAddItf
   432 /* XAMetadataExtractorImpl_DoAddItf
   432  * Dynamically add an interface, object specific parts
   433  * Dynamically add an interface, object specific parts
   433  */
   434  */
   434 XAresult XAMetadataExtractorImpl_DoAddItf(XAObjectItf self, XAObjItfMapEntry *mapEntry  )
   435 XAresult XAMetadataExtractorImpl_DoAddItf(XAObjectItf self,
   435 {
   436         XAObjItfMapEntry *mapEntry)
   436 
   437     {
   437     XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self);
   438 
   438     XAMetadataExtractorImpl* pImpl = (XAMetadataExtractorImpl*)(pObj);
   439     XAObjectItfImpl* pObj = (XAObjectItfImpl*) (*self);
       
   440     XAMetadataExtractorImpl* pImpl = (XAMetadataExtractorImpl*) (pObj);
   439 
   441 
   440     XAresult ret = XA_RESULT_SUCCESS;
   442     XAresult ret = XA_RESULT_SUCCESS;
   441     DEBUG_API("->XAMetadataExtractorImpl_DoAddItf");
   443     DEBUG_API("->XAMetadataExtractorImpl_DoAddItf");
   442 
   444 
   443     if(mapEntry)
   445     if (mapEntry)
   444     {
   446         {
   445         switch( mapEntry->mapIdx )
   447         switch (mapEntry->mapIdx)
   446         {
   448             {
   447             case MDE_CONFIGEXTENSIONITF:
   449             case MDE_CONFIGEXTENSIONITF:
   448                 mapEntry->pItf = XAConfigExtensionsItfImpl_Create();
   450                 mapEntry->pItf = XAConfigExtensionsItfImpl_Create();
   449 
   451 
   450                 XAConfigExtensionsItfImpl_SetContext( mapEntry->pItf, pImpl->adaptationCtxGst);
   452                 XAConfigExtensionsItfImpl_SetContext(mapEntry->pItf,
       
   453                         pImpl->adaptationCtxGst);
   451 
   454 
   452                 break;
   455                 break;
   453             default:
   456             default:
   454                 DEBUG_ERR("XAMetadataExtractorImpl_DoAddItf unknown id");
   457                 DEBUG_ERR("XAMetadataExtractorImpl_DoAddItf unknown id")
       
   458                 ;
   455                 ret = XA_RESULT_FEATURE_UNSUPPORTED;
   459                 ret = XA_RESULT_FEATURE_UNSUPPORTED;
   456                 break;
   460                 break;
   457         }
   461             }
   458         if( !mapEntry->pItf && ret == XA_RESULT_SUCCESS)
   462         if (!mapEntry->pItf && ret == XA_RESULT_SUCCESS)
   459         {
   463             {
   460             DEBUG_ERR("XAMetadataExtractorImpl_DoAddItf itf creation failed");
   464             DEBUG_ERR("XAMetadataExtractorImpl_DoAddItf itf creation failed");
   461             ret = XA_RESULT_MEMORY_FAILURE;
   465             ret = XA_RESULT_MEMORY_FAILURE;
   462         }
   466             }
   463     }
   467         }
   464     else
   468     else
   465     {
   469         {
   466         ret = XA_RESULT_PARAMETER_INVALID;
   470         ret = XA_RESULT_PARAMETER_INVALID;
   467     }
   471         }
   468 
   472 
   469     DEBUG_API("<-XAMetadataExtractorImpl_DoAddItf");
   473     DEBUG_API("<-XAMetadataExtractorImpl_DoAddItf");
   470     return ret;
   474     return ret;
   471 }
   475     }
   472 
   476 
   473 /* XAMetadataExtractorImpl_DoResumeItf
   477 /* XAMetadataExtractorImpl_DoResumeItf
   474  * Try to resume lost interface, object specific parts
   478  * Try to resume lost interface, object specific parts
   475  */
   479  */
   476 XAresult XAMetadataExtractorImpl_DoResumeItf(XAObjectItf self, XAObjItfMapEntry *mapEntry  )
   480 XAresult XAMetadataExtractorImpl_DoResumeItf(XAObjectItf self,
   477 {
   481         XAObjItfMapEntry *mapEntry)
       
   482     {
   478     XAresult ret = XA_RESULT_SUCCESS;
   483     XAresult ret = XA_RESULT_SUCCESS;
   479     DEBUG_API("->XAMetadataExtractorImpl_DoResumeItf");
   484     DEBUG_API("->XAMetadataExtractorImpl_DoResumeItf");
   480     /* For now, no difference between suspended and unrealised itfs */
   485     /* For now, no difference between suspended and unrealised itfs */
   481     ret = XAMetadataExtractorImpl_DoAddItf(self,mapEntry);
   486     ret = XAMetadataExtractorImpl_DoAddItf(self, mapEntry);
   482     DEBUG_API("<-XAMetadataExtractorImpl_DoResumeItf");
   487     DEBUG_API("<-XAMetadataExtractorImpl_DoResumeItf");
   483     return ret;
   488     return ret;
   484 }
   489     }
   485 
   490 
   486 /* XAMetadataExtractorImpl_DoRemoveItf
   491 /* XAMetadataExtractorImpl_DoRemoveItf
   487  * Dynamically remove an interface, object specific parts
   492  * Dynamically remove an interface, object specific parts
   488  */
   493  */
   489 XAresult XAMetadataExtractorImpl_DoRemoveItf(XAObjectItf self, XAObjItfMapEntry *mapEntry )
   494 XAresult XAMetadataExtractorImpl_DoRemoveItf(XAObjectItf self,
   490 {
   495         XAObjItfMapEntry *mapEntry)
       
   496     {
   491     XAresult ret = XA_RESULT_SUCCESS;
   497     XAresult ret = XA_RESULT_SUCCESS;
   492     DEBUG_API("->XAMetadataExtractorImpl_DoRemoveItf");
   498     DEBUG_API("->XAMetadataExtractorImpl_DoRemoveItf");
   493     ret = XA_RESULT_SUCCESS;
   499     ret = XA_RESULT_SUCCESS;
   494     if(mapEntry)
   500     if (mapEntry)
   495     {
   501         {
   496         switch( mapEntry->mapIdx )
   502         switch (mapEntry->mapIdx)
   497         {
   503             {
   498             case MDE_CONFIGEXTENSIONITF:
   504             case MDE_CONFIGEXTENSIONITF:
   499                 XAConfigExtensionsItfImpl_Free(mapEntry->pItf);
   505                 XAConfigExtensionsItfImpl_Free(mapEntry->pItf);
   500                 break;
   506                 break;
   501             default:
   507             default:
   502                 DEBUG_ERR("XAMetadataExtractorImpl_DoRemoveItf unknown id");
   508                 DEBUG_ERR("XAMetadataExtractorImpl_DoRemoveItf unknown id")
       
   509                 ;
   503                 ret = XA_RESULT_FEATURE_UNSUPPORTED;
   510                 ret = XA_RESULT_FEATURE_UNSUPPORTED;
   504                 break;
   511                 break;
   505         }
   512             }
   506         mapEntry->pItf = NULL;
   513         mapEntry->pItf = NULL;
   507     }
   514         }
   508     else
   515     else
   509     {
   516         {
   510         ret = XA_RESULT_PARAMETER_INVALID;
   517         ret = XA_RESULT_PARAMETER_INVALID;
   511     }
   518         }
   512     DEBUG_API("<-XAMetadataExtractorImpl_DoRemoveItf");
   519     DEBUG_API("<-XAMetadataExtractorImpl_DoRemoveItf");
   513     return ret;
   520     return ret;
   514 }
   521     }
   515 /* END OF FILE */
   522 /* END OF FILE */