khronosfws/openmax_al/src/mediaplayer/xamediaplayer.c
changeset 16 43d09473c595
parent 12 5a06f39ad45b
child 21 2ed61feeead6
child 31 8dfd592727cb
equal deleted inserted replaced
14:80975da52420 16:43d09473c595
    32 #include "xaimagecontrolsitf.h"
    32 #include "xaimagecontrolsitf.h"
    33 #include "xaimageeffectsitf.h"
    33 #include "xaimageeffectsitf.h"
    34 #include "xavideopostprocessingitf.h"
    34 #include "xavideopostprocessingitf.h"
    35 #include "xaconfigextensionsitf.h"
    35 #include "xaconfigextensionsitf.h"
    36 #include "xathreadsafety.h"
    36 #include "xathreadsafety.h"
    37 #ifdef _GSTREAMER_BACKEND_  
    37 #include "xametadataadaptation.h"
    38 #include "XAMetadataAdaptation.h"
    38 #include "xacapabilitiesmgr.h"
    39 #endif
       
    40 #include "xadynamicsourceitf.h"
    39 #include "xadynamicsourceitf.h"
    41 
    40 #include "xastreaminformationitf.h"
       
    41 #include "xanlinearvolumeitf.h"
       
    42 #include "xanvolumeextitf.h"
    42 
    43 
    43 extern void* vfHandle;
    44 extern void* vfHandle;
    44 
    45 
    45 /* Static mapping of enumeration XAMediaPlayerInterfaces to interface iids */
    46 /* Static mapping of enumeration XAMediaPlayerInterfaces to interface iids */
    46 static const XAInterfaceID* xaMediaPlayerItfIIDs[MP_ITFCOUNT] =
    47 static const XAInterfaceID* xaMediaPlayerItfIIDs[MP_ITFCOUNT] =
    57     &XA_IID_IMAGECONTROLS,
    58     &XA_IID_IMAGECONTROLS,
    58     &XA_IID_IMAGEEFFECTS,
    59     &XA_IID_IMAGEEFFECTS,
    59     &XA_IID_METADATAEXTRACTION,
    60     &XA_IID_METADATAEXTRACTION,
    60     &XA_IID_METADATATRAVERSAL,
    61     &XA_IID_METADATATRAVERSAL,
    61     &XA_IID_PLAYBACKRATE,
    62     &XA_IID_PLAYBACKRATE,
    62     &XA_IID_VIDEOPOSTPROCESSING
    63     &XA_IID_VIDEOPOSTPROCESSING,
       
    64     &XA_IID_NOKIAVOLUMEEXT,
       
    65     &XA_IID_NOKIALINEARVOLUME,
       
    66     &XA_IID_STREAMINFORMATION
    63 };
    67 };
    64 
    68 
    65 /* Global methods */
    69 /* Global methods */
    66 
    70 
    67 /* XAResult XAMediaPlayerImpl_CreateMediaPlayer
    71 /* XAResult XAMediaPlayerImpl_CreateMediaPlayer
    68  * Create object
    72  * Create object
    69  */
    73  */
    70 XAresult XAMediaPlayerImpl_CreateMediaPlayer(XAObjectItf *pPlayer,
    74 XAresult XAMediaPlayerImpl_CreateMediaPlayer(FrameworkMap* mapper,
       
    75                                             XACapabilities* capabilities,   
       
    76                                              XAObjectItf *pPlayer,
    71                                              XADataSource *pDataSrc,
    77                                              XADataSource *pDataSrc,
    72                                              XADataSource *pBankSrc,
    78                                              XADataSource *pBankSrc,
    73                                              XADataSink *pAudioSnk,
    79                                              XADataSink *pAudioSnk,
    74                                              XADataSink *pImageVideoSnk,
    80                                              XADataSink *pImageVideoSnk,
    75                                              XADataSink *pVibra,
    81                                              XADataSink *pVibra,
    79                                              const XAboolean *pInterfaceRequired)
    85                                              const XAboolean *pInterfaceRequired)
    80 {
    86 {
    81     XAuint8 itfIdx = 0;
    87     XAuint8 itfIdx = 0;
    82     XAMediaType mediaType = XA_MEDIATYPE_UNKNOWN;
    88     XAMediaType mediaType = XA_MEDIATYPE_UNKNOWN;
    83     XAMediaPlayerImpl* pPlayerImpl = NULL;
    89     XAMediaPlayerImpl* pPlayerImpl = NULL;
       
    90     FWMgrFwType fwType;
    84     XAObjectItfImpl* pBaseObj = NULL;
    91     XAObjectItfImpl* pBaseObj = NULL;
       
    92     const char *uri = NULL;
    85     XAresult ret = XA_RESULT_SUCCESS;
    93     XAresult ret = XA_RESULT_SUCCESS;
    86     XADataLocator_URI* tmpUri;
    94     
    87 
       
    88     DEBUG_API("->XAMediaPlayerImpl_CreateMediaPlayer");
    95     DEBUG_API("->XAMediaPlayerImpl_CreateMediaPlayer");
       
    96 
    89     XA_IMPL_THREAD_SAFETY_ENTRY(XATSMediaPlayer);
    97     XA_IMPL_THREAD_SAFETY_ENTRY(XATSMediaPlayer);
    90 
    98 
    91     if(!pPlayer || !pDataSrc)
    99     if(!pPlayer || !pDataSrc)
    92     {
   100     {
    93         XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
   101         XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
   197     pBaseObj->interfaceMap[MP_IMAGEEFFECTSITF].isDynamic = XA_BOOLEAN_TRUE;
   205     pBaseObj->interfaceMap[MP_IMAGEEFFECTSITF].isDynamic = XA_BOOLEAN_TRUE;
   198     pBaseObj->interfaceMap[MP_METADATAEXTRACTIONITF].isDynamic = XA_BOOLEAN_TRUE;
   206     pBaseObj->interfaceMap[MP_METADATAEXTRACTIONITF].isDynamic = XA_BOOLEAN_TRUE;
   199     pBaseObj->interfaceMap[MP_METADATATRAVERSALITF].isDynamic = XA_BOOLEAN_TRUE;
   207     pBaseObj->interfaceMap[MP_METADATATRAVERSALITF].isDynamic = XA_BOOLEAN_TRUE;
   200     pBaseObj->interfaceMap[MP_PLAYBACKRATEITF].isDynamic = XA_BOOLEAN_TRUE;
   208     pBaseObj->interfaceMap[MP_PLAYBACKRATEITF].isDynamic = XA_BOOLEAN_TRUE;
   201 
   209 
   202 
   210     
   203     /* Set ObjectItf to point to newly created object */
   211     /*Set ObjectItf to point to newly created object*/ 
   204     *pPlayer = (XAObjectItf)&(pBaseObj->self);
   212     *pPlayer = (XAObjectItf)&(pBaseObj->self);
   205 
   213 
   206     /* initialize XAPlayerImpl variables */
   214     /*initialize XAPlayerImpl variables */
   207 
   215 
   208     pPlayerImpl->dataSrc = pDataSrc;
   216     pPlayerImpl->dataSrc = pDataSrc;
   209     pPlayerImpl->bankSrc = pBankSrc;
   217     pPlayerImpl->bankSrc = pBankSrc;
   210     pPlayerImpl->audioSnk = pAudioSnk;
   218     pPlayerImpl->audioSnk = pAudioSnk;
   211     pPlayerImpl->imageVideoSnk = pImageVideoSnk;
   219     pPlayerImpl->imageVideoSnk = pImageVideoSnk;
   212     pPlayerImpl->vibra = pVibra;
   220     pPlayerImpl->vibra = pVibra;
   213     pPlayerImpl->LEDArray = pLEDArray;
   221     pPlayerImpl->LEDArray = pLEDArray;
       
   222 
       
   223     /* Determine framework type that can handle recording */
       
   224     fwType = (FWMgrFwType)FWMgrMOUnknown;
       
   225     /**/
       
   226     if (pDataSrc->pLocator)
       
   227     {
       
   228         XADataLocator_URI* dataLoc = (XADataLocator_URI*)pDataSrc->pLocator;
       
   229         if (dataLoc->locatorType == XA_DATALOCATOR_URI)
       
   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         }
   214     
   247     
   215     tmpUri = (XADataLocator_URI*)(pPlayerImpl->dataSrc->pLocator);
   248     if(fwType == FWMgrFWMMF)
   216     XAMediaPlayerImpl_DeterminePlaybackEngine(*pPlayer, tmpUri);
   249     {    
   217     
       
   218     /* This code is put here to return Feature Not Supported since adaptation is not present*/
       
   219     /*************************************************/
       
   220     XAObjectItfImpl_Destroy((XAObjectItf)&(pBaseObj));
       
   221     XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
       
   222     DEBUG_ERR("Required interface not found - abort creation!");
       
   223     DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer");
       
   224     return XA_RESULT_FEATURE_UNSUPPORTED;
       
   225     /*************************************************/
       
   226     
       
   227 /*    if(pPlayerImpl->isMMFPlayback)
       
   228     {
       
   229         pPlayerImpl->adaptationCtxMMF = XAMediaPlayerAdaptMMF_Create(pPlayerImpl->dataSrc,
   250         pPlayerImpl->adaptationCtxMMF = XAMediaPlayerAdaptMMF_Create(pPlayerImpl->dataSrc,
   230                                                                pPlayerImpl->bankSrc,
   251                                                                pPlayerImpl->bankSrc,
   231                                                                pPlayerImpl->audioSnk,
   252                                                                pPlayerImpl->audioSnk,
   232                                                                pPlayerImpl->imageVideoSnk,
   253                                                                pPlayerImpl->imageVideoSnk,
   233                                                                pPlayerImpl->vibra,
   254                                                                pPlayerImpl->vibra,
   234                                                                pPlayerImpl->LEDArray);
   255                                                                pPlayerImpl->LEDArray);
   235     
   256         
       
   257         pPlayerImpl->curAdaptCtx = pPlayerImpl->adaptationCtxMMF;    
   236     }
   258     }
   237     else
   259     else
   238     {
   260     {
   239 #ifdef _GSTREAMER_BACKEND_  
   261        pPlayerImpl->adaptationCtxGst = XAMediaPlayerAdapt_Create(pPlayerImpl->dataSrc,
   240        pPlayerImpl->adaptationCtx = XAMediaPlayerAdapt_Create(pPlayerImpl->dataSrc,
       
   241                                                            pPlayerImpl->bankSrc,
   262                                                            pPlayerImpl->bankSrc,
   242                                                            pPlayerImpl->audioSnk,
   263                                                            pPlayerImpl->audioSnk,
   243                                                            pPlayerImpl->imageVideoSnk,
   264                                                            pPlayerImpl->imageVideoSnk,
   244                                                            pPlayerImpl->vibra,
   265                                                            pPlayerImpl->vibra,
   245                                                            pPlayerImpl->LEDArray);
   266                                                            pPlayerImpl->LEDArray);
   246 #endif
   267        
   247     }
   268        pPlayerImpl->curAdaptCtx = pPlayerImpl->adaptationCtxGst;
       
   269     }
       
   270     
       
   271     pPlayerImpl->curAdaptCtx->capslist = capabilities;
       
   272     pPlayerImpl->curAdaptCtx->fwtype = fwType;
       
   273     
   248     XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   274     XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   249     DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer");
   275     DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer");
   250     return XA_RESULT_SUCCESS;*/
   276     return XA_RESULT_SUCCESS;
   251 }
   277 }
   252 
   278 
   253 /* XAResult XAMediaPlayerImpl_QueryNumSupportedInterfaces
   279 /* XAResult XAMediaPlayerImpl_QueryNumSupportedInterfaces
   254  * Statically query supported interfaces
   280  * Statically query supported interfaces
   255  */
   281  */
   280     DEBUG_API("->XAMediaPlayerImpl_QuerySupportedInterfaces");
   306     DEBUG_API("->XAMediaPlayerImpl_QuerySupportedInterfaces");
   281 
   307 
   282     if (index >= MP_ITFCOUNT || !pInterfaceId )
   308     if (index >= MP_ITFCOUNT || !pInterfaceId )
   283     {
   309     {
   284         if(pInterfaceId)
   310         if(pInterfaceId)
   285             {
   311         {
   286             *pInterfaceId = XA_IID_NULL;
   312             *pInterfaceId = XA_IID_NULL;
   287             }
   313         }
   288         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   314         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   289         DEBUG_API("<-XAMediaPlayerImpl_QuerySupportedInterfaces");
   315         DEBUG_API("<-XAMediaPlayerImpl_QuerySupportedInterfaces");
   290         return XA_RESULT_PARAMETER_INVALID;
   316         return XA_RESULT_PARAMETER_INVALID;
   291     }
   317     }
   292     else
   318     else
   305     XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self);
   331     XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self);
   306     XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*)(pObj);
   332     XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*)(pObj);
   307     XAuint8 itfIdx = 0;
   333     XAuint8 itfIdx = 0;
   308     void *pItf = NULL;
   334     void *pItf = NULL;
   309     XAresult ret = XA_RESULT_SUCCESS;
   335     XAresult ret = XA_RESULT_SUCCESS;
   310     XADataLocator_URI* tmpUri;
       
   311 
   336 
   312     DEBUG_API("->XAMediaPlayerImpl_DoRealize");
   337     DEBUG_API("->XAMediaPlayerImpl_DoRealize");
   313     XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
   338     XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
   314 
   339 
   315     /* check casting from correct pointer type */
   340     /* check casting from correct pointer type */
   338                                           XAMediaPlayerImpl_DoResumeItf,
   363                                           XAMediaPlayerImpl_DoResumeItf,
   339                                           XAMediaPlayerImpl_DoRemoveItf);
   364                                           XAMediaPlayerImpl_DoRemoveItf);
   340                     }
   365                     }
   341                     break;
   366                     break;
   342                 case MP_PLAYITF:
   367                 case MP_PLAYITF:
   343                     pItf = XAPlayItfImpl_Create(
   368                     pItf = XAPlayItfImpl_Create(pImpl);
   344 #ifdef _GSTREAMER_BACKEND_
       
   345                             pImpl->adaptationCtx,
       
   346 #endif
       
   347                             pImpl->adaptationCtxMMF);
       
   348                     if ( pImpl->dataSrc )
   369                     if ( pImpl->dataSrc )
   349                     {
   370                     {
   350                 		XAuint32 locType = *((XAuint32*)(pImpl->dataSrc->pLocator));
   371                 		XAuint32 locType = *((XAuint32*)(pImpl->dataSrc->pLocator));
   351                 		if ( locType == XA_DATALOCATOR_IODEVICE )
   372                 		if ( locType == XA_DATALOCATOR_IODEVICE )
   352                 		    {
   373                 		    {
   355                 			    {
   376                 			    {
   356                 				vfHandle = (void*) pItf;
   377                 				vfHandle = (void*) pItf;
   357                 				DEBUG_INFO_A1("Stored view finder pointer to global address %x", vfHandle);
   378                 				DEBUG_INFO_A1("Stored view finder pointer to global address %x", vfHandle);
   358                 			    }
   379                 			    }
   359                 		    }
   380                 		    }
   360                 		else if(locType == XA_DATALOCATOR_URI )
       
   361                 		    {
       
   362                             tmpUri = (XADataLocator_URI*)(pImpl->dataSrc->pLocator);
       
   363                             XAPlayItfImpl_DeterminePlaybackEngine(pItf, tmpUri);
       
   364                 		    }
       
   365                 		else
   381                 		else
   366                 		    {
   382                 		    {
   367                 		
   383                 		
   368                 		    }
   384                 		    }
   369                     }
   385                     }
   370                     break;
   386                     break;
   371                 case MP_VOLUMEITF:
   387                 case MP_VOLUMEITF:
   372 #ifdef _GSTREAMER_BACKEND_  
   388                     pItf = XAVolumeItfImpl_Create(pImpl->curAdaptCtx);
   373                     pItf = XAVolumeItfImpl_Create(pImpl->adaptationCtx);
       
   374                     break;
   389                     break;
   375                 case MP_SEEKITF:
   390                 case MP_SEEKITF:
   376                     pItf = XASeekItfImpl_Create(pImpl->adaptationCtx);
   391                     pItf = XASeekItfImpl_Create(pImpl);
   377                     break;
   392                     break;
   378                 case MP_PREFETCHSTATUSITF:
   393                 case MP_PREFETCHSTATUSITF:
   379                     pItf = XAPrefetchStatusItfImpl_Create( pImpl->adaptationCtx );
   394                     pItf = XAPrefetchStatusItfImpl_Create( pImpl );
   380                     break;
   395                     break;
   381                 case MP_METADATAEXTRACTIONITF:
   396                 case MP_METADATAEXTRACTIONITF:
   382                     pItf = XAMetadataExtractionItfImpl_Create( pImpl->adaptationCtx );
   397                     pItf = XAMetadataExtractionItfImpl_Create( pImpl->curAdaptCtx );
   383                     break;
   398                     break;
   384                 case MP_METADATATRAVERSALITF:
   399                 case MP_METADATATRAVERSALITF:
   385                     pItf = XAMetadataTraversalItfImpl_Create( pImpl->adaptationCtx );
   400                     pItf = XAMetadataTraversalItfImpl_Create( pImpl->curAdaptCtx );
   386                     break;
   401                     break;
   387                 case MP_PLAYBACKRATEITF:
   402                 case MP_PLAYBACKRATEITF:
   388                     pItf = XAPlaybackRateItfImpl_Create(pImpl->adaptationCtx);
   403                     pItf = XAPlaybackRateItfImpl_Create(pImpl);
   389                     break;
   404                     break;
   390                 case MP_CONFIGEXTENSIONITF:
   405                 case MP_CONFIGEXTENSIONITF:
   391                     pItf = XAConfigExtensionsItfImpl_Create();
   406                     pItf = XAConfigExtensionsItfImpl_Create();
   392                     XAConfigExtensionsItfImpl_SetContext( pItf, pImpl->adaptationCtx);
   407                     XAConfigExtensionsItfImpl_SetContext( pItf, pImpl->curAdaptCtx);
   393                     break;
   408                     break;
   394                 case MP_DYNAMICSOURCEITF:
   409                 case MP_DYNAMICSOURCEITF:
   395                     pItf = XADynamicSourceItfImpl_Create(pImpl->adaptationCtx);
   410                     pItf = XADynamicSourceItfImpl_Create(pImpl->curAdaptCtx);
   396                     break;
   411                     break;
   397                 case MP_EQUALIZERITF:
   412                 case MP_EQUALIZERITF:
   398                     pItf = XAEqualizerItfImpl_Create(pImpl->adaptationCtx);
   413                     pItf = XAEqualizerItfImpl_Create(pImpl->curAdaptCtx);
   399                     break;
   414                     break;
   400                 case MP_IMAGECONTROLSITF:
   415                 case MP_IMAGECONTROLSITF:
   401                     pItf = XAImageControlsItfImpl_Create(pImpl->adaptationCtx);
   416                     pItf = XAImageControlsItfImpl_Create(pImpl->curAdaptCtx);
   402                     break;
   417                     break;
   403                 case MP_IMAGEEFFECTSITF:
   418                 case MP_IMAGEEFFECTSITF:
   404                     pItf = XAImageEffectsItfImpl_Create(pImpl->adaptationCtx);
   419                     pItf = XAImageEffectsItfImpl_Create(pImpl->curAdaptCtx);
   405                     break;
   420                     break;
   406                 case MP_VIDEOPOSTPROCESSINGITF:
   421                 case MP_VIDEOPOSTPROCESSINGITF:
   407                     pItf = XAVideoPostProcessingItfImpl_Create(pImpl->adaptationCtx);
   422                     pItf = XAVideoPostProcessingItfImpl_Create(pImpl->curAdaptCtx);
   408 #endif
   423                     break;
   409                     break;
   424                case MP_NOKIAVOLUMEEXT:
       
   425                     pItf = XANokiaVolumeExtItfImpl_Create(pImpl->curAdaptCtx);
       
   426                     break;
       
   427                case MP_NOKIALINEARVOLUME:
       
   428                     pItf = XANokiaLinearVolumeItfImpl_Create(pImpl->curAdaptCtx);
       
   429                     break;                                        
       
   430                 case MP_STREAMINFORMATIONITF:
       
   431                     pItf = XAStreamInformationItfImpl_Create(pImpl->curAdaptCtx);
       
   432                     break;                    
   410                 default:
   433                 default:
   411                     break;
   434                     break;
   412             }
   435             }
   413             if(!pItf)
   436             if(!pItf)
   414             {
   437             {
   423                 pObj->interfaceMap[itfIdx].pItf = pItf;
   446                 pObj->interfaceMap[itfIdx].pItf = pItf;
   424             }
   447             }
   425         }
   448         }
   426     }
   449     }
   427     /* init adaptation */
   450     /* init adaptation */
   428     if(pImpl->isMMFPlayback)
   451     if(pImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
   429     {
   452     {
   430        ret = XAMediaPlayerAdaptMMF_PostInit( pImpl->adaptationCtxMMF );
   453        ret = XAMediaPlayerAdaptMMF_PostInit( (XAAdaptationMMFCtx*)pImpl->adaptationCtxMMF );
   431     }
   454     }
   432     else
   455     else
   433     {
   456     {
   434 #ifdef _GSTREAMER_BACKEND_
   457        ret = XAMediaPlayerAdapt_PostInit( (XAAdaptationGstCtx*)pImpl->adaptationCtxGst );
   435        ret = XAMediaPlayerAdapt_PostInit( pImpl->adaptationCtx );
       
   436 #endif
       
   437     }
   458     }
   438     if ( ret != XA_RESULT_SUCCESS )
   459     if ( ret != XA_RESULT_SUCCESS )
   439     {
   460     {
   440         XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   461         XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   441         DEBUG_ERR("Adaptation init failed!");
   462         DEBUG_ERR("Adaptation init failed!");
   467  **/
   488  **/
   468 void XAMediaPlayerImpl_FreeResources(XAObjectItf self)
   489 void XAMediaPlayerImpl_FreeResources(XAObjectItf self)
   469 {
   490 {
   470     XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self);
   491     XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self);
   471     XAuint8 itfIdx = 0;
   492     XAuint8 itfIdx = 0;
   472 
   493     XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*)pObj;
   473     DEBUG_API("->XAMediaPlayerImpl_FreeResources");
   494     DEBUG_API("->XAMediaPlayerImpl_FreeResources");
   474     XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS( XATSMediaPlayer );
   495     XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS( XATSMediaPlayer );
   475 #ifdef _GSTREAMER_BACKEND_
   496 
   476     XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*)pObj;
       
   477     assert(pObj && pImpl && pObj == pObj->self);
   497     assert(pObj && pImpl && pObj == pObj->self);
   478 #endif
       
   479 
       
   480     
       
   481 
       
   482     for(itfIdx = 0; itfIdx < MP_ITFCOUNT; itfIdx++)
   498     for(itfIdx = 0; itfIdx < MP_ITFCOUNT; itfIdx++)
   483     {
   499     {
   484         void *pItf = pObj->interfaceMap[itfIdx].pItf;
   500         void *pItf = pObj->interfaceMap[itfIdx].pItf;
   485         if(pItf)
   501         if(pItf)
   486         {
   502         {
   526                     XAImageEffectsItfImpl_Free(pItf);
   542                     XAImageEffectsItfImpl_Free(pItf);
   527                     break;
   543                     break;
   528                 case MP_VIDEOPOSTPROCESSINGITF:
   544                 case MP_VIDEOPOSTPROCESSINGITF:
   529                     XAVideoPostProcessingItfImpl_Free(pItf);
   545                     XAVideoPostProcessingItfImpl_Free(pItf);
   530                     break;
   546                     break;
       
   547                 case MP_NOKIAVOLUMEEXT:
       
   548                     XANokiaVolumeExtItfImpl_Free(pItf);
       
   549                     break;
       
   550                 case MP_NOKIALINEARVOLUME:
       
   551                     XANokiaLinearVolumeItfImpl_Free(pItf);
       
   552                     break;                                        
       
   553                 case MP_STREAMINFORMATIONITF:
       
   554                     XAStreamInformationItfImpl_Free(pItf);
       
   555                     break;
       
   556                     
   531             }
   557             }
   532             pObj->interfaceMap[itfIdx].pItf = NULL;
   558             pObj->interfaceMap[itfIdx].pItf = NULL;
   533         }
   559         }
   534     }
   560     }
   535 #ifdef _GSTREAMER_BACKEND_
   561     
   536     if ( pImpl->adaptationCtx != NULL )
   562     if(pImpl->curAdaptCtx)
   537     {
   563         {
   538         XAMediaPlayerAdapt_Destroy( pImpl->adaptationCtx );
   564         if(pImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
   539         pImpl->adaptationCtx = NULL;
   565             {
   540     }
   566             XAMediaPlayerAdaptMMF_Destroy( (XAAdaptationMMFCtx*)pImpl->adaptationCtxMMF );
   541 #endif
   567             }
       
   568         else
       
   569             {
       
   570             XAMediaPlayerAdapt_Destroy( (XAAdaptationGstCtx*)pImpl->adaptationCtxGst );
       
   571             }
       
   572         }
       
   573 
   542     XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS( XATSMediaPlayer );
   574     XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS( XATSMediaPlayer );
   543     DEBUG_API("<-XAMediaPlayerImpl_FreeResources");
   575     DEBUG_API("<-XAMediaPlayerImpl_FreeResources");
   544     return;
   576     return;
   545 }
   577 }
   546 
   578 
   547 /* XAMediaPlayerImpl_DoAddItf
   579 /* XAMediaPlayerImpl_DoAddItf
   548  * Dynamically add an interface, object specific parts
   580  * Dynamically add an interface, object specific parts
   549  */
   581  */
   550 XAresult XAMediaPlayerImpl_DoAddItf(XAObjectItf self, XAObjItfMapEntry *mapEntry  )
   582 XAresult XAMediaPlayerImpl_DoAddItf(XAObjectItf self, XAObjItfMapEntry *mapEntry  )
   551 {
   583 {
   552 #ifdef _GSTREAMER_BACKEND_  
   584   
   553     XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self);
   585     XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self);
   554     XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*)(pObj);
   586     XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*)(pObj);
   555 #endif
   587 
   556     XAresult ret = XA_RESULT_SUCCESS;
   588     XAresult ret = XA_RESULT_SUCCESS;
   557     DEBUG_API("->XAMediaPlayerImpl_DoAddItf");
   589     DEBUG_API("->XAMediaPlayerImpl_DoAddItf");
   558 
   590 
   559     if(mapEntry)
   591     if(mapEntry)
   560     {
   592     {
   561         switch( mapEntry->mapIdx )
   593         switch( mapEntry->mapIdx )
   562             {
   594             {
   563 #ifdef _GSTREAMER_BACKEND_  
   595   
   564             case MP_METADATAEXTRACTIONITF:
   596             case MP_METADATAEXTRACTIONITF:
   565                 mapEntry->pItf = XAMetadataExtractionItfImpl_Create( pImpl->adaptationCtx );
   597                 mapEntry->pItf = XAMetadataExtractionItfImpl_Create( pImpl->curAdaptCtx );
   566                 break;
   598                 break;
   567             case MP_METADATATRAVERSALITF:
   599             case MP_METADATATRAVERSALITF:
   568                 mapEntry->pItf = XAMetadataTraversalItfImpl_Create( pImpl->adaptationCtx );
   600                 mapEntry->pItf = XAMetadataTraversalItfImpl_Create( pImpl->curAdaptCtx );
   569                 break;
   601                 break;
   570             case MP_PLAYBACKRATEITF:
   602             case MP_PLAYBACKRATEITF:
   571                 mapEntry->pItf = XAPlaybackRateItfImpl_Create(pImpl->adaptationCtx);
   603                 mapEntry->pItf = XAPlaybackRateItfImpl_Create(pImpl);
   572                 break;
   604                 break;
   573             case MP_EQUALIZERITF:
   605             case MP_EQUALIZERITF:
   574                 mapEntry->pItf = XAEqualizerItfImpl_Create( pImpl->adaptationCtx );
   606                 mapEntry->pItf = XAEqualizerItfImpl_Create( pImpl->curAdaptCtx );
   575                 break;
   607                 break;
   576             case MP_IMAGEEFFECTSITF:
   608             case MP_IMAGEEFFECTSITF:
   577                 mapEntry->pItf = XAImageEffectsItfImpl_Create( pImpl->adaptationCtx );
   609                 mapEntry->pItf = XAImageEffectsItfImpl_Create( pImpl->curAdaptCtx );
   578                 break;
   610                 break;
   579 #endif
   611 
   580             default:
   612             default:
   581                 DEBUG_ERR("XAMediaPlayerImpl_DoAddItf unknown id");
   613                 DEBUG_ERR("XAMediaPlayerImpl_DoAddItf unknown id");
   582                 ret = XA_RESULT_FEATURE_UNSUPPORTED;
   614                 ret = XA_RESULT_FEATURE_UNSUPPORTED;
   583                 break;
   615                 break;
   584             }
   616             }
   651     }
   683     }
   652 
   684 
   653     DEBUG_API("<-XAMediaPlayerImpl_DoRemoveItf");
   685     DEBUG_API("<-XAMediaPlayerImpl_DoRemoveItf");
   654     return ret;
   686     return ret;
   655 }
   687 }
   656 XAresult XAMediaPlayerImpl_DeterminePlaybackEngine(XAObjectItf self, XADataLocator_URI *uri)
   688 
   657 {
       
   658  
       
   659   XAresult ret = XA_RESULT_SUCCESS;
       
   660   char* tempPtr = NULL;
       
   661   char extension[5];
       
   662   
       
   663   XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self);
       
   664   XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*)pObj;
       
   665   DEBUG_API("->XAMediaPlayerImpl_DeterminePlaybackEngine");
       
   666     
       
   667   //need to move to configuration file and add more in final class
       
   668   
       
   669   pImpl->isMMFPlayback = XA_BOOLEAN_TRUE;
       
   670 	
       
   671   tempPtr = strchr((char*)(uri->URI), '.');
       
   672   strcpy(extension, tempPtr);
       
   673 	
       
   674   if(!strcmp(extension, ".wav"))
       
   675   {
       
   676      pImpl->isMMFPlayback = XA_BOOLEAN_FALSE;
       
   677   }
       
   678 
       
   679   DEBUG_API("<-XAMediaPlayerImpl_DeterminePlaybackEngine"); 
       
   680   return ret;  
       
   681   
       
   682 }