khronosfws/openmax_al/src/mediaplayer/xamediaplayer.c
changeset 31 8dfd592727cb
parent 16 43d09473c595
child 42 1fa3fb47b1e3
equal deleted inserted replaced
22:128eb6a32b84 31:8dfd592727cb
     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: Media Player Object Implementation
    15 *
    15  *
    16 */
    16  */
    17 
    17 
    18 #include <stdio.h>
    18 #include <stdio.h>
    19 #include <stdlib.h>
    19 #include <stdlib.h>
    20 #include <string.h>
    20 #include <string.h>
    21 #include <assert.h>
    21 #include <assert.h>
    43 
    43 
    44 extern void* vfHandle;
    44 extern void* vfHandle;
    45 
    45 
    46 /* Static mapping of enumeration XAMediaPlayerInterfaces to interface iids */
    46 /* Static mapping of enumeration XAMediaPlayerInterfaces to interface iids */
    47 static const XAInterfaceID* xaMediaPlayerItfIIDs[MP_ITFCOUNT] =
    47 static const XAInterfaceID* xaMediaPlayerItfIIDs[MP_ITFCOUNT] =
    48 {
    48     {
    49     &XA_IID_OBJECT,
    49             &XA_IID_OBJECT,
    50     &XA_IID_DYNAMICINTERFACEMANAGEMENT,
    50             &XA_IID_DYNAMICINTERFACEMANAGEMENT,
    51     &XA_IID_PLAY,
    51             &XA_IID_PLAY,
    52     &XA_IID_SEEK,
    52             &XA_IID_SEEK,
    53     &XA_IID_VOLUME,
    53             &XA_IID_VOLUME,
    54     &XA_IID_PREFETCHSTATUS,
    54             &XA_IID_PREFETCHSTATUS,
    55     &XA_IID_CONFIGEXTENSION,
    55             &XA_IID_CONFIGEXTENSION,
    56     &XA_IID_DYNAMICSOURCE,
    56             &XA_IID_DYNAMICSOURCE,
    57     &XA_IID_EQUALIZER,
    57             &XA_IID_EQUALIZER,
    58     &XA_IID_IMAGECONTROLS,
    58             &XA_IID_IMAGECONTROLS,
    59     &XA_IID_IMAGEEFFECTS,
    59             &XA_IID_IMAGEEFFECTS,
    60     &XA_IID_METADATAEXTRACTION,
    60             &XA_IID_METADATAEXTRACTION,
    61     &XA_IID_METADATATRAVERSAL,
    61             &XA_IID_METADATATRAVERSAL,
    62     &XA_IID_PLAYBACKRATE,
    62             &XA_IID_PLAYBACKRATE,
    63     &XA_IID_VIDEOPOSTPROCESSING,
    63             &XA_IID_VIDEOPOSTPROCESSING,
    64     &XA_IID_NOKIAVOLUMEEXT,
    64             &XA_IID_NOKIAVOLUMEEXT,
    65     &XA_IID_NOKIALINEARVOLUME,
    65             &XA_IID_NOKIALINEARVOLUME,
    66     &XA_IID_STREAMINFORMATION
    66             &XA_IID_STREAMINFORMATION
    67 };
    67     };
    68 
    68 
    69 /* Global methods */
    69 /* Global methods */
    70 
    70 
    71 /* XAResult XAMediaPlayerImpl_CreateMediaPlayer
    71 /* XAResult XAMediaPlayerImpl_CreateMediaPlayer
    72  * Create object
    72  * Create object
    73  */
    73  */
    74 XAresult XAMediaPlayerImpl_CreateMediaPlayer(FrameworkMap* mapper,
    74 XAresult XAMediaPlayerImpl_CreateMediaPlayer(FrameworkMap* mapper,
    75                                             XACapabilities* capabilities,   
    75         XACapabilities* capabilities, XAObjectItf *pPlayer,
    76                                              XAObjectItf *pPlayer,
    76         XADataSource *pDataSrc, XADataSource *pBankSrc,
    77                                              XADataSource *pDataSrc,
    77         XADataSink *pAudioSnk, XADataSink *pImageVideoSnk,
    78                                              XADataSource *pBankSrc,
    78         XADataSink *pVibra, XADataSink *pLEDArray, XAuint32 numInterfaces,
    79                                              XADataSink *pAudioSnk,
    79         const XAInterfaceID *pInterfaceIds,
    80                                              XADataSink *pImageVideoSnk,
    80         const XAboolean *pInterfaceRequired)
    81                                              XADataSink *pVibra,
    81     {
    82                                              XADataSink *pLEDArray,
       
    83                                              XAuint32 numInterfaces,
       
    84                                              const XAInterfaceID *pInterfaceIds,
       
    85                                              const XAboolean *pInterfaceRequired)
       
    86 {
       
    87     XAuint8 itfIdx = 0;
    82     XAuint8 itfIdx = 0;
    88     XAMediaType mediaType = XA_MEDIATYPE_UNKNOWN;
    83     XAMediaType mediaType = XA_MEDIATYPE_UNKNOWN;
    89     XAMediaPlayerImpl* pPlayerImpl = NULL;
    84     XAMediaPlayerImpl* pPlayerImpl = NULL;
    90     FWMgrFwType fwType;
    85     FWMgrFwType fwType;
    91     XAObjectItfImpl* pBaseObj = NULL;
    86     XAObjectItfImpl* pBaseObj = NULL;
    92     const char *uri = NULL;
    87     const char *uri = NULL;
    93     XAresult ret = XA_RESULT_SUCCESS;
    88     XAresult ret = XA_RESULT_SUCCESS;
    94     
    89     XADataLocator_IODevice* tmpIODevice;
       
    90     XADataLocator_IODevice locatorIODevice;
       
    91 
    95     DEBUG_API("->XAMediaPlayerImpl_CreateMediaPlayer");
    92     DEBUG_API("->XAMediaPlayerImpl_CreateMediaPlayer");
    96 
    93 
    97     XA_IMPL_THREAD_SAFETY_ENTRY(XATSMediaPlayer);
    94     XA_IMPL_THREAD_SAFETY_ENTRY(XATSMediaPlayer);
    98 
    95 
    99     if(!pPlayer || !pDataSrc)
    96     if (!pPlayer || !pDataSrc)
   100     {
    97         {
   101         XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
    98         XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
   102         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
    99         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   103         DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer");
   100         DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer");
   104         return XA_RESULT_PARAMETER_INVALID;
   101         return XA_RESULT_PARAMETER_INVALID;
   105     }
   102         }
   106     /* check sink&source parameters */
   103     /* check sink&source parameters */
   107     ret = XACommon_ValidateDataLocator(6, pAudioSnk, pImageVideoSnk, pDataSrc,
   104     ret = XACommon_ValidateDataLocator(6, pAudioSnk, pImageVideoSnk,
   108                                           pBankSrc, pVibra, pLEDArray);
   105             pDataSrc, pBankSrc, pVibra, pLEDArray);
   109     if(ret!=XA_RESULT_SUCCESS)
   106     if (ret != XA_RESULT_SUCCESS)
   110     {
   107         {
   111         XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
   108         XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
   112         DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer");
   109         DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer");
   113         return ret;
   110         return ret;
   114     }
   111         }
   115     /* also, check source availability */
   112     /* also, check source availability */
   116     ret = XACommon_CheckDataSource(pDataSrc,&mediaType);
   113     ret = XACommon_CheckDataSource(pDataSrc, &mediaType);
   117     if(ret!=XA_RESULT_SUCCESS)
   114     if (ret != XA_RESULT_SUCCESS)
   118     {
   115         {
   119         XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
   116         XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
   120         DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer");
   117         DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer");
   121         return ret;
   118         return ret;
   122     }
   119         }
   123 
   120 
   124     /* instantiate object */
   121     /* instantiate object */
   125     pPlayerImpl = (XAMediaPlayerImpl*)calloc(1,sizeof(XAMediaPlayerImpl));
   122     pPlayerImpl = (XAMediaPlayerImpl*) calloc(1, sizeof(XAMediaPlayerImpl));
   126     if(!pPlayerImpl)
   123     if (!pPlayerImpl)
   127     {
   124         {
   128         /* memory allocation failed */
   125         /* memory allocation failed */
   129         XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
   126         XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
   130         DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer");
   127         DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer");
   131         return XA_RESULT_MEMORY_FAILURE;
   128         return XA_RESULT_MEMORY_FAILURE;
   132     }
   129         }
   133     pBaseObj = &pPlayerImpl->baseObj;
   130     pBaseObj = &pPlayerImpl->baseObj;
   134 
   131 
   135     /* Initialize base object default implementation */
   132     /* Initialize base object default implementation */
   136     XAObjectItfImpl_Init(pBaseObj, MP_ITFCOUNT, xaMediaPlayerItfIIDs,
   133     XAObjectItfImpl_Init(pBaseObj, MP_ITFCOUNT, xaMediaPlayerItfIIDs,
   137                          XAMediaPlayerImpl_DoRealize, XAMediaPlayerImpl_DoResume,
   134             XAMediaPlayerImpl_DoRealize, XAMediaPlayerImpl_DoResume,
   138                          XAMediaPlayerImpl_FreeResources);
   135             XAMediaPlayerImpl_FreeResources);
   139 
   136 
   140     /* Mark interfaces that need to be exposed */
   137     /* Mark interfaces that need to be exposed */
   141     /* Implicit and mandated interfaces */
   138     /* Implicit and mandated interfaces */
   142     pBaseObj->interfaceMap[MP_PLAYITF].required = XA_BOOLEAN_TRUE;
   139     pBaseObj->interfaceMap[MP_PLAYITF].required = XA_BOOLEAN_TRUE;
   143     pBaseObj->interfaceMap[MP_DIMITF].required = XA_BOOLEAN_TRUE;
   140     pBaseObj->interfaceMap[MP_DIMITF].required = XA_BOOLEAN_TRUE;
   144 
   141 
   145     /* Explicit interfaces */
   142     /* Explicit interfaces */
   146     if((numInterfaces != 0) && pInterfaceIds && pInterfaceRequired)
   143     if ((numInterfaces != 0) && pInterfaceIds && pInterfaceRequired)
   147     {
   144         {
   148         /* Check required interfaces */
   145         /* Check required interfaces */
   149         for(itfIdx = 0; itfIdx < numInterfaces; itfIdx++)
   146         for (itfIdx = 0; itfIdx < numInterfaces; itfIdx++)
   150         {
   147             {
   151             /* If mapEntry is null then required interface is not supported.*/
   148             /* If mapEntry is null then required interface is not supported.*/
   152             XAObjItfMapEntry *entry =
   149             XAObjItfMapEntry *entry = XAObjectItfImpl_GetItfEntry(
   153                 XAObjectItfImpl_GetItfEntry((XAObjectItf)&(pBaseObj), pInterfaceIds[itfIdx]);
   150                     (XAObjectItf) &(pBaseObj), pInterfaceIds[itfIdx]);
   154             if( !entry  )
   151             if (!entry)
   155             {
       
   156                 if( pInterfaceRequired[itfIdx] )
       
   157                 {
   152                 {
       
   153                 if (pInterfaceRequired[itfIdx])
       
   154                     {
   158                     /* required interface cannot be accommodated - fail creation */
   155                     /* required interface cannot be accommodated - fail creation */
   159                     DEBUG_ERR("Required interface not found - abort creation!");
   156                     DEBUG_ERR("Required interface not found - abort creation!");
   160                     ret = XA_RESULT_FEATURE_UNSUPPORTED;
   157                     ret = XA_RESULT_FEATURE_UNSUPPORTED;
   161                     break;
   158                     break;
       
   159                     }
       
   160                 else
       
   161                     {
       
   162                     DEBUG_INFO("Requested (not required) interface not found - continue creation");
       
   163                     }
   162                 }
   164                 }
   163                 else
       
   164                 {
       
   165                     DEBUG_INFO("Requested (not required) interface not found - continue creation");
       
   166                 }
       
   167             }
       
   168             else
   165             else
   169             {   /* weed out unsupported content-aware itf's */
   166                 { /* weed out unsupported content-aware itf's */
   170                 if( (mediaType==XA_MEDIATYPE_IMAGE &&
   167                 if ((mediaType == XA_MEDIATYPE_IMAGE && (entry->mapIdx
   171                              (entry->mapIdx==MP_SEEKITF ||
   168                         == MP_SEEKITF || entry->mapIdx == MP_EQUALIZERITF
   172                               entry->mapIdx==MP_EQUALIZERITF ||
   169                         || entry->mapIdx == MP_VOLUMEITF)) || (mediaType
   173                               entry->mapIdx==MP_VOLUMEITF))
   170                         == XA_MEDIATYPE_AUDIO && (entry->mapIdx
   174                         ||
   171                         == MP_IMAGECONTROLSITF || entry->mapIdx
   175                     (mediaType==XA_MEDIATYPE_AUDIO &&
   172                         == MP_IMAGEEFFECTSITF || entry->mapIdx
   176                              (entry->mapIdx==MP_IMAGECONTROLSITF ||
   173                         == MP_VIDEOPOSTPROCESSINGITF)))
   177                               entry->mapIdx==MP_IMAGEEFFECTSITF ||
   174                     {
   178                               entry->mapIdx==MP_VIDEOPOSTPROCESSINGITF)) )
       
   179                 {
       
   180                     entry->required = XA_BOOLEAN_FALSE;
   175                     entry->required = XA_BOOLEAN_FALSE;
   181                     if( pInterfaceRequired[itfIdx] )
   176                     if (pInterfaceRequired[itfIdx])
   182                     {
   177                         {
   183                         DEBUG_ERR("Required interface not supported for given media - abort creation!");
   178                         DEBUG_ERR("Required interface not supported for given media - abort creation!");
   184                         ret = XA_RESULT_FEATURE_UNSUPPORTED;
   179                         ret = XA_RESULT_FEATURE_UNSUPPORTED;
   185                         break;
   180                         break;
       
   181                         }
       
   182                     }
       
   183                 else
       
   184                     {
       
   185                     entry->required = XA_BOOLEAN_TRUE;
   186                     }
   186                     }
   187                 }
   187                 }
   188                 else
   188             }
   189                 {
   189         }
   190                     entry->required = XA_BOOLEAN_TRUE;
   190 
   191                 }
   191     if (ret != XA_RESULT_SUCCESS)
   192             }
   192         { /* creation fails */
   193         }
   193         XAObjectItfImpl_Destroy((XAObjectItf) &(pBaseObj));
   194     }
       
   195 
       
   196     if(ret!=XA_RESULT_SUCCESS)
       
   197     {   /* creation fails */
       
   198         XAObjectItfImpl_Destroy((XAObjectItf)&(pBaseObj));
       
   199         return ret;
   194         return ret;
   200     }
   195         }
   201 
   196 
   202     /* Mark interfaces that can be handled dynamically */
   197     /* Mark interfaces that can be handled dynamically */
   203     /* Mandated dynamic itfs */
   198     /* Mandated dynamic itfs */
   204     pBaseObj->interfaceMap[MP_EQUALIZERITF].isDynamic = XA_BOOLEAN_TRUE;
   199     pBaseObj->interfaceMap[MP_EQUALIZERITF].isDynamic = XA_BOOLEAN_TRUE;
   205     pBaseObj->interfaceMap[MP_IMAGEEFFECTSITF].isDynamic = XA_BOOLEAN_TRUE;
   200     pBaseObj->interfaceMap[MP_IMAGEEFFECTSITF].isDynamic = XA_BOOLEAN_TRUE;
   206     pBaseObj->interfaceMap[MP_METADATAEXTRACTIONITF].isDynamic = XA_BOOLEAN_TRUE;
   201     pBaseObj->interfaceMap[MP_METADATAEXTRACTIONITF].isDynamic
   207     pBaseObj->interfaceMap[MP_METADATATRAVERSALITF].isDynamic = XA_BOOLEAN_TRUE;
   202             = XA_BOOLEAN_TRUE;
       
   203     pBaseObj->interfaceMap[MP_METADATATRAVERSALITF].isDynamic
       
   204             = XA_BOOLEAN_TRUE;
   208     pBaseObj->interfaceMap[MP_PLAYBACKRATEITF].isDynamic = XA_BOOLEAN_TRUE;
   205     pBaseObj->interfaceMap[MP_PLAYBACKRATEITF].isDynamic = XA_BOOLEAN_TRUE;
   209 
   206 
   210     
   207     /*Set ObjectItf to point to newly created object*/
   211     /*Set ObjectItf to point to newly created object*/ 
   208     *pPlayer = (XAObjectItf) &(pBaseObj->self);
   212     *pPlayer = (XAObjectItf)&(pBaseObj->self);
       
   213 
   209 
   214     /*initialize XAPlayerImpl variables */
   210     /*initialize XAPlayerImpl variables */
   215 
   211 
   216     pPlayerImpl->dataSrc = pDataSrc;
   212     pPlayerImpl->dataSrc = pDataSrc;
   217     pPlayerImpl->bankSrc = pBankSrc;
   213     pPlayerImpl->bankSrc = pBankSrc;
   218     pPlayerImpl->audioSnk = pAudioSnk;
   214     pPlayerImpl->audioSnk = pAudioSnk;
   219     pPlayerImpl->imageVideoSnk = pImageVideoSnk;
   215     pPlayerImpl->imageVideoSnk = pImageVideoSnk;
   220     pPlayerImpl->vibra = pVibra;
   216     pPlayerImpl->vibra = pVibra;
   221     pPlayerImpl->LEDArray = pLEDArray;
   217     pPlayerImpl->LEDArray = pLEDArray;
   222 
   218 
   223     /* Determine framework type that can handle recording */
   219     // Handle possible radio:      
   224     fwType = (FWMgrFwType)FWMgrMOUnknown;
   220     tmpIODevice = (XADataLocator_IODevice*) (pPlayerImpl->dataSrc->pLocator);
   225     /**/
   221     locatorIODevice = *tmpIODevice;
   226     if (pDataSrc->pLocator)
   222     if (locatorIODevice.deviceType == XA_IODEVICE_RADIO)
   227     {
   223         {
   228         XADataLocator_URI* dataLoc = (XADataLocator_URI*)pDataSrc->pLocator;
   224         fwType = (FWMgrFwType) FWMgrFWMMF;
   229         if (dataLoc->locatorType == XA_DATALOCATOR_URI)
   225         }
   230             {
       
   231             uri = (char*)dataLoc->URI;
       
   232             }
       
   233     }
       
   234     fwType = XAFrameworkMgr_GetFramework(
       
   235                         mapper,
       
   236                         uri,
       
   237                         FWMgrMOPlayer);
       
   238 
       
   239     if (fwType == FWMgrMOUnknown)
       
   240         {
       
   241         ret = XA_RESULT_CONTENT_UNSUPPORTED;
       
   242         XAObjectItfImpl_Destroy((XAObjectItf)&(pBaseObj));
       
   243         XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
       
   244         DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer");
       
   245         return ret;
       
   246         }
       
   247     
       
   248     if(fwType == FWMgrFWMMF)
       
   249     {    
       
   250         pPlayerImpl->adaptationCtxMMF = XAMediaPlayerAdaptMMF_Create(pPlayerImpl->dataSrc,
       
   251                                                                pPlayerImpl->bankSrc,
       
   252                                                                pPlayerImpl->audioSnk,
       
   253                                                                pPlayerImpl->imageVideoSnk,
       
   254                                                                pPlayerImpl->vibra,
       
   255                                                                pPlayerImpl->LEDArray);
       
   256         
       
   257         pPlayerImpl->curAdaptCtx = pPlayerImpl->adaptationCtxMMF;    
       
   258     }
       
   259     else
   226     else
   260     {
   227         {
   261        pPlayerImpl->adaptationCtxGst = XAMediaPlayerAdapt_Create(pPlayerImpl->dataSrc,
   228         /* Determine framework type that can handle recording */
   262                                                            pPlayerImpl->bankSrc,
   229         fwType = (FWMgrFwType) FWMgrMOUnknown;
   263                                                            pPlayerImpl->audioSnk,
   230         /**/
   264                                                            pPlayerImpl->imageVideoSnk,
   231         if (pDataSrc->pLocator)
   265                                                            pPlayerImpl->vibra,
   232             {
   266                                                            pPlayerImpl->LEDArray);
   233             XADataLocator_URI* dataLoc =
   267        
   234                     (XADataLocator_URI*) pDataSrc->pLocator;
   268        pPlayerImpl->curAdaptCtx = pPlayerImpl->adaptationCtxGst;
   235             if (dataLoc->locatorType == XA_DATALOCATOR_URI)
   269     }
   236                 {
   270     
   237                 uri = (char*) dataLoc->URI;
       
   238                 }
       
   239             }
       
   240         fwType = XAFrameworkMgr_GetFramework(mapper, uri, FWMgrMOPlayer);
       
   241 
       
   242         if (fwType == FWMgrMOUnknown)
       
   243             {
       
   244             ret = XA_RESULT_CONTENT_UNSUPPORTED;
       
   245             XAObjectItfImpl_Destroy((XAObjectItf) &(pBaseObj));
       
   246             XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
       
   247             DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer");
       
   248             return ret;
       
   249             }
       
   250         } // end else
       
   251 
       
   252     if (fwType == FWMgrFWMMF)
       
   253         {
       
   254         pPlayerImpl->adaptationCtxMMF = XAMediaPlayerAdaptMMF_Create(
       
   255                 pPlayerImpl->dataSrc, pPlayerImpl->bankSrc,
       
   256                 pPlayerImpl->audioSnk, pPlayerImpl->imageVideoSnk,
       
   257                 pPlayerImpl->vibra, pPlayerImpl->LEDArray);
       
   258 
       
   259         pPlayerImpl->curAdaptCtx = pPlayerImpl->adaptationCtxMMF;
       
   260         }
       
   261     else
       
   262         {
       
   263         pPlayerImpl->adaptationCtxGst = XAMediaPlayerAdapt_Create(
       
   264                 pPlayerImpl->dataSrc, pPlayerImpl->bankSrc,
       
   265                 pPlayerImpl->audioSnk, pPlayerImpl->imageVideoSnk,
       
   266                 pPlayerImpl->vibra, pPlayerImpl->LEDArray);
       
   267 
       
   268         pPlayerImpl->curAdaptCtx = pPlayerImpl->adaptationCtxGst;
       
   269         }
       
   270 
   271     pPlayerImpl->curAdaptCtx->capslist = capabilities;
   271     pPlayerImpl->curAdaptCtx->capslist = capabilities;
   272     pPlayerImpl->curAdaptCtx->fwtype = fwType;
   272     pPlayerImpl->curAdaptCtx->fwtype = fwType;
   273     
   273 
   274     XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   274     XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   275     DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer");
   275     DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer");
   276     return XA_RESULT_SUCCESS;
   276     return XA_RESULT_SUCCESS;
   277 }
   277     }
   278 
   278 
   279 /* XAResult XAMediaPlayerImpl_QueryNumSupportedInterfaces
   279 /* XAResult XAMediaPlayerImpl_QueryNumSupportedInterfaces
   280  * Statically query supported interfaces
   280  * Statically query supported interfaces
   281  */
   281  */
   282 XAresult XAMediaPlayerImpl_QueryNumSupportedInterfaces(XAuint32 * pNumSupportedInterfaces)
   282 XAresult XAMediaPlayerImpl_QueryNumSupportedInterfaces(
   283 {
   283         XAuint32 * pNumSupportedInterfaces)
       
   284     {
   284     DEBUG_API("->XAMediaPlayerImpl_QueryNumSupportedInterfaces");
   285     DEBUG_API("->XAMediaPlayerImpl_QueryNumSupportedInterfaces");
   285 
   286 
   286     if(pNumSupportedInterfaces)
   287     if (pNumSupportedInterfaces)
   287     {
   288         {
   288         *pNumSupportedInterfaces = MP_ITFCOUNT;
   289         *pNumSupportedInterfaces = MP_ITFCOUNT;
   289         DEBUG_API("<-XAMediaPlayerImpl_QueryNumSupportedInterfaces");
   290         DEBUG_API("<-XAMediaPlayerImpl_QueryNumSupportedInterfaces");
   290         return XA_RESULT_SUCCESS;
   291         return XA_RESULT_SUCCESS;
   291     }
   292         }
   292     else
   293     else
   293     {
   294         {
   294         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   295         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   295         DEBUG_API("<-XAMediaPlayerImpl_QueryNumSupportedInterfaces");
   296         DEBUG_API("<-XAMediaPlayerImpl_QueryNumSupportedInterfaces");
   296         return XA_RESULT_PARAMETER_INVALID;
   297         return XA_RESULT_PARAMETER_INVALID;
   297     }
   298         }
   298 }
   299     }
   299 
   300 
   300 /* XAResult XAMediaPlayerImpl_QuerySupportedInterfaces
   301 /* XAResult XAMediaPlayerImpl_QuerySupportedInterfaces
   301  * Statically query supported interfaces
   302  * Statically query supported interfaces
   302  */
   303  */
   303 XAresult XAMediaPlayerImpl_QuerySupportedInterfaces(XAuint32 index,
   304 XAresult XAMediaPlayerImpl_QuerySupportedInterfaces(XAuint32 index,
   304                                                     XAInterfaceID * pInterfaceId)
   305         XAInterfaceID * pInterfaceId)
   305 {
   306     {
   306     DEBUG_API("->XAMediaPlayerImpl_QuerySupportedInterfaces");
   307     DEBUG_API("->XAMediaPlayerImpl_QuerySupportedInterfaces");
   307 
   308 
   308     if (index >= MP_ITFCOUNT || !pInterfaceId )
   309     if (index >= MP_ITFCOUNT || !pInterfaceId)
   309     {
   310         {
   310         if(pInterfaceId)
   311         if (pInterfaceId)
   311         {
   312             {
   312             *pInterfaceId = XA_IID_NULL;
   313             *pInterfaceId = XA_IID_NULL;
   313         }
   314             }DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   314         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   315             DEBUG_API("<-XAMediaPlayerImpl_QuerySupportedInterfaces");
   315         DEBUG_API("<-XAMediaPlayerImpl_QuerySupportedInterfaces");
       
   316         return XA_RESULT_PARAMETER_INVALID;
   316         return XA_RESULT_PARAMETER_INVALID;
   317     }
   317         }
   318     else
   318     else
   319     {
   319         {
   320         *pInterfaceId = *(xaMediaPlayerItfIIDs[index]);
   320         *pInterfaceId = *(xaMediaPlayerItfIIDs[index]);
   321         DEBUG_API("<-XAMediaPlayerImpl_QuerySupportedInterfaces");
   321         DEBUG_API("<-XAMediaPlayerImpl_QuerySupportedInterfaces");
   322         return XA_RESULT_SUCCESS;
   322         return XA_RESULT_SUCCESS;
   323     }
   323         }
   324 }
   324     }
   325 
   325 
   326 /*
   326 /*
   327  * Realize the object
   327  * Realize the object
   328  */
   328  */
   329 XAresult XAMediaPlayerImpl_DoRealize(XAObjectItf self)
   329 XAresult XAMediaPlayerImpl_DoRealize(XAObjectItf self)
   330 {
   330     {
   331     XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self);
   331     XAObjectItfImpl* pObj = (XAObjectItfImpl*) (*self);
   332     XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*)(pObj);
   332     XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*) (pObj);
   333     XAuint8 itfIdx = 0;
   333     XAuint8 itfIdx = 0;
   334     void *pItf = NULL;
   334     void *pItf = NULL;
   335     XAresult ret = XA_RESULT_SUCCESS;
   335     XAresult ret = XA_RESULT_SUCCESS;
   336 
   336 
   337     DEBUG_API("->XAMediaPlayerImpl_DoRealize");
   337     DEBUG_API("->XAMediaPlayerImpl_DoRealize");
   338     XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
   338     XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
   339 
   339 
   340     /* check casting from correct pointer type */
   340     /* check casting from correct pointer type */
   341     if(!pImpl || pObj != pImpl->baseObj.self)
   341     if (!pImpl || pObj != pImpl->baseObj.self)
   342     {
   342         {
   343         /* invalid parameter */
   343         /* invalid parameter */
   344         XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   344         XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   345         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   345         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   346         DEBUG_API("<-XAMediaPlayerImpl_DoRealize");
   346         DEBUG_API("<-XAMediaPlayerImpl_DoRealize");
   347         return XA_RESULT_PARAMETER_INVALID;
   347         return XA_RESULT_PARAMETER_INVALID;
   348     }
   348         }
   349 
   349 
   350     /* Realize all implicit and explicitly wanted interfaces */
   350     /* Realize all implicit and explicitly wanted interfaces */
   351     for(itfIdx = 0; itfIdx < MP_ITFCOUNT; itfIdx++)
   351     for (itfIdx = 0; itfIdx < MP_ITFCOUNT; itfIdx++)
   352     {
   352         {
   353         if(!(pObj->interfaceMap[itfIdx].pItf) && pObj->interfaceMap[itfIdx].required)
   353         if (!(pObj->interfaceMap[itfIdx].pItf)
   354         {
   354                 && pObj->interfaceMap[itfIdx].required)
   355             switch(itfIdx)
   355             {
   356             {
   356             switch (itfIdx)
       
   357                 {
   357                 case MP_DIMITF:
   358                 case MP_DIMITF:
   358                     pItf = XADIMItfImpl_Create();
   359                     pItf = XADIMItfImpl_Create();
   359                     if(pItf)
   360                     if (pItf)
   360                     {
   361                         {
   361                         XADIMItfImpl_Init(pItf, self,
   362                         XADIMItfImpl_Init(pItf, self,
   362                                           XAMediaPlayerImpl_DoAddItf,
   363                                 XAMediaPlayerImpl_DoAddItf,
   363                                           XAMediaPlayerImpl_DoResumeItf,
   364                                 XAMediaPlayerImpl_DoResumeItf,
   364                                           XAMediaPlayerImpl_DoRemoveItf);
   365                                 XAMediaPlayerImpl_DoRemoveItf);
   365                     }
   366                         }
   366                     break;
   367                     break;
   367                 case MP_PLAYITF:
   368                 case MP_PLAYITF:
   368                     pItf = XAPlayItfImpl_Create(pImpl);
   369                     pItf = XAPlayItfImpl_Create(pImpl);
   369                     if ( pImpl->dataSrc )
   370                     if (pImpl->dataSrc)
   370                     {
   371                         {
   371                 		XAuint32 locType = *((XAuint32*)(pImpl->dataSrc->pLocator));
   372                         XAuint32 locType =
   372                 		if ( locType == XA_DATALOCATOR_IODEVICE )
   373                                 *((XAuint32*) (pImpl->dataSrc->pLocator));
   373                 		    {
   374                         if (locType == XA_DATALOCATOR_IODEVICE)
   374                 			XADataLocator_IODevice *ioDevice = (XADataLocator_IODevice*)(pImpl->dataSrc->pLocator);
   375                             {
   375                 			if ( ioDevice->deviceType == XA_IODEVICE_CAMERA)
   376                             XADataLocator_IODevice
   376                 			    {
   377                                     *ioDevice =
   377                 				vfHandle = (void*) pItf;
   378                                             (XADataLocator_IODevice*) (pImpl->dataSrc->pLocator);
   378                 				DEBUG_INFO_A1("Stored view finder pointer to global address %x", vfHandle);
   379                             if (ioDevice->deviceType == XA_IODEVICE_CAMERA)
   379                 			    }
   380                                 {
   380                 		    }
   381                                 vfHandle = (void*) pItf;
   381                 		else
   382                                 DEBUG_INFO_A1("Stored view finder pointer to global address %x", vfHandle);
   382                 		    {
   383                                 }
   383                 		
   384                             }
   384                 		    }
   385                         else
   385                     }
   386                             {
       
   387 
       
   388                             }
       
   389                         }
   386                     break;
   390                     break;
   387                 case MP_VOLUMEITF:
   391                 case MP_VOLUMEITF:
   388                     pItf = XAVolumeItfImpl_Create(pImpl->curAdaptCtx);
   392                     pItf = XAVolumeItfImpl_Create(pImpl->curAdaptCtx);
   389                     break;
   393                     break;
   390                 case MP_SEEKITF:
   394                 case MP_SEEKITF:
   391                     pItf = XASeekItfImpl_Create(pImpl);
   395                     pItf = XASeekItfImpl_Create(pImpl);
   392                     break;
   396                     break;
   393                 case MP_PREFETCHSTATUSITF:
   397                 case MP_PREFETCHSTATUSITF:
   394                     pItf = XAPrefetchStatusItfImpl_Create( pImpl );
   398                     pItf = XAPrefetchStatusItfImpl_Create(pImpl);
   395                     break;
   399                     break;
   396                 case MP_METADATAEXTRACTIONITF:
   400                 case MP_METADATAEXTRACTIONITF:
   397                     pItf = XAMetadataExtractionItfImpl_Create( pImpl->curAdaptCtx );
   401                     pItf = XAMetadataExtractionItfImpl_Create(
       
   402                             pImpl->curAdaptCtx);
   398                     break;
   403                     break;
   399                 case MP_METADATATRAVERSALITF:
   404                 case MP_METADATATRAVERSALITF:
   400                     pItf = XAMetadataTraversalItfImpl_Create( pImpl->curAdaptCtx );
   405                     pItf = XAMetadataTraversalItfImpl_Create(
       
   406                             pImpl->curAdaptCtx);
   401                     break;
   407                     break;
   402                 case MP_PLAYBACKRATEITF:
   408                 case MP_PLAYBACKRATEITF:
   403                     pItf = XAPlaybackRateItfImpl_Create(pImpl);
   409                     pItf = XAPlaybackRateItfImpl_Create(pImpl);
   404                     break;
   410                     break;
   405                 case MP_CONFIGEXTENSIONITF:
   411                 case MP_CONFIGEXTENSIONITF:
   406                     pItf = XAConfigExtensionsItfImpl_Create();
   412                     pItf = XAConfigExtensionsItfImpl_Create();
   407                     XAConfigExtensionsItfImpl_SetContext( pItf, pImpl->curAdaptCtx);
   413                     XAConfigExtensionsItfImpl_SetContext(pItf,
       
   414                             pImpl->curAdaptCtx);
   408                     break;
   415                     break;
   409                 case MP_DYNAMICSOURCEITF:
   416                 case MP_DYNAMICSOURCEITF:
   410                     pItf = XADynamicSourceItfImpl_Create(pImpl->curAdaptCtx);
   417                     pItf = XADynamicSourceItfImpl_Create(pImpl->curAdaptCtx);
   411                     break;
   418                     break;
   412                 case MP_EQUALIZERITF:
   419                 case MP_EQUALIZERITF:
   413                     pItf = XAEqualizerItfImpl_Create(pImpl->curAdaptCtx);
   420                     pItf = XAEqualizerItfImpl_Create(pImpl->curAdaptCtx);
   414                     break;
   421                     break;
   415                 case MP_IMAGECONTROLSITF:
   422 #ifdef OMAX_CAMERABIN
       
   423                     case MP_IMAGECONTROLSITF:
   416                     pItf = XAImageControlsItfImpl_Create(pImpl->curAdaptCtx);
   424                     pItf = XAImageControlsItfImpl_Create(pImpl->curAdaptCtx);
   417                     break;
   425                     break;
   418                 case MP_IMAGEEFFECTSITF:
   426                     case MP_IMAGEEFFECTSITF:
   419                     pItf = XAImageEffectsItfImpl_Create(pImpl->curAdaptCtx);
   427                     pItf = XAImageEffectsItfImpl_Create(pImpl->curAdaptCtx);
   420                     break;
   428                     break;
   421                 case MP_VIDEOPOSTPROCESSINGITF:
   429                     case MP_VIDEOPOSTPROCESSINGITF:
   422                     pItf = XAVideoPostProcessingItfImpl_Create(pImpl->curAdaptCtx);
   430                     pItf = XAVideoPostProcessingItfImpl_Create(pImpl->curAdaptCtx);
   423                     break;
   431                     break;
   424                case MP_NOKIAVOLUMEEXT:
   432 #endif
       
   433                 case MP_NOKIAVOLUMEEXT:
   425                     pItf = XANokiaVolumeExtItfImpl_Create(pImpl->curAdaptCtx);
   434                     pItf = XANokiaVolumeExtItfImpl_Create(pImpl->curAdaptCtx);
   426                     break;
   435                     break;
   427                case MP_NOKIALINEARVOLUME:
   436                 case MP_NOKIALINEARVOLUME:
   428                     pItf = XANokiaLinearVolumeItfImpl_Create(pImpl->curAdaptCtx);
   437                     pItf = XANokiaLinearVolumeItfImpl_Create(
   429                     break;                                        
   438                             pImpl->curAdaptCtx);
       
   439                     break;
   430                 case MP_STREAMINFORMATIONITF:
   440                 case MP_STREAMINFORMATIONITF:
   431                     pItf = XAStreamInformationItfImpl_Create(pImpl->curAdaptCtx);
   441                     pItf = XAStreamInformationItfImpl_Create(
   432                     break;                    
   442                             pImpl->curAdaptCtx);
       
   443                     break;
   433                 default:
   444                 default:
   434                     break;
   445                     break;
   435             }
   446                 }
   436             if(!pItf)
   447             if (!pItf)
   437             {
   448                 {
   438                 /* Memory allocation failed */
   449                 /* Memory allocation failed */
   439                 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   450                 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   440                 DEBUG_ERR("XA_RESULT_MEMORY_FAILURE");
   451                 DEBUG_ERR("XA_RESULT_MEMORY_FAILURE");
   441                 DEBUG_API("<-XAMediaPlayerImpl_DoRealize");
   452                 DEBUG_API("<-XAMediaPlayerImpl_DoRealize");
   442                 return XA_RESULT_MEMORY_FAILURE;
   453                 return XA_RESULT_MEMORY_FAILURE;
   443             }
   454                 }
   444             else
   455             else
   445             {
   456                 {
   446                 pObj->interfaceMap[itfIdx].pItf = pItf;
   457                 pObj->interfaceMap[itfIdx].pItf = pItf;
   447             }
   458                 }
   448         }
   459             }
   449     }
   460         }
   450     /* init adaptation */
   461     /* init adaptation */
   451     if(pImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
   462     if (pImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
   452     {
   463         {
   453        ret = XAMediaPlayerAdaptMMF_PostInit( (XAAdaptationMMFCtx*)pImpl->adaptationCtxMMF );
   464         ret = XAMediaPlayerAdaptMMF_PostInit(
   454     }
   465                 (XAAdaptationMMFCtx*) pImpl->adaptationCtxMMF);
       
   466         }
   455     else
   467     else
   456     {
   468         {
   457        ret = XAMediaPlayerAdapt_PostInit( (XAAdaptationGstCtx*)pImpl->adaptationCtxGst );
   469         ret = XAMediaPlayerAdapt_PostInit(
   458     }
   470                 (XAAdaptationGstCtx*) pImpl->adaptationCtxGst);
   459     if ( ret != XA_RESULT_SUCCESS )
   471         }
   460     {
   472     if (ret != XA_RESULT_SUCCESS)
       
   473         {
   461         XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   474         XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   462         DEBUG_ERR("Adaptation init failed!");
   475         DEBUG_ERR("Adaptation init failed!");
   463         DEBUG_API("<-XAMediaPlayerImpl_DoRealize");
   476         DEBUG_API("<-XAMediaPlayerImpl_DoRealize");
   464         return ret;
   477         return ret;
   465     }
   478         }
   466 
   479 
   467     pObj->state = XA_OBJECT_STATE_REALIZED;
   480     pObj->state = XA_OBJECT_STATE_REALIZED;
   468 
   481 
   469     XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   482     XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   470     DEBUG_API("<-XAMediaPlayerImpl_DoRealize");
   483     DEBUG_API("<-XAMediaPlayerImpl_DoRealize");
   471     return XA_RESULT_SUCCESS;
   484     return XA_RESULT_SUCCESS;
   472 }
   485     }
   473 
   486 
   474 /*
   487 /*
   475  * Resume object
   488  * Resume object
   476  */
   489  */
   477 XAresult XAMediaPlayerImpl_DoResume(XAObjectItf self)
   490 XAresult XAMediaPlayerImpl_DoResume(XAObjectItf self)
   478 {
   491     {
   479     DEBUG_API("->XAMediaPlayerImpl_DoResume");
   492     DEBUG_API("->XAMediaPlayerImpl_DoResume");
   480     DEBUG_API("<-XAMediaPlayerImpl_DoResume");
   493     DEBUG_API("<-XAMediaPlayerImpl_DoResume");
   481     /* suspended state not supported by this implementation */
   494     /* suspended state not supported by this implementation */
   482     return XA_RESULT_PRECONDITIONS_VIOLATED;
   495     return XA_RESULT_PRECONDITIONS_VIOLATED;
   483 }
   496     }
   484 
   497 
   485 /**
   498 /**
   486  * void XAMediaPlayerImpl_FreeResources(XAObjectItf self)
   499  * void XAMediaPlayerImpl_FreeResources(XAObjectItf self)
   487  * Description: Free all resources reserved at XAMediaPlayerImpl_DoRealize()
   500  * Description: Free all resources reserved at XAMediaPlayerImpl_DoRealize()
   488  **/
   501  **/
   489 void XAMediaPlayerImpl_FreeResources(XAObjectItf self)
   502 void XAMediaPlayerImpl_FreeResources(XAObjectItf self)
   490 {
   503     {
   491     XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self);
   504     XAObjectItfImpl* pObj = (XAObjectItfImpl*) (*self);
   492     XAuint8 itfIdx = 0;
   505     XAuint8 itfIdx = 0;
   493     XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*)pObj;
   506     XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*) pObj;
   494     DEBUG_API("->XAMediaPlayerImpl_FreeResources");
   507     DEBUG_API("->XAMediaPlayerImpl_FreeResources");
   495     XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS( XATSMediaPlayer );
   508     XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS( XATSMediaPlayer );
   496 
   509 
   497     assert(pObj && pImpl && pObj == pObj->self);
   510     assert(pObj && pImpl && pObj == pObj->self);
   498     for(itfIdx = 0; itfIdx < MP_ITFCOUNT; itfIdx++)
   511     for (itfIdx = 0; itfIdx < MP_ITFCOUNT; itfIdx++)
   499     {
   512         {
   500         void *pItf = pObj->interfaceMap[itfIdx].pItf;
   513         void *pItf = pObj->interfaceMap[itfIdx].pItf;
   501         if(pItf)
   514         if (pItf)
   502         {
   515             {
   503             switch(itfIdx)
   516             switch (itfIdx)
   504             {
   517                 {
   505                 case MP_DIMITF:
   518                 case MP_DIMITF:
   506                     XADIMItfImpl_Free(pItf);
   519                     XADIMItfImpl_Free(pItf);
   507                     break;
   520                     break;
   508                 case MP_PLAYITF:
   521                 case MP_PLAYITF:
   509                     XAPlayItfImpl_Free(pItf);
   522                     XAPlayItfImpl_Free(pItf);
   533                     XADynamicSourceItfImpl_Free(pItf);
   546                     XADynamicSourceItfImpl_Free(pItf);
   534                     break;
   547                     break;
   535                 case MP_EQUALIZERITF:
   548                 case MP_EQUALIZERITF:
   536                     XAEqualizerItfImpl_Free(pItf);
   549                     XAEqualizerItfImpl_Free(pItf);
   537                     break;
   550                     break;
   538                 case MP_IMAGECONTROLSITF:
   551 #ifdef OMAX_CAMERABIN
       
   552                     case MP_IMAGECONTROLSITF:
   539                     XAImageControlsItfImpl_Free(pItf);
   553                     XAImageControlsItfImpl_Free(pItf);
   540                     break;
   554                     break;
   541                 case MP_IMAGEEFFECTSITF:
   555                     case MP_IMAGEEFFECTSITF:
   542                     XAImageEffectsItfImpl_Free(pItf);
   556                     XAImageEffectsItfImpl_Free(pItf);
   543                     break;
   557                     break;
   544                 case MP_VIDEOPOSTPROCESSINGITF:
   558                     case MP_VIDEOPOSTPROCESSINGITF:
   545                     XAVideoPostProcessingItfImpl_Free(pItf);
   559                     XAVideoPostProcessingItfImpl_Free(pItf);
   546                     break;
   560                     break;
       
   561 #endif
   547                 case MP_NOKIAVOLUMEEXT:
   562                 case MP_NOKIAVOLUMEEXT:
   548                     XANokiaVolumeExtItfImpl_Free(pItf);
   563                     XANokiaVolumeExtItfImpl_Free(pItf);
   549                     break;
   564                     break;
   550                 case MP_NOKIALINEARVOLUME:
   565                 case MP_NOKIALINEARVOLUME:
   551                     XANokiaLinearVolumeItfImpl_Free(pItf);
   566                     XANokiaLinearVolumeItfImpl_Free(pItf);
   552                     break;                                        
   567                     break;
   553                 case MP_STREAMINFORMATIONITF:
   568                 case MP_STREAMINFORMATIONITF:
   554                     XAStreamInformationItfImpl_Free(pItf);
   569                     XAStreamInformationItfImpl_Free(pItf);
   555                     break;
   570                     break;
   556                     
   571 
   557             }
   572                 }
   558             pObj->interfaceMap[itfIdx].pItf = NULL;
   573             pObj->interfaceMap[itfIdx].pItf = NULL;
   559         }
   574             }
   560     }
   575         }
   561     
   576 
   562     if(pImpl->curAdaptCtx)
   577     if (pImpl->curAdaptCtx)
   563         {
   578         {
   564         if(pImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
   579         if (pImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
   565             {
   580             {
   566             XAMediaPlayerAdaptMMF_Destroy( (XAAdaptationMMFCtx*)pImpl->adaptationCtxMMF );
   581             XAMediaPlayerAdaptMMF_Destroy(
       
   582                     (XAAdaptationMMFCtx*) pImpl->adaptationCtxMMF);
   567             }
   583             }
   568         else
   584         else
   569             {
   585             {
   570             XAMediaPlayerAdapt_Destroy( (XAAdaptationGstCtx*)pImpl->adaptationCtxGst );
   586             XAMediaPlayerAdapt_Destroy(
       
   587                     (XAAdaptationGstCtx*) pImpl->adaptationCtxGst);
   571             }
   588             }
   572         }
   589         }
   573 
   590 
   574     XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS( XATSMediaPlayer );
   591     XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS( XATSMediaPlayer );
   575     DEBUG_API("<-XAMediaPlayerImpl_FreeResources");
   592     DEBUG_API("<-XAMediaPlayerImpl_FreeResources");
   576     return;
   593     return;
   577 }
   594     }
   578 
   595 
   579 /* XAMediaPlayerImpl_DoAddItf
   596 /* XAMediaPlayerImpl_DoAddItf
   580  * Dynamically add an interface, object specific parts
   597  * Dynamically add an interface, object specific parts
   581  */
   598  */
   582 XAresult XAMediaPlayerImpl_DoAddItf(XAObjectItf self, XAObjItfMapEntry *mapEntry  )
   599 XAresult XAMediaPlayerImpl_DoAddItf(XAObjectItf self,
   583 {
   600         XAObjItfMapEntry *mapEntry)
   584   
   601     {
   585     XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self);
   602 
   586     XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*)(pObj);
   603     XAObjectItfImpl* pObj = (XAObjectItfImpl*) (*self);
       
   604     XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*) (pObj);
   587 
   605 
   588     XAresult ret = XA_RESULT_SUCCESS;
   606     XAresult ret = XA_RESULT_SUCCESS;
   589     DEBUG_API("->XAMediaPlayerImpl_DoAddItf");
   607     DEBUG_API("->XAMediaPlayerImpl_DoAddItf");
   590 
   608 
   591     if(mapEntry)
   609     if (mapEntry)
   592     {
   610         {
   593         switch( mapEntry->mapIdx )
   611         switch (mapEntry->mapIdx)
   594             {
   612             {
   595   
   613 
   596             case MP_METADATAEXTRACTIONITF:
   614             case MP_METADATAEXTRACTIONITF:
   597                 mapEntry->pItf = XAMetadataExtractionItfImpl_Create( pImpl->curAdaptCtx );
   615                 mapEntry->pItf = XAMetadataExtractionItfImpl_Create(
       
   616                         pImpl->curAdaptCtx);
   598                 break;
   617                 break;
   599             case MP_METADATATRAVERSALITF:
   618             case MP_METADATATRAVERSALITF:
   600                 mapEntry->pItf = XAMetadataTraversalItfImpl_Create( pImpl->curAdaptCtx );
   619                 mapEntry->pItf = XAMetadataTraversalItfImpl_Create(
       
   620                         pImpl->curAdaptCtx);
   601                 break;
   621                 break;
   602             case MP_PLAYBACKRATEITF:
   622             case MP_PLAYBACKRATEITF:
   603                 mapEntry->pItf = XAPlaybackRateItfImpl_Create(pImpl);
   623                 mapEntry->pItf = XAPlaybackRateItfImpl_Create(pImpl);
   604                 break;
   624                 break;
   605             case MP_EQUALIZERITF:
   625             case MP_EQUALIZERITF:
   606                 mapEntry->pItf = XAEqualizerItfImpl_Create( pImpl->curAdaptCtx );
   626                 mapEntry->pItf
   607                 break;
   627                         = XAEqualizerItfImpl_Create(pImpl->curAdaptCtx);
   608             case MP_IMAGEEFFECTSITF:
   628                 break;
       
   629 #ifdef OMAX_CAMERABIN
       
   630                 case MP_IMAGEEFFECTSITF:
   609                 mapEntry->pItf = XAImageEffectsItfImpl_Create( pImpl->curAdaptCtx );
   631                 mapEntry->pItf = XAImageEffectsItfImpl_Create( pImpl->curAdaptCtx );
   610                 break;
   632                 break;
   611 
   633 #endif
   612             default:
   634             default:
   613                 DEBUG_ERR("XAMediaPlayerImpl_DoAddItf unknown id");
   635                 DEBUG_ERR("XAMediaPlayerImpl_DoAddItf unknown id")
       
   636                 ;
   614                 ret = XA_RESULT_FEATURE_UNSUPPORTED;
   637                 ret = XA_RESULT_FEATURE_UNSUPPORTED;
   615                 break;
   638                 break;
   616             }
   639             }
   617         
   640 
   618         if( !mapEntry->pItf && ret == XA_RESULT_SUCCESS)
   641         if (!mapEntry->pItf && ret == XA_RESULT_SUCCESS)
   619             {
   642             {
   620             DEBUG_ERR("XAMediaPlayerImpl_DoAddItf itf creation failed");
   643             DEBUG_ERR("XAMediaPlayerImpl_DoAddItf itf creation failed");
   621             ret = XA_RESULT_MEMORY_FAILURE;
   644             ret = XA_RESULT_MEMORY_FAILURE;
   622             }
   645             }
   623     }
   646         }
   624     else
   647     else
   625     {
   648         {
   626         ret = XA_RESULT_PARAMETER_INVALID;
   649         ret = XA_RESULT_PARAMETER_INVALID;
   627     }
   650         }
   628 
   651 
   629     DEBUG_API("<-XAMediaPlayerImpl_DoAddItf");
   652     DEBUG_API("<-XAMediaPlayerImpl_DoAddItf");
   630     return ret;
   653     return ret;
   631 }
   654     }
   632 
   655 
   633 /* XAMediaPlayerImpl_DoResumeItf
   656 /* XAMediaPlayerImpl_DoResumeItf
   634  * Try to resume lost interface, object specific parts
   657  * Try to resume lost interface, object specific parts
   635  */
   658  */
   636 XAresult XAMediaPlayerImpl_DoResumeItf(XAObjectItf self, XAObjItfMapEntry *mapEntry  )
   659 XAresult XAMediaPlayerImpl_DoResumeItf(XAObjectItf self,
   637 {
   660         XAObjItfMapEntry *mapEntry)
       
   661     {
   638     /* For now, no difference between suspended and unrealised itfs */
   662     /* For now, no difference between suspended and unrealised itfs */
   639     XAresult ret = XA_RESULT_SUCCESS;
   663     XAresult ret = XA_RESULT_SUCCESS;
   640     DEBUG_API("->XAMediaPlayerImpl_DoResumeItf");
   664     DEBUG_API("->XAMediaPlayerImpl_DoResumeItf");
   641     ret = XAMediaPlayerImpl_DoAddItf(self,mapEntry);
   665     ret = XAMediaPlayerImpl_DoAddItf(self, mapEntry);
   642     DEBUG_API("<-XAMediaPlayerImpl_DoResumeItf");
   666     DEBUG_API("<-XAMediaPlayerImpl_DoResumeItf");
   643     return ret;
   667     return ret;
   644 }
   668     }
   645 
   669 
   646 /* XAMediaPlayerImpl_DoRemoveItf
   670 /* XAMediaPlayerImpl_DoRemoveItf
   647  * Dynamically remove an interface, object specific parts
   671  * Dynamically remove an interface, object specific parts
   648  */
   672  */
   649 XAresult XAMediaPlayerImpl_DoRemoveItf(XAObjectItf self, XAObjItfMapEntry *mapEntry )
   673 XAresult XAMediaPlayerImpl_DoRemoveItf(XAObjectItf self,
   650 {
   674         XAObjItfMapEntry *mapEntry)
       
   675     {
   651     XAresult ret = XA_RESULT_SUCCESS;
   676     XAresult ret = XA_RESULT_SUCCESS;
   652     DEBUG_API("->XAMediaPlayerImpl_DoRemoveItf");
   677     DEBUG_API("->XAMediaPlayerImpl_DoRemoveItf");
   653 
   678 
   654     if(mapEntry)
   679     if (mapEntry)
   655     {
   680         {
   656         switch( mapEntry->mapIdx )
   681         switch (mapEntry->mapIdx)
   657         {
   682             {
   658             case MP_METADATAEXTRACTIONITF:
   683             case MP_METADATAEXTRACTIONITF:
   659                 XAMetadataExtractionItfImpl_Free(mapEntry->pItf);
   684                 XAMetadataExtractionItfImpl_Free(mapEntry->pItf);
   660                 break;
   685                 break;
   661             case MP_METADATATRAVERSALITF:
   686             case MP_METADATATRAVERSALITF:
   662                 XAMetadataTraversalItfImpl_Free(mapEntry->pItf);
   687                 XAMetadataTraversalItfImpl_Free(mapEntry->pItf);
   665                 XAPlaybackRateItfImpl_Free(mapEntry->pItf);
   690                 XAPlaybackRateItfImpl_Free(mapEntry->pItf);
   666                 break;
   691                 break;
   667             case MP_EQUALIZERITF:
   692             case MP_EQUALIZERITF:
   668                 XAEqualizerItfImpl_Free(mapEntry->pItf);
   693                 XAEqualizerItfImpl_Free(mapEntry->pItf);
   669                 break;
   694                 break;
   670             case MP_IMAGEEFFECTSITF:
   695 #ifdef OMAX_CAMERABIN				
       
   696                 case MP_IMAGEEFFECTSITF:
   671                 XAImageEffectsItfImpl_Free(mapEntry->pItf);
   697                 XAImageEffectsItfImpl_Free(mapEntry->pItf);
   672                 break;
   698                 break;
       
   699 #endif
   673             default:
   700             default:
   674                 DEBUG_ERR("XAMediaPlayerImpl_DoRemoveItf unknown id");
   701                 DEBUG_ERR("XAMediaPlayerImpl_DoRemoveItf unknown id")
       
   702                 ;
   675                 ret = XA_RESULT_FEATURE_UNSUPPORTED;
   703                 ret = XA_RESULT_FEATURE_UNSUPPORTED;
   676                 break;
   704                 break;
   677         }
   705             }
   678         mapEntry->pItf = NULL;
   706         mapEntry->pItf = NULL;
   679     }
   707         }
   680     else
   708     else
   681     {
   709         {
   682         ret = XA_RESULT_PARAMETER_INVALID;
   710         ret = XA_RESULT_PARAMETER_INVALID;
   683     }
   711         }
   684 
   712 
   685     DEBUG_API("<-XAMediaPlayerImpl_DoRemoveItf");
   713     DEBUG_API("<-XAMediaPlayerImpl_DoRemoveItf");
   686     return ret;
   714     return ret;
   687 }
   715     }
   688 
   716