khronosfws/openmax_al/src/mediaplayer/xamediaplayer.c
changeset 55 e267340986c9
parent 42 1fa3fb47b1e3
equal deleted inserted replaced
52:4ce423f34688 55:e267340986c9
    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>
       
    22 #include "xamediaplayer.h"
    21 #include "xamediaplayer.h"
    23 #include "xaplayitf.h"
    22 #include "xaplayitf.h"
    24 #include "xaseekitf.h"
    23 #include "xaseekitf.h"
    25 #include "xaprefetchstatusitf.h"
    24 #include "xaprefetchstatusitf.h"
    26 #include "xadynintmgmtitf.h"
    25 #include "xadynintmgmtitf.h"
    27 #include "xavolumeitf.h"
    26 #include "xavolumeitf.h"
    28 #include "xametadataextractionitf.h"
    27 #include "xametadataextractionitf.h"
    29 #include "xaplaybackrateitf.h"
    28 #include "xaplaybackrateitf.h"
    30 #include "xaconfigextensionsitf.h"
       
    31 #include "xathreadsafety.h"
    29 #include "xathreadsafety.h"
    32 #include "xametadataadaptation.h"
       
    33 #include "xacapabilitiesmgr.h"
    30 #include "xacapabilitiesmgr.h"
    34 #include "xadynamicsourceitf.h"
    31 #include "xadynamicsourceitf.h"
    35 #include "xastreaminformationitf.h"
    32 #include "xastreaminformationitf.h"
    36 #include "xanlinearvolumeitf.h"
    33 #include "xanlinearvolumeitf.h"
       
    34 #include "xavideopostprocessingitf.h"
    37 #include "xanvolumeextitf.h"
    35 #include "xanvolumeextitf.h"
    38 
    36 
    39 extern void* vfHandle;
    37 extern void* vfHandle;
    40 
    38 
    41 /* Static mapping of enumeration XAMediaPlayerInterfaces to interface iids */
    39 /* Static mapping of enumeration XAMediaPlayerInterfaces to interface iids */
    45     &XA_IID_DYNAMICINTERFACEMANAGEMENT,
    43     &XA_IID_DYNAMICINTERFACEMANAGEMENT,
    46     &XA_IID_PLAY,
    44     &XA_IID_PLAY,
    47     &XA_IID_SEEK,
    45     &XA_IID_SEEK,
    48     &XA_IID_VOLUME,
    46     &XA_IID_VOLUME,
    49     &XA_IID_PREFETCHSTATUS,
    47     &XA_IID_PREFETCHSTATUS,
    50     &XA_IID_CONFIGEXTENSION,
       
    51     &XA_IID_DYNAMICSOURCE,
    48     &XA_IID_DYNAMICSOURCE,
    52     &XA_IID_METADATAEXTRACTION,
    49     &XA_IID_METADATAEXTRACTION,
    53     &XA_IID_PLAYBACKRATE,
    50     &XA_IID_PLAYBACKRATE,
    54     &XA_IID_NOKIAVOLUMEEXT,
    51     &XA_IID_NOKIAVOLUMEEXT,
    55     &XA_IID_NOKIALINEARVOLUME,
    52     &XA_IID_NOKIALINEARVOLUME,
    56     &XA_IID_STREAMINFORMATION
    53     &XA_IID_STREAMINFORMATION,
       
    54     &XA_IID_VIDEOPOSTPROCESSING
    57     };
    55     };
    58 
    56 
    59 /* Global methods */
    57 /* Global methods */
    60 
    58 
    61 /* XAResult XAMediaPlayerImpl_CreateMediaPlayer
    59 /* XAResult XAMediaPlayerImpl_CreateMediaPlayer
   174         }
   172         }
   175 
   173 
   176     if (ret != XA_RESULT_SUCCESS)
   174     if (ret != XA_RESULT_SUCCESS)
   177         { /* creation fails */
   175         { /* creation fails */
   178         XAObjectItfImpl_Destroy((XAObjectItf) &(pBaseObj));
   176         XAObjectItfImpl_Destroy((XAObjectItf) &(pBaseObj));
       
   177         XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
       
   178         DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer");
   179         return ret;
   179         return ret;
   180         }
   180         }
   181 
   181 
   182     /* Mark interfaces that can be handled dynamically */
   182     /* Mark interfaces that can be handled dynamically */
   183     /* Mandated dynamic itfs */
   183     /* Mandated dynamic itfs */
   184     pBaseObj->interfaceMap[MP_METADATAEXTRACTIONITF].isDynamic
   184     pBaseObj->interfaceMap[MP_METADATAEXTRACTIONITF].isDynamic
   185             = XA_BOOLEAN_TRUE;
   185             = XA_BOOLEAN_TRUE;
   186     pBaseObj->interfaceMap[MP_PLAYBACKRATEITF].isDynamic = XA_BOOLEAN_TRUE;
   186     pBaseObj->interfaceMap[MP_PLAYBACKRATEITF].isDynamic = XA_BOOLEAN_TRUE;
   187 
       
   188     /*Set ObjectItf to point to newly created object*/
       
   189     *pPlayer = (XAObjectItf) &(pBaseObj->self);
       
   190 
   187 
   191     /*initialize XAPlayerImpl variables */
   188     /*initialize XAPlayerImpl variables */
   192 
   189 
   193     pPlayerImpl->dataSrc = pDataSrc;
   190     pPlayerImpl->dataSrc = pDataSrc;
   194     pPlayerImpl->bankSrc = pBankSrc;
   191     pPlayerImpl->bankSrc = pBankSrc;
   240         pPlayerImpl->curAdaptCtx = pPlayerImpl->adaptationCtxMMF;
   237         pPlayerImpl->curAdaptCtx = pPlayerImpl->adaptationCtxMMF;
   241         }
   238         }
   242 
   239 
   243     pPlayerImpl->curAdaptCtx->capslist = capabilities;
   240     pPlayerImpl->curAdaptCtx->capslist = capabilities;
   244     pPlayerImpl->curAdaptCtx->fwtype = fwType;
   241     pPlayerImpl->curAdaptCtx->fwtype = fwType;
   245 
   242     
       
   243     /*Set ObjectItf to point to newly created object*/
       
   244     *pPlayer = (XAObjectItf) &(pBaseObj->self);
       
   245     
   246     XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   246     XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   247     DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer");
   247     DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer");
   248     return XA_RESULT_SUCCESS;
   248     return XA_RESULT_SUCCESS;
   249     }
   249     }
   250 
   250 
   349                                     *ioDevice =
   349                                     *ioDevice =
   350                                             (XADataLocator_IODevice*) (pImpl->dataSrc->pLocator);
   350                                             (XADataLocator_IODevice*) (pImpl->dataSrc->pLocator);
   351                             if (ioDevice->deviceType == XA_IODEVICE_CAMERA)
   351                             if (ioDevice->deviceType == XA_IODEVICE_CAMERA)
   352                                 {
   352                                 {
   353                                 vfHandle = (void*) pItf;
   353                                 vfHandle = (void*) pItf;
   354                                 DEBUG_INFO_A1("Stored view finder pointer to global address %x", vfHandle);
   354                                 DEBUG_INFO_A1("Stored view finder pointer to global address %x", (int)vfHandle);
   355                                 }
   355                                 }
   356                             }
   356                             }
   357                         else
   357                         else
   358                             {
   358                             {
   359 
   359 
   374                             pImpl->curAdaptCtx);
   374                             pImpl->curAdaptCtx);
   375                     break;
   375                     break;
   376                 case MP_PLAYBACKRATEITF:
   376                 case MP_PLAYBACKRATEITF:
   377                     pItf = XAPlaybackRateItfImpl_Create(pImpl);
   377                     pItf = XAPlaybackRateItfImpl_Create(pImpl);
   378                     break;
   378                     break;
   379                 case MP_CONFIGEXTENSIONITF:
       
   380                     pItf = XAConfigExtensionsItfImpl_Create();
       
   381                     XAConfigExtensionsItfImpl_SetContext(pItf,
       
   382                             pImpl->curAdaptCtx);
       
   383                     break;
       
   384                 case MP_DYNAMICSOURCEITF:
   379                 case MP_DYNAMICSOURCEITF:
   385                     pItf = XADynamicSourceItfImpl_Create(pImpl->curAdaptCtx);
   380                     pItf = XADynamicSourceItfImpl_Create(pImpl->curAdaptCtx);
   386                     break;
   381                     break;
   387                 case MP_NOKIAVOLUMEEXT:
   382                 case MP_NOKIAVOLUMEEXT:
   388                     pItf = XANokiaVolumeExtItfImpl_Create(pImpl->curAdaptCtx);
   383                     pItf = XANokiaVolumeExtItfImpl_Create(pImpl->curAdaptCtx);
   391                     pItf = XANokiaLinearVolumeItfImpl_Create(
   386                     pItf = XANokiaLinearVolumeItfImpl_Create(
   392                             pImpl->curAdaptCtx);
   387                             pImpl->curAdaptCtx);
   393                     break;
   388                     break;
   394                 case MP_STREAMINFORMATIONITF:
   389                 case MP_STREAMINFORMATIONITF:
   395                     pItf = XAStreamInformationItfImpl_Create(
   390                     pItf = XAStreamInformationItfImpl_Create(
       
   391                             pImpl);
       
   392                     break;
       
   393                 case MP_VIDEOPOSTPROCESSINGITF:
       
   394                     pItf = XAVideoPostProcessingItfImpl_Create(
   396                             pImpl->curAdaptCtx);
   395                             pImpl->curAdaptCtx);
   397                     break;
   396                     break;
   398                 default:
   397                 default:
   399                     break;
   398                     break;
   400                 }
   399                 }
   455     XAuint8 itfIdx = 0;
   454     XAuint8 itfIdx = 0;
   456     XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*) pObj;
   455     XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*) pObj;
   457     DEBUG_API("->XAMediaPlayerImpl_FreeResources");
   456     DEBUG_API("->XAMediaPlayerImpl_FreeResources");
   458     XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS( XATSMediaPlayer );
   457     XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS( XATSMediaPlayer );
   459 
   458 
   460     assert(pObj && pImpl && pObj == pObj->self);
       
   461     for (itfIdx = 0; itfIdx < MP_ITFCOUNT; itfIdx++)
   459     for (itfIdx = 0; itfIdx < MP_ITFCOUNT; itfIdx++)
   462         {
   460         {
   463         void *pItf = pObj->interfaceMap[itfIdx].pItf;
   461         void *pItf = pObj->interfaceMap[itfIdx].pItf;
   464         if (pItf)
   462         if (pItf)
   465             {
   463             {
   484                     XAMetadataExtractionItfImpl_Free(pItf);
   482                     XAMetadataExtractionItfImpl_Free(pItf);
   485                     break;
   483                     break;
   486                 case MP_PLAYBACKRATEITF:
   484                 case MP_PLAYBACKRATEITF:
   487                     XAPlaybackRateItfImpl_Free(pItf);
   485                     XAPlaybackRateItfImpl_Free(pItf);
   488                     break;
   486                     break;
   489                 case MP_CONFIGEXTENSIONITF:
       
   490                     XAConfigExtensionsItfImpl_Free(pItf);
       
   491                     break;
       
   492                 case MP_DYNAMICSOURCEITF:
   487                 case MP_DYNAMICSOURCEITF:
   493                     XADynamicSourceItfImpl_Free(pItf);
   488                     XADynamicSourceItfImpl_Free(pItf);
   494                     break;
   489                     break;
   495                 case MP_NOKIAVOLUMEEXT:
   490                 case MP_NOKIAVOLUMEEXT:
   496                     XANokiaVolumeExtItfImpl_Free(pItf);
   491                     XANokiaVolumeExtItfImpl_Free(pItf);
   498                 case MP_NOKIALINEARVOLUME:
   493                 case MP_NOKIALINEARVOLUME:
   499                     XANokiaLinearVolumeItfImpl_Free(pItf);
   494                     XANokiaLinearVolumeItfImpl_Free(pItf);
   500                     break;
   495                     break;
   501                 case MP_STREAMINFORMATIONITF:
   496                 case MP_STREAMINFORMATIONITF:
   502                     XAStreamInformationItfImpl_Free(pItf);
   497                     XAStreamInformationItfImpl_Free(pItf);
       
   498                     break;
       
   499                 case MP_VIDEOPOSTPROCESSINGITF:
       
   500                     XAVideoPostProcessingItfImpl_Free(pItf);
   503                     break;
   501                     break;
   504 
   502 
   505                 }
   503                 }
   506             pObj->interfaceMap[itfIdx].pItf = NULL;
   504             pObj->interfaceMap[itfIdx].pItf = NULL;
   507             }
   505             }