khronosfws/openmax_al/src/mediaplayer/xamediaplayer.c
changeset 42 1fa3fb47b1e3
parent 31 8dfd592727cb
child 55 e267340986c9
equal deleted inserted replaced
32:94fc26b6e006 42:1fa3fb47b1e3
    24 #include "xaseekitf.h"
    24 #include "xaseekitf.h"
    25 #include "xaprefetchstatusitf.h"
    25 #include "xaprefetchstatusitf.h"
    26 #include "xadynintmgmtitf.h"
    26 #include "xadynintmgmtitf.h"
    27 #include "xavolumeitf.h"
    27 #include "xavolumeitf.h"
    28 #include "xametadataextractionitf.h"
    28 #include "xametadataextractionitf.h"
    29 #include "xametadatatraversalitf.h"
       
    30 #include "xaplaybackrateitf.h"
    29 #include "xaplaybackrateitf.h"
    31 #include "xaequalizeritf.h"
       
    32 #include "xaimagecontrolsitf.h"
       
    33 #include "xaimageeffectsitf.h"
       
    34 #include "xavideopostprocessingitf.h"
       
    35 #include "xaconfigextensionsitf.h"
    30 #include "xaconfigextensionsitf.h"
    36 #include "xathreadsafety.h"
    31 #include "xathreadsafety.h"
    37 #include "xametadataadaptation.h"
    32 #include "xametadataadaptation.h"
    38 #include "xacapabilitiesmgr.h"
    33 #include "xacapabilitiesmgr.h"
    39 #include "xadynamicsourceitf.h"
    34 #include "xadynamicsourceitf.h"
    44 extern void* vfHandle;
    39 extern void* vfHandle;
    45 
    40 
    46 /* Static mapping of enumeration XAMediaPlayerInterfaces to interface iids */
    41 /* Static mapping of enumeration XAMediaPlayerInterfaces to interface iids */
    47 static const XAInterfaceID* xaMediaPlayerItfIIDs[MP_ITFCOUNT] =
    42 static const XAInterfaceID* xaMediaPlayerItfIIDs[MP_ITFCOUNT] =
    48     {
    43     {
    49             &XA_IID_OBJECT,
    44     &XA_IID_OBJECT,
    50             &XA_IID_DYNAMICINTERFACEMANAGEMENT,
    45     &XA_IID_DYNAMICINTERFACEMANAGEMENT,
    51             &XA_IID_PLAY,
    46     &XA_IID_PLAY,
    52             &XA_IID_SEEK,
    47     &XA_IID_SEEK,
    53             &XA_IID_VOLUME,
    48     &XA_IID_VOLUME,
    54             &XA_IID_PREFETCHSTATUS,
    49     &XA_IID_PREFETCHSTATUS,
    55             &XA_IID_CONFIGEXTENSION,
    50     &XA_IID_CONFIGEXTENSION,
    56             &XA_IID_DYNAMICSOURCE,
    51     &XA_IID_DYNAMICSOURCE,
    57             &XA_IID_EQUALIZER,
    52     &XA_IID_METADATAEXTRACTION,
    58             &XA_IID_IMAGECONTROLS,
    53     &XA_IID_PLAYBACKRATE,
    59             &XA_IID_IMAGEEFFECTS,
    54     &XA_IID_NOKIAVOLUMEEXT,
    60             &XA_IID_METADATAEXTRACTION,
    55     &XA_IID_NOKIALINEARVOLUME,
    61             &XA_IID_METADATATRAVERSAL,
    56     &XA_IID_STREAMINFORMATION
    62             &XA_IID_PLAYBACKRATE,
       
    63             &XA_IID_VIDEOPOSTPROCESSING,
       
    64             &XA_IID_NOKIAVOLUMEEXT,
       
    65             &XA_IID_NOKIALINEARVOLUME,
       
    66             &XA_IID_STREAMINFORMATION
       
    67     };
    57     };
    68 
    58 
    69 /* Global methods */
    59 /* Global methods */
    70 
    60 
    71 /* XAResult XAMediaPlayerImpl_CreateMediaPlayer
    61 /* XAResult XAMediaPlayerImpl_CreateMediaPlayer
   162                     DEBUG_INFO("Requested (not required) interface not found - continue creation");
   152                     DEBUG_INFO("Requested (not required) interface not found - continue creation");
   163                     }
   153                     }
   164                 }
   154                 }
   165             else
   155             else
   166                 { /* weed out unsupported content-aware itf's */
   156                 { /* weed out unsupported content-aware itf's */
   167                 if ((mediaType == XA_MEDIATYPE_IMAGE && (entry->mapIdx
   157                 if ((mediaType == XA_MEDIATYPE_IMAGE && (entry->mapIdx == MP_SEEKITF 
   168                         == MP_SEEKITF || entry->mapIdx == MP_EQUALIZERITF
   158                         || entry->mapIdx == MP_VOLUMEITF)))
   169                         || entry->mapIdx == MP_VOLUMEITF)) || (mediaType
       
   170                         == XA_MEDIATYPE_AUDIO && (entry->mapIdx
       
   171                         == MP_IMAGECONTROLSITF || entry->mapIdx
       
   172                         == MP_IMAGEEFFECTSITF || entry->mapIdx
       
   173                         == MP_VIDEOPOSTPROCESSINGITF)))
       
   174                     {
   159                     {
   175                     entry->required = XA_BOOLEAN_FALSE;
   160                     entry->required = XA_BOOLEAN_FALSE;
   176                     if (pInterfaceRequired[itfIdx])
   161                     if (pInterfaceRequired[itfIdx])
   177                         {
   162                         {
   178                         DEBUG_ERR("Required interface not supported for given media - abort creation!");
   163                         DEBUG_ERR("Required interface not supported for given media - abort creation!");
   194         return ret;
   179         return ret;
   195         }
   180         }
   196 
   181 
   197     /* Mark interfaces that can be handled dynamically */
   182     /* Mark interfaces that can be handled dynamically */
   198     /* Mandated dynamic itfs */
   183     /* Mandated dynamic itfs */
   199     pBaseObj->interfaceMap[MP_EQUALIZERITF].isDynamic = XA_BOOLEAN_TRUE;
       
   200     pBaseObj->interfaceMap[MP_IMAGEEFFECTSITF].isDynamic = XA_BOOLEAN_TRUE;
       
   201     pBaseObj->interfaceMap[MP_METADATAEXTRACTIONITF].isDynamic
   184     pBaseObj->interfaceMap[MP_METADATAEXTRACTIONITF].isDynamic
   202             = XA_BOOLEAN_TRUE;
       
   203     pBaseObj->interfaceMap[MP_METADATATRAVERSALITF].isDynamic
       
   204             = XA_BOOLEAN_TRUE;
   185             = XA_BOOLEAN_TRUE;
   205     pBaseObj->interfaceMap[MP_PLAYBACKRATEITF].isDynamic = XA_BOOLEAN_TRUE;
   186     pBaseObj->interfaceMap[MP_PLAYBACKRATEITF].isDynamic = XA_BOOLEAN_TRUE;
   206 
   187 
   207     /*Set ObjectItf to point to newly created object*/
   188     /*Set ObjectItf to point to newly created object*/
   208     *pPlayer = (XAObjectItf) &(pBaseObj->self);
   189     *pPlayer = (XAObjectItf) &(pBaseObj->self);
   255                 pPlayerImpl->dataSrc, pPlayerImpl->bankSrc,
   236                 pPlayerImpl->dataSrc, pPlayerImpl->bankSrc,
   256                 pPlayerImpl->audioSnk, pPlayerImpl->imageVideoSnk,
   237                 pPlayerImpl->audioSnk, pPlayerImpl->imageVideoSnk,
   257                 pPlayerImpl->vibra, pPlayerImpl->LEDArray);
   238                 pPlayerImpl->vibra, pPlayerImpl->LEDArray);
   258 
   239 
   259         pPlayerImpl->curAdaptCtx = pPlayerImpl->adaptationCtxMMF;
   240         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         }
   241         }
   270 
   242 
   271     pPlayerImpl->curAdaptCtx->capslist = capabilities;
   243     pPlayerImpl->curAdaptCtx->capslist = capabilities;
   272     pPlayerImpl->curAdaptCtx->fwtype = fwType;
   244     pPlayerImpl->curAdaptCtx->fwtype = fwType;
   273 
   245 
   399                     break;
   371                     break;
   400                 case MP_METADATAEXTRACTIONITF:
   372                 case MP_METADATAEXTRACTIONITF:
   401                     pItf = XAMetadataExtractionItfImpl_Create(
   373                     pItf = XAMetadataExtractionItfImpl_Create(
   402                             pImpl->curAdaptCtx);
   374                             pImpl->curAdaptCtx);
   403                     break;
   375                     break;
   404                 case MP_METADATATRAVERSALITF:
       
   405                     pItf = XAMetadataTraversalItfImpl_Create(
       
   406                             pImpl->curAdaptCtx);
       
   407                     break;
       
   408                 case MP_PLAYBACKRATEITF:
   376                 case MP_PLAYBACKRATEITF:
   409                     pItf = XAPlaybackRateItfImpl_Create(pImpl);
   377                     pItf = XAPlaybackRateItfImpl_Create(pImpl);
   410                     break;
   378                     break;
   411                 case MP_CONFIGEXTENSIONITF:
   379                 case MP_CONFIGEXTENSIONITF:
   412                     pItf = XAConfigExtensionsItfImpl_Create();
   380                     pItf = XAConfigExtensionsItfImpl_Create();
   414                             pImpl->curAdaptCtx);
   382                             pImpl->curAdaptCtx);
   415                     break;
   383                     break;
   416                 case MP_DYNAMICSOURCEITF:
   384                 case MP_DYNAMICSOURCEITF:
   417                     pItf = XADynamicSourceItfImpl_Create(pImpl->curAdaptCtx);
   385                     pItf = XADynamicSourceItfImpl_Create(pImpl->curAdaptCtx);
   418                     break;
   386                     break;
   419                 case MP_EQUALIZERITF:
       
   420                     pItf = XAEqualizerItfImpl_Create(pImpl->curAdaptCtx);
       
   421                     break;
       
   422 #ifdef OMAX_CAMERABIN
       
   423                     case MP_IMAGECONTROLSITF:
       
   424                     pItf = XAImageControlsItfImpl_Create(pImpl->curAdaptCtx);
       
   425                     break;
       
   426                     case MP_IMAGEEFFECTSITF:
       
   427                     pItf = XAImageEffectsItfImpl_Create(pImpl->curAdaptCtx);
       
   428                     break;
       
   429                     case MP_VIDEOPOSTPROCESSINGITF:
       
   430                     pItf = XAVideoPostProcessingItfImpl_Create(pImpl->curAdaptCtx);
       
   431                     break;
       
   432 #endif
       
   433                 case MP_NOKIAVOLUMEEXT:
   387                 case MP_NOKIAVOLUMEEXT:
   434                     pItf = XANokiaVolumeExtItfImpl_Create(pImpl->curAdaptCtx);
   388                     pItf = XANokiaVolumeExtItfImpl_Create(pImpl->curAdaptCtx);
   435                     break;
   389                     break;
   436                 case MP_NOKIALINEARVOLUME:
   390                 case MP_NOKIALINEARVOLUME:
   437                     pItf = XANokiaLinearVolumeItfImpl_Create(
   391                     pItf = XANokiaLinearVolumeItfImpl_Create(
   462     if (pImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
   416     if (pImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
   463         {
   417         {
   464         ret = XAMediaPlayerAdaptMMF_PostInit(
   418         ret = XAMediaPlayerAdaptMMF_PostInit(
   465                 (XAAdaptationMMFCtx*) pImpl->adaptationCtxMMF);
   419                 (XAAdaptationMMFCtx*) pImpl->adaptationCtxMMF);
   466         }
   420         }
   467     else
   421 
   468         {
       
   469         ret = XAMediaPlayerAdapt_PostInit(
       
   470                 (XAAdaptationGstCtx*) pImpl->adaptationCtxGst);
       
   471         }
       
   472     if (ret != XA_RESULT_SUCCESS)
   422     if (ret != XA_RESULT_SUCCESS)
   473         {
   423         {
   474         XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   424         XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   475         DEBUG_ERR("Adaptation init failed!");
   425         DEBUG_ERR("Adaptation init failed!");
   476         DEBUG_API("<-XAMediaPlayerImpl_DoRealize");
   426         DEBUG_API("<-XAMediaPlayerImpl_DoRealize");
   531                     XAPrefetchStatusItfImpl_Free(pItf);
   481                     XAPrefetchStatusItfImpl_Free(pItf);
   532                     break;
   482                     break;
   533                 case MP_METADATAEXTRACTIONITF:
   483                 case MP_METADATAEXTRACTIONITF:
   534                     XAMetadataExtractionItfImpl_Free(pItf);
   484                     XAMetadataExtractionItfImpl_Free(pItf);
   535                     break;
   485                     break;
   536                 case MP_METADATATRAVERSALITF:
       
   537                     XAMetadataTraversalItfImpl_Free(pItf);
       
   538                     break;
       
   539                 case MP_PLAYBACKRATEITF:
   486                 case MP_PLAYBACKRATEITF:
   540                     XAPlaybackRateItfImpl_Free(pItf);
   487                     XAPlaybackRateItfImpl_Free(pItf);
   541                     break;
   488                     break;
   542                 case MP_CONFIGEXTENSIONITF:
   489                 case MP_CONFIGEXTENSIONITF:
   543                     XAConfigExtensionsItfImpl_Free(pItf);
   490                     XAConfigExtensionsItfImpl_Free(pItf);
   544                     break;
   491                     break;
   545                 case MP_DYNAMICSOURCEITF:
   492                 case MP_DYNAMICSOURCEITF:
   546                     XADynamicSourceItfImpl_Free(pItf);
   493                     XADynamicSourceItfImpl_Free(pItf);
   547                     break;
   494                     break;
   548                 case MP_EQUALIZERITF:
       
   549                     XAEqualizerItfImpl_Free(pItf);
       
   550                     break;
       
   551 #ifdef OMAX_CAMERABIN
       
   552                     case MP_IMAGECONTROLSITF:
       
   553                     XAImageControlsItfImpl_Free(pItf);
       
   554                     break;
       
   555                     case MP_IMAGEEFFECTSITF:
       
   556                     XAImageEffectsItfImpl_Free(pItf);
       
   557                     break;
       
   558                     case MP_VIDEOPOSTPROCESSINGITF:
       
   559                     XAVideoPostProcessingItfImpl_Free(pItf);
       
   560                     break;
       
   561 #endif
       
   562                 case MP_NOKIAVOLUMEEXT:
   495                 case MP_NOKIAVOLUMEEXT:
   563                     XANokiaVolumeExtItfImpl_Free(pItf);
   496                     XANokiaVolumeExtItfImpl_Free(pItf);
   564                     break;
   497                     break;
   565                 case MP_NOKIALINEARVOLUME:
   498                 case MP_NOKIALINEARVOLUME:
   566                     XANokiaLinearVolumeItfImpl_Free(pItf);
   499                     XANokiaLinearVolumeItfImpl_Free(pItf);
   578         {
   511         {
   579         if (pImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
   512         if (pImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
   580             {
   513             {
   581             XAMediaPlayerAdaptMMF_Destroy(
   514             XAMediaPlayerAdaptMMF_Destroy(
   582                     (XAAdaptationMMFCtx*) pImpl->adaptationCtxMMF);
   515                     (XAAdaptationMMFCtx*) pImpl->adaptationCtxMMF);
   583             }
       
   584         else
       
   585             {
       
   586             XAMediaPlayerAdapt_Destroy(
       
   587                     (XAAdaptationGstCtx*) pImpl->adaptationCtxGst);
       
   588             }
   516             }
   589         }
   517         }
   590 
   518 
   591     XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS( XATSMediaPlayer );
   519     XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS( XATSMediaPlayer );
   592     DEBUG_API("<-XAMediaPlayerImpl_FreeResources");
   520     DEBUG_API("<-XAMediaPlayerImpl_FreeResources");
   611         switch (mapEntry->mapIdx)
   539         switch (mapEntry->mapIdx)
   612             {
   540             {
   613 
   541 
   614             case MP_METADATAEXTRACTIONITF:
   542             case MP_METADATAEXTRACTIONITF:
   615                 mapEntry->pItf = XAMetadataExtractionItfImpl_Create(
   543                 mapEntry->pItf = XAMetadataExtractionItfImpl_Create(
   616                         pImpl->curAdaptCtx);
       
   617                 break;
       
   618             case MP_METADATATRAVERSALITF:
       
   619                 mapEntry->pItf = XAMetadataTraversalItfImpl_Create(
       
   620                         pImpl->curAdaptCtx);
   544                         pImpl->curAdaptCtx);
   621                 break;
   545                 break;
   622             case MP_PLAYBACKRATEITF:
   546             case MP_PLAYBACKRATEITF:
   623                 mapEntry->pItf = XAPlaybackRateItfImpl_Create(pImpl);
   547                 mapEntry->pItf = XAPlaybackRateItfImpl_Create(pImpl);
   624                 break;
   548                 break;
   625             case MP_EQUALIZERITF:
       
   626                 mapEntry->pItf
       
   627                         = XAEqualizerItfImpl_Create(pImpl->curAdaptCtx);
       
   628                 break;
       
   629 #ifdef OMAX_CAMERABIN
       
   630                 case MP_IMAGEEFFECTSITF:
       
   631                 mapEntry->pItf = XAImageEffectsItfImpl_Create( pImpl->curAdaptCtx );
       
   632                 break;
       
   633 #endif
       
   634             default:
   549             default:
   635                 DEBUG_ERR("XAMediaPlayerImpl_DoAddItf unknown id")
   550                 DEBUG_ERR("XAMediaPlayerImpl_DoAddItf unknown id")
   636                 ;
   551                 ;
   637                 ret = XA_RESULT_FEATURE_UNSUPPORTED;
   552                 ret = XA_RESULT_FEATURE_UNSUPPORTED;
   638                 break;
   553                 break;
   681         switch (mapEntry->mapIdx)
   596         switch (mapEntry->mapIdx)
   682             {
   597             {
   683             case MP_METADATAEXTRACTIONITF:
   598             case MP_METADATAEXTRACTIONITF:
   684                 XAMetadataExtractionItfImpl_Free(mapEntry->pItf);
   599                 XAMetadataExtractionItfImpl_Free(mapEntry->pItf);
   685                 break;
   600                 break;
   686             case MP_METADATATRAVERSALITF:
       
   687                 XAMetadataTraversalItfImpl_Free(mapEntry->pItf);
       
   688                 break;
       
   689             case MP_PLAYBACKRATEITF:
   601             case MP_PLAYBACKRATEITF:
   690                 XAPlaybackRateItfImpl_Free(mapEntry->pItf);
   602                 XAPlaybackRateItfImpl_Free(mapEntry->pItf);
   691                 break;
   603                 break;
   692             case MP_EQUALIZERITF:
       
   693                 XAEqualizerItfImpl_Free(mapEntry->pItf);
       
   694                 break;
       
   695 #ifdef OMAX_CAMERABIN				
       
   696                 case MP_IMAGEEFFECTSITF:
       
   697                 XAImageEffectsItfImpl_Free(mapEntry->pItf);
       
   698                 break;
       
   699 #endif
       
   700             default:
   604             default:
   701                 DEBUG_ERR("XAMediaPlayerImpl_DoRemoveItf unknown id")
   605                 DEBUG_ERR("XAMediaPlayerImpl_DoRemoveItf unknown id")
   702                 ;
   606                 ;
   703                 ret = XA_RESULT_FEATURE_UNSUPPORTED;
   607                 ret = XA_RESULT_FEATURE_UNSUPPORTED;
   704                 break;
   608                 break;