khronosfws/openmax_al/src/metadataextractor/xametadataextractor.c
changeset 53 eabc8c503852
parent 33 5e8b14bae8c3
equal deleted inserted replaced
48:a493a607b5bf 53:eabc8c503852
    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>
       
    21 #include "xametadataextractor.h"
    20 #include "xametadataextractor.h"
    22 #include "xadynamicsourceitf.h"
    21 #include "xadynamicsourceitf.h"
    23 #include "xadynintmgmtitf.h"
    22 #include "xadynintmgmtitf.h"
    24 #include "xametadataextractionitf.h"
    23 #include "xametadataextractionitf.h"
    25 #include "xaconfigextensionsitf.h"
       
    26 
    24 
    27 #include "xacapabilitiesmgr.h"
    25 #include "xacapabilitiesmgr.h"
    28 #include "xathreadsafety.h"
    26 #include "xathreadsafety.h"
    29 
    27 
    30 #include "xaadaptationmmf.h"
    28 #include "xaadaptationmmf.h"
    34 static const XAInterfaceID* xaMetadataExtractorItfIIDs[MDE_ITFCOUNT] =
    32 static const XAInterfaceID* xaMetadataExtractorItfIIDs[MDE_ITFCOUNT] =
    35     {
    33     {
    36     &XA_IID_OBJECT,
    34     &XA_IID_OBJECT,
    37     &XA_IID_DYNAMICINTERFACEMANAGEMENT,
    35     &XA_IID_DYNAMICINTERFACEMANAGEMENT,
    38     &XA_IID_METADATAEXTRACTION,
    36     &XA_IID_METADATAEXTRACTION,
    39     &XA_IID_CONFIGEXTENSION,
       
    40     &XA_IID_DYNAMICSOURCE
    37     &XA_IID_DYNAMICSOURCE
    41     };
    38     };
    42 
    39 
    43 /*****************************************************************************
    40 /*****************************************************************************
    44  * Global methods
    41  * Global methods
   138                 }
   135                 }
   139             }
   136             }
   140         }
   137         }
   141 
   138 
   142     // Mark interfaces that can be handled dynamically 
   139     // Mark interfaces that can be handled dynamically 
   143     pBaseObj->interfaceMap[MDE_CONFIGEXTENSIONITF].isDynamic
       
   144             = XA_BOOLEAN_TRUE;
       
   145 
       
   146     //Set ObjectItf to point to newly created object 
   140     //Set ObjectItf to point to newly created object 
   147     *pMetadataExtractor = (XAObjectItf) &(pBaseObj->self);
   141     *pMetadataExtractor = (XAObjectItf) &(pBaseObj->self);
   148 
   142 
   149     //store member variables
   143     //store member variables
   150     pImpl->dataSrc = pDataSource;
   144     pImpl->dataSrc = pDataSource;
   278 
   272 
   279                 case MDE_METADATAEXTRACTIONITF:
   273                 case MDE_METADATAEXTRACTIONITF:
   280                     pItf = XAMetadataExtractionItfImpl_Create(
   274                     pItf = XAMetadataExtractionItfImpl_Create(
   281                             pObjImpl->curAdaptCtx);
   275                             pObjImpl->curAdaptCtx);
   282                     break;
   276                     break;
   283                 case MDE_CONFIGEXTENSIONITF:
       
   284                     pItf = XAConfigExtensionsItfImpl_Create();
       
   285                     XAConfigExtensionsItfImpl_SetContext(pItf,
       
   286                             pObjImpl->curAdaptCtx);
       
   287                     break;
       
   288                 case MDE_DYNAMICSOURCEITF:
   277                 case MDE_DYNAMICSOURCEITF:
   289                     pItf = XADynamicSourceItfImpl_Create(
   278                     pItf = XADynamicSourceItfImpl_Create(
   290                             pObjImpl->curAdaptCtx);
   279                             pObjImpl->curAdaptCtx);
   291                     break;
   280                     break;
   292 
   281 
   351     void *pItf = NULL;
   340     void *pItf = NULL;
   352     XAMetadataExtractorImpl* pImpl = (XAMetadataExtractorImpl*) (*self);
   341     XAMetadataExtractorImpl* pImpl = (XAMetadataExtractorImpl*) (*self);
   353     DEBUG_API("->XAMetadataExtractorImpl_FreeResources");
   342     DEBUG_API("->XAMetadataExtractorImpl_FreeResources");
   354     XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS(XATSMediaPlayer);
   343     XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS(XATSMediaPlayer);
   355 
   344 
   356     assert( pObj && pImpl && pObj == pObj->self );
       
   357 
       
   358     for (itfIdx = 0; itfIdx < MDE_ITFCOUNT; itfIdx++)
   345     for (itfIdx = 0; itfIdx < MDE_ITFCOUNT; itfIdx++)
   359         {
   346         {
   360         pItf = pObj->interfaceMap[itfIdx].pItf;
   347         pItf = pObj->interfaceMap[itfIdx].pItf;
   361         if (pItf)
   348         if (pItf)
   362             {
   349             {
   368                 case MDE_DYNAMICSOURCEITF:
   355                 case MDE_DYNAMICSOURCEITF:
   369                     XADynamicSourceItfImpl_Free(pItf);
   356                     XADynamicSourceItfImpl_Free(pItf);
   370                     break;
   357                     break;
   371                 case MDE_DIMITF:
   358                 case MDE_DIMITF:
   372                     XADIMItfImpl_Free(pItf);
   359                     XADIMItfImpl_Free(pItf);
   373                     break;
       
   374                 case MDE_CONFIGEXTENSIONITF:
       
   375                     XAConfigExtensionsItfImpl_Free(pItf);
       
   376                     break;
   360                     break;
   377                 }
   361                 }
   378             pObj->interfaceMap[itfIdx].pItf = NULL;
   362             pObj->interfaceMap[itfIdx].pItf = NULL;
   379             }
   363             }
   380         }
   364         }
   404  * Dynamically add an interface, object specific parts
   388  * Dynamically add an interface, object specific parts
   405  */
   389  */
   406 XAresult XAMetadataExtractorImpl_DoAddItf(XAObjectItf self,
   390 XAresult XAMetadataExtractorImpl_DoAddItf(XAObjectItf self,
   407         XAObjItfMapEntry *mapEntry)
   391         XAObjItfMapEntry *mapEntry)
   408     {
   392     {
   409 
       
   410     XAObjectItfImpl* pObj = (XAObjectItfImpl*) (*self);
       
   411     XAMetadataExtractorImpl* pImpl = (XAMetadataExtractorImpl*) (pObj);
       
   412 
       
   413     XAresult ret = XA_RESULT_SUCCESS;
   393     XAresult ret = XA_RESULT_SUCCESS;
   414     DEBUG_API("->XAMetadataExtractorImpl_DoAddItf");
   394     DEBUG_API("->XAMetadataExtractorImpl_DoAddItf");
   415 
   395 
   416     if (mapEntry)
   396     if (mapEntry)
   417         {
   397         {
   418         switch (mapEntry->mapIdx)
   398         switch (mapEntry->mapIdx)
   419             {
   399             {
   420             case MDE_CONFIGEXTENSIONITF:
       
   421                 mapEntry->pItf = XAConfigExtensionsItfImpl_Create();
       
   422 
       
   423                 XAConfigExtensionsItfImpl_SetContext(mapEntry->pItf,
       
   424                         pImpl->adaptationCtxGst);
       
   425 
       
   426                 break;
       
   427             default:
   400             default:
   428                 DEBUG_ERR("XAMetadataExtractorImpl_DoAddItf unknown id");
   401                 DEBUG_ERR("XAMetadataExtractorImpl_DoAddItf unknown id");
   429                 ret = XA_RESULT_FEATURE_UNSUPPORTED;
   402                 ret = XA_RESULT_FEATURE_UNSUPPORTED;
   430                 break;
   403                 break;
   431             }
   404             }
   469     ret = XA_RESULT_SUCCESS;
   442     ret = XA_RESULT_SUCCESS;
   470     if (mapEntry)
   443     if (mapEntry)
   471         {
   444         {
   472         switch (mapEntry->mapIdx)
   445         switch (mapEntry->mapIdx)
   473             {
   446             {
   474             case MDE_CONFIGEXTENSIONITF:
       
   475                 XAConfigExtensionsItfImpl_Free(mapEntry->pItf);
       
   476                 break;
       
   477             default:
   447             default:
   478                 DEBUG_ERR("XAMetadataExtractorImpl_DoRemoveItf unknown id");
   448                 DEBUG_ERR("XAMetadataExtractorImpl_DoRemoveItf unknown id");
   479                 ret = XA_RESULT_FEATURE_UNSUPPORTED;
   449                 ret = XA_RESULT_FEATURE_UNSUPPORTED;
   480                 break;
   450                 break;
   481             }
   451             }