khronosfws/openmax_al/src/mediaplayer/xaplayitf.c
changeset 16 43d09473c595
parent 12 5a06f39ad45b
child 21 2ed61feeead6
child 31 8dfd592727cb
equal deleted inserted replaced
14:80975da52420 16:43d09473c595
    18 #include <stdio.h>
    18 #include <stdio.h>
    19 #include <stdlib.h>
    19 #include <stdlib.h>
    20 #include <assert.h>
    20 #include <assert.h>
    21 
    21 
    22 #include "xaplayitf.h"
    22 #include "xaplayitf.h"
    23 #ifdef _GSTREAMER_BACKEND_  
    23 
    24 #include "XAPlayItfAdaptation.h"
    24 #include "xaplayitfadaptation.h"
    25 #endif
    25 
    26 #include "xaplayitfadaptationmmf.h"
    26 #include "xaplayitfadaptationmmf.h"
    27 #include "xathreadsafety.h"
    27 #include "xathreadsafety.h"
    28 #include <string.h>
    28 #include <string.h>
    29 
    29 
    30 void* vfHandle;
    30 void* vfHandle;
    56 XAresult XAPlayItfImpl_SetPlayState(XAPlayItf self, XAuint32 state)
    56 XAresult XAPlayItfImpl_SetPlayState(XAPlayItf self, XAuint32 state)
    57 {
    57 {
    58     XAresult ret = XA_RESULT_SUCCESS;
    58     XAresult ret = XA_RESULT_SUCCESS;
    59     XAPlayItfImpl* impl = GetImpl(self);
    59     XAPlayItfImpl* impl = GetImpl(self);
    60     DEBUG_API_A1("->XAPlayItfImpl_SetPlayState %s",PLAYSTATENAME(state));
    60     DEBUG_API_A1("->XAPlayItfImpl_SetPlayState %s",PLAYSTATENAME(state));
    61     XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
       
    62 
    61 
    63     if( !impl || state < XA_PLAYSTATE_STOPPED || state > XA_PLAYSTATE_PLAYING )
    62     if( !impl || state < XA_PLAYSTATE_STOPPED || state > XA_PLAYSTATE_PLAYING )
    64     {
    63     {
    65         /* invalid parameter */
    64         /* invalid parameter */
       
    65         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
       
    66         DEBUG_API("<-XAPlayItfImpl_SetPlayState");
       
    67         return XA_RESULT_PARAMETER_INVALID;
       
    68     }
       
    69 
       
    70     XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
       
    71 
       
    72     if(impl->pObjImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
       
    73     {
       
    74         ret = XAPlayItfAdaptMMF_SetPlayState(impl->pObjImpl->curAdaptCtx, state);
    66         XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
    75         XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
    67         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
       
    68         DEBUG_API("<-XAPlayItfImpl_SetPlayState");
    76         DEBUG_API("<-XAPlayItfImpl_SetPlayState");
    69         return XA_RESULT_PARAMETER_INVALID;
    77         return ret;		    
    70     }
    78     }
    71 
    79 
    72     /* check is play state changed, if not do nothing */
    80 	/* check is play state changed, if not do nothing */
    73     if(state != impl->playbackState)
    81     if(state != impl->playbackState)
    74     {
    82 	{
    75         if(state == XA_PLAYSTATE_PLAYING)
    83     	if(state == XA_PLAYSTATE_PLAYING)
    76         {
    84     	{
    77 #ifdef _GSTREAMER_BACKEND_
    85         	XAPlayItfAdaptGST_GetPosition((XAAdaptationGstCtx*)impl->adapCtx, &(impl->lastPosition));
    78         XAPlayItfAdapt_GetPosition(impl->adapCtx, &(impl->lastPosition));
    86     	}
    79 #endif        
    87 		ret = XAPlayItfAdaptGST_SetPlayState(impl->adapCtx, state);
    80         }
    88 
    81         if(impl->isMMFPlayback)
    89 		if(ret == XA_RESULT_SUCCESS)
    82         {
    90 		    {
    83            ret = XAPlayItfAdaptMMF_SetPlayState(impl->adaptCtxMMF, state);    
    91 		    impl->playbackState = state;
    84         }
    92 		    if(state == XA_PLAYSTATE_STOPPED || state == XA_PLAYSTATE_PAUSED)
    85         else
    93 		        {
    86         {
    94 		        impl->isMarkerPosCbSend = XA_BOOLEAN_FALSE;
    87 #ifdef _GSTREAMER_BACKEND_
    95 		        impl->lastPosition = 0;
    88         ret = XAPlayItfAdapt_SetPlayState(impl->adapCtx, state);
    96 		        }
    89 #endif        
    97 		    }
    90         }
       
    91 
       
    92         if(ret == XA_RESULT_SUCCESS)
       
    93         {
       
    94             impl->playbackState = state;
       
    95             if(state == XA_PLAYSTATE_STOPPED || state == XA_PLAYSTATE_PAUSED)
       
    96             {
       
    97                 impl->isMarkerPosCbSend = XA_BOOLEAN_FALSE;
       
    98                 impl->lastPosition = 0;
       
    99             }
       
   100         }
       
   101     }
    98     }
   102 
    99 
   103     XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   100     XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   104     DEBUG_API("<-XAPlayItfImpl_SetPlayState");
   101     DEBUG_API("<-XAPlayItfImpl_SetPlayState");
   105     return ret;
   102     return ret;
   111  **/
   108  **/
   112 XAresult XAPlayItfImpl_GetPlayState(XAPlayItf self, XAuint32 *pState)
   109 XAresult XAPlayItfImpl_GetPlayState(XAPlayItf self, XAuint32 *pState)
   113 {
   110 {
   114     XAresult ret = XA_RESULT_SUCCESS;
   111     XAresult ret = XA_RESULT_SUCCESS;
   115     XAPlayItfImpl* impl = GetImpl(self);
   112     XAPlayItfImpl* impl = GetImpl(self);
       
   113 
   116     DEBUG_API("->XAPlayItfImpl_GetPlayState");
   114     DEBUG_API("->XAPlayItfImpl_GetPlayState");
   117 
   115 
   118     if(!impl || !pState)
   116     if(!impl || !pState)
   119     {
   117     {
   120         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   118         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   121         DEBUG_API("<-XAPlayItfImpl_GetPlayState");
   119         DEBUG_API("<-XAPlayItfImpl_GetPlayState");
   122         /* invalid parameter */
   120         /* invalid parameter */
   123         return XA_RESULT_PARAMETER_INVALID;
   121         return XA_RESULT_PARAMETER_INVALID;
   124     }
   122     }
   125 
   123 
   126     *pState = impl->playbackState;
   124     XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
       
   125 
       
   126     if(impl->pObjImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
       
   127     {
       
   128         ret = XAPlayItfAdaptMMF_GetPlayState(impl->pObjImpl->curAdaptCtx, pState);    
       
   129     }
       
   130     else
       
   131     {
       
   132         *pState = impl->playbackState;
       
   133     }
       
   134 
       
   135     XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   127 
   136 
   128     DEBUG_API_A1("<-XAPlayItfImpl_GetPlayState: %s",PLAYSTATENAME(impl->playbackState));
   137     DEBUG_API_A1("<-XAPlayItfImpl_GetPlayState: %s",PLAYSTATENAME(impl->playbackState));
   129     return ret;
   138     return ret;
   130 }
   139 }
   131 
   140 
   136 XAresult XAPlayItfImpl_GetDuration(XAPlayItf self, XAmillisecond *pMsec)
   145 XAresult XAPlayItfImpl_GetDuration(XAPlayItf self, XAmillisecond *pMsec)
   137 {
   146 {
   138     XAresult ret = XA_RESULT_SUCCESS;
   147     XAresult ret = XA_RESULT_SUCCESS;
   139     XAPlayItfImpl* impl = GetImpl(self);
   148     XAPlayItfImpl* impl = GetImpl(self);
   140     DEBUG_API("->XAPlayItfImpl_GetDuration");
   149     DEBUG_API("->XAPlayItfImpl_GetDuration");
   141     XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
       
   142 
   150 
   143     if(!impl || !pMsec)
   151     if(!impl || !pMsec)
   144     {
   152     {
   145         /* invalid parameter */
   153         /* invalid parameter */
   146         XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
       
   147         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   154         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   148         DEBUG_API("<-XAPlayItfImpl_GetDuration");
   155         DEBUG_API("<-XAPlayItfImpl_GetDuration");
   149         return XA_RESULT_PARAMETER_INVALID;
   156         return XA_RESULT_PARAMETER_INVALID;
   150     }
   157     }
   151 #ifdef _GSTREAMER_BACKEND_
   158 
   152     ret = XAPlayItfAdapt_GetDuration(impl->adapCtx, pMsec);
   159     XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
   153 #endif
   160 
   154     XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   161     if(impl->pObjImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
       
   162     {
       
   163         ret = XAPlayItfAdaptMMF_GetDuration(impl->pObjImpl->curAdaptCtx, pMsec);
       
   164     }
       
   165     else
       
   166     {
       
   167         ret = XAPlayItfAdaptGST_GetDuration((XAAdaptationGstCtx*)impl->adapCtx, pMsec);
       
   168     }
       
   169     
       
   170     XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
       
   171 
   155     DEBUG_API("<-XAPlayItfImpl_GetDuration");
   172     DEBUG_API("<-XAPlayItfImpl_GetDuration");
   156     return ret;
   173     return ret;
   157 }
   174 }
   158 
   175 
   159 /**
   176 /**
   163  **/
   180  **/
   164 XAresult XAPlayItfImpl_GetPosition(XAPlayItf self, XAmillisecond *pMsec)
   181 XAresult XAPlayItfImpl_GetPosition(XAPlayItf self, XAmillisecond *pMsec)
   165 {
   182 {
   166     XAresult ret = XA_RESULT_SUCCESS;
   183     XAresult ret = XA_RESULT_SUCCESS;
   167     XAPlayItfImpl* impl = GetImpl(self);
   184     XAPlayItfImpl* impl = GetImpl(self);
       
   185  
   168     DEBUG_API("->XAPlayItfImpl_GetPosition");
   186     DEBUG_API("->XAPlayItfImpl_GetPosition");
   169     XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
   187 
   170     if(!impl || !pMsec)
   188     if(!impl || !pMsec)
   171     {
   189     {
   172         /* invalid parameter */
   190         /* invalid parameter */
   173         XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
       
   174         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   191         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   175         DEBUG_API("<-XAPlayItfImpl_GetPosition");
   192         DEBUG_API("<-XAPlayItfImpl_GetPosition");
   176         return XA_RESULT_PARAMETER_INVALID;
   193         return XA_RESULT_PARAMETER_INVALID;
   177     }
   194     }
   178 
   195 
   179     if ( impl->playbackState == XA_PLAYSTATE_STOPPED )
   196     XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
   180     {
   197 
   181     	*pMsec = 0;
   198     if(impl->pObjImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
   182     	DEBUG_API("<-XAPlayItfImpl_GetPosition");
   199     {
   183       XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );    	
   200         ret = XAPlayItfAdaptMMF_GetPosition(impl->pObjImpl->curAdaptCtx, pMsec);
   184     	return XA_RESULT_SUCCESS;
   201     }
   185     }
   202     else
   186 #ifdef _GSTREAMER_BACKEND_
   203     {
   187     ret = XAPlayItfAdapt_GetPosition(impl->adapCtx, pMsec);
   204 
   188 #endif
   205         if ( impl->playbackState == XA_PLAYSTATE_STOPPED )
       
   206         {
       
   207     	    *pMsec = 0;
       
   208     	    DEBUG_API("<-XAPlayItfImpl_GetPosition");
       
   209             XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );    	
       
   210     	    return XA_RESULT_SUCCESS;
       
   211         }
       
   212         ret = XAPlayItfAdaptGST_GetPosition((XAAdaptationGstCtx*)impl->adapCtx, pMsec);
       
   213 	}
       
   214 
   189     XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   215     XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   190     DEBUG_API("<-XAPlayItfImpl_GetPosition");
   216     DEBUG_API("<-XAPlayItfImpl_GetPosition");
   191     return ret;
   217     return ret;
   192 }
   218 }
   193 
   219 
   214     /* callback may be NULL (to remove callback) */
   240     /* callback may be NULL (to remove callback) */
   215     impl->callback = callback;
   241     impl->callback = callback;
   216     impl->cbcontext = pContext;
   242     impl->cbcontext = pContext;
   217     impl->cbPtrToSelf = self;
   243     impl->cbPtrToSelf = self;
   218 
   244 
       
   245     XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
       
   246 
       
   247     if(impl->pObjImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
       
   248     {
       
   249         ret = XAPlayItfAdaptMMF_RegisterCallback(impl->pObjImpl->curAdaptCtx, callback);
       
   250     }
       
   251 
       
   252     XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
       
   253 
   219     DEBUG_API("<-XAPlayItfImpl_RegisterCallback");
   254     DEBUG_API("<-XAPlayItfImpl_RegisterCallback");
   220     return ret;
   255     return ret;
   221 }
   256 }
   222 
   257 
   223 /**
   258 /**
   228 {
   263 {
   229     XAresult ret = XA_RESULT_SUCCESS;
   264     XAresult ret = XA_RESULT_SUCCESS;
   230     XAPlayItfImpl* impl = GetImpl(self);
   265     XAPlayItfImpl* impl = GetImpl(self);
   231 
   266 
   232     DEBUG_API("->XAPlayItfImpl_SetCallbackEventsMask");
   267     DEBUG_API("->XAPlayItfImpl_SetCallbackEventsMask");
   233     XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
       
   234 
   268 
   235     if(!impl || ( eventFlags > (XA_PLAYEVENT_HEADATEND | XA_PLAYEVENT_HEADATMARKER |
   269     if(!impl || ( eventFlags > (XA_PLAYEVENT_HEADATEND | XA_PLAYEVENT_HEADATMARKER |
   236                   XA_PLAYEVENT_HEADATNEWPOS | XA_PLAYEVENT_HEADMOVING | XA_PLAYEVENT_HEADSTALLED) ) )
   270                   XA_PLAYEVENT_HEADATNEWPOS | XA_PLAYEVENT_HEADMOVING | XA_PLAYEVENT_HEADSTALLED) ) )
   237     {
   271     {
   238         /* invalid parameter */
   272         /* invalid parameter */
   239         XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
       
   240         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   273         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   241         DEBUG_API("<-XAPlayItfImpl_SetCallbackEventsMask");
   274         DEBUG_API("<-XAPlayItfImpl_SetCallbackEventsMask");
   242         return XA_RESULT_PARAMETER_INVALID;
   275         return XA_RESULT_PARAMETER_INVALID;
   243     }
   276     }
   244 
   277 
       
   278     XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
       
   279 
   245     impl->eventFlags = eventFlags;
   280     impl->eventFlags = eventFlags;
   246 #ifdef _GSTREAMER_BACKEND_
   281 
       
   282     if(impl->pObjImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
       
   283     {
       
   284         ret = XAPlayItfAdaptMMF_SetCallbackEventsMask(impl->pObjImpl->curAdaptCtx, eventFlags);
       
   285 
       
   286 	    XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
       
   287 	    DEBUG_API("<-XAPlayItfImpl_SetCallbackEventsMask");
       
   288 	    return ret;
       
   289     }
       
   290 
   247     /* enable position tracking if client wants so */
   291     /* enable position tracking if client wants so */
   248     if( (eventFlags & (XA_PLAYEVENT_HEADATMARKER | XA_PLAYEVENT_HEADATNEWPOS))
   292     if( (eventFlags & (XA_PLAYEVENT_HEADATMARKER | XA_PLAYEVENT_HEADATNEWPOS))
   249         &&  impl->adapCtx && !impl->positionupdateOn)
   293         &&  impl->adapCtx && !impl->positionupdateOn)
   250     {
   294         {
   251         ret = XAPlayItfAdapt_EnablePositionTracking(impl->adapCtx, XA_BOOLEAN_TRUE);
   295         ret = XAPlayItfAdapt_EnablePositionTracking((XAAdaptationGstCtx*)impl->adapCtx, XA_BOOLEAN_TRUE);
   252         if( ret == XA_RESULT_SUCCESS )
   296         if( ret == XA_RESULT_SUCCESS )
   253         {
   297         {
   254             impl->positionupdateOn = XA_BOOLEAN_TRUE;
   298             impl->positionupdateOn = XA_BOOLEAN_TRUE;
   255         }
   299         }
   256     }
   300     }
   257     else if( !(eventFlags & (XA_PLAYEVENT_HEADATMARKER | XA_PLAYEVENT_HEADATNEWPOS))
   301     else if( !(eventFlags & (XA_PLAYEVENT_HEADATMARKER | XA_PLAYEVENT_HEADATNEWPOS))
   258             &&  impl->adapCtx && impl->positionupdateOn)
   302             &&  impl->adapCtx && impl->positionupdateOn)
   259     {
   303     {
   260         ret = XAPlayItfAdapt_EnablePositionTracking(impl->adapCtx, XA_BOOLEAN_FALSE);
   304         ret = XAPlayItfAdapt_EnablePositionTracking((XAAdaptationGstCtx*)impl->adapCtx, XA_BOOLEAN_FALSE);
   261         if( ret == XA_RESULT_SUCCESS )
   305         if( ret == XA_RESULT_SUCCESS )
   262         {
   306         {
   263             impl->positionupdateOn = XA_BOOLEAN_FALSE;
   307             impl->positionupdateOn = XA_BOOLEAN_FALSE;
   264         }
   308         }
   265     }
   309     }
   266 #endif
   310 
   267     XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   311     XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   268     DEBUG_API("<-XAPlayItfImpl_SetCallbackEventsMask");
   312     DEBUG_API("<-XAPlayItfImpl_SetCallbackEventsMask");
   269     return ret;
   313     return ret;
   270 }
   314 }
   271 
   315 
   299  **/
   343  **/
   300 XAresult XAPlayItfImpl_SetMarkerPosition(XAPlayItf self, XAmillisecond mSec)
   344 XAresult XAPlayItfImpl_SetMarkerPosition(XAPlayItf self, XAmillisecond mSec)
   301 {
   345 {
   302     XAresult ret = XA_RESULT_SUCCESS;
   346     XAresult ret = XA_RESULT_SUCCESS;
   303     XAmillisecond duration = 0;
   347     XAmillisecond duration = 0;
   304     XAPlayItfImpl* impl = NULL;
   348     XAPlayItfImpl* impl = GetImpl(self);
   305 
       
   306 
   349 
   307     DEBUG_API_A1("->XAPlayItfImpl_SetMarkerPosition: %lu ms", mSec);
   350     DEBUG_API_A1("->XAPlayItfImpl_SetMarkerPosition: %lu ms", mSec);
       
   351 
   308     /* Get duration of the content */
   352     /* Get duration of the content */
   309     if(XAPlayItfImpl_GetDuration(self, &duration) != XA_RESULT_SUCCESS)
   353     if(XAPlayItfImpl_GetDuration(self, &duration) != XA_RESULT_SUCCESS)
   310     {
   354     {
   311         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   355         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   312         DEBUG_API("<-XAPlayItfImpl_SetMarkerPosition");
   356         DEBUG_API("<-XAPlayItfImpl_SetMarkerPosition");
   313         /* invalid parameter */
   357         /* invalid parameter */
   314         return XA_RESULT_PARAMETER_INVALID;
   358         return XA_RESULT_PARAMETER_INVALID;
   315     }
   359     }
   316 
   360 
   317     impl = GetImpl(self);
       
   318 
   361 
   319     if(!impl || mSec > duration)
   362     if(!impl || mSec > duration)
   320     {
   363     {
   321         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   364         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   322         DEBUG_API("<-XAPlayItfImpl_SetMarkerPosition");
   365         DEBUG_API("<-XAPlayItfImpl_SetMarkerPosition");
   323         /* invalid parameter */
   366         /* invalid parameter */
   324         return XA_RESULT_PARAMETER_INVALID;
   367         return XA_RESULT_PARAMETER_INVALID;
   325     }
   368     }
       
   369 
   326     impl->markerPosition = mSec;
   370     impl->markerPosition = mSec;
   327     impl->isMarkerPosCbSend = XA_BOOLEAN_FALSE;
   371     impl->isMarkerPosCbSend = XA_BOOLEAN_FALSE;
   328 
   372 
       
   373     XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
       
   374 
       
   375     if(impl->pObjImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
       
   376     {
       
   377         ret = XAPlayItfAdaptMMF_SetMarkerPosition(impl->pObjImpl->curAdaptCtx, mSec);
       
   378     }
       
   379 
       
   380     XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
       
   381 
   329     DEBUG_API("<-XAPlayItfImpl_SetMarkerPosition");
   382     DEBUG_API("<-XAPlayItfImpl_SetMarkerPosition");
   330     return ret;
   383     return ret;
   331 }
   384 }
   332 
   385 
   333 /**
   386 /**
   345         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   398         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   346         DEBUG_API("<-XAPlayItfImpl_ClearMarkerPosition");
   399         DEBUG_API("<-XAPlayItfImpl_ClearMarkerPosition");
   347         /* invalid parameter */
   400         /* invalid parameter */
   348         return XA_RESULT_PARAMETER_INVALID;
   401         return XA_RESULT_PARAMETER_INVALID;
   349     }
   402     }
       
   403 
   350     impl->isMarkerPosCbSend = XA_BOOLEAN_FALSE;
   404     impl->isMarkerPosCbSend = XA_BOOLEAN_FALSE;
   351     impl->markerPosition = NO_POSITION;
   405     impl->markerPosition = NO_POSITION;
       
   406 
       
   407     XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
       
   408 
       
   409     if(impl->pObjImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
       
   410     {
       
   411         ret = XAPlayItfAdaptMMF_ClearMarkerPosition(impl->pObjImpl->curAdaptCtx);
       
   412     }
       
   413 
       
   414     XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
   352 
   415 
   353     DEBUG_API("<-XAPlayItfImpl_ClearMarkerPosition");
   416     DEBUG_API("<-XAPlayItfImpl_ClearMarkerPosition");
   354     return ret;
   417     return ret;
   355 }
   418 }
   356 
   419 
   403         /* invalid parameter */
   466         /* invalid parameter */
   404         return XA_RESULT_PARAMETER_INVALID;
   467         return XA_RESULT_PARAMETER_INVALID;
   405     }
   468     }
   406     impl->positionUpdatePeriod = mSec;
   469     impl->positionUpdatePeriod = mSec;
   407 
   470 
       
   471     XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
       
   472 
       
   473     if(impl->pObjImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
       
   474     {
       
   475         ret = XAPlayItfAdaptMMF_SetPositionUpdatePeriod(impl->pObjImpl->curAdaptCtx, mSec);
       
   476     }
       
   477 
       
   478     XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
       
   479 
   408     DEBUG_API("<-XAPlayItfImpl_SetPositionUpdatePeriod");
   480     DEBUG_API("<-XAPlayItfImpl_SetPositionUpdatePeriod");
   409     return ret;
   481     return ret;
   410 }
   482 }
   411 
   483 
   412 /**
   484 /**
   440 
   512 
   441 /**
   513 /**
   442  * XAPlayItfImpl* XAPlayItfImpl_Create()
   514  * XAPlayItfImpl* XAPlayItfImpl_Create()
   443  * Description: Allocate and initialize PlayItfImpl
   515  * Description: Allocate and initialize PlayItfImpl
   444  **/
   516  **/
   445 XAPlayItfImpl* XAPlayItfImpl_Create( 
   517 XAPlayItfImpl* XAPlayItfImpl_Create( XAMediaPlayerImpl *impl )
   446 #ifdef _GSTREAMER_BACKEND_
       
   447         XAAdaptationBaseCtx *adapCtx,
       
   448 #endif        
       
   449         XAAdaptationBaseMMFCtx *adaptationCtxMMF )
       
   450 {
   518 {
   451     XAPlayItfImpl *self;
   519     XAPlayItfImpl *self;
   452 
   520 
   453     DEBUG_API("->XAPlayItfImpl_Create");
   521     DEBUG_API("->XAPlayItfImpl_Create");
   454     self = (XAPlayItfImpl*)calloc(1,sizeof(XAPlayItfImpl));
   522     self = (XAPlayItfImpl*)calloc(1,sizeof(XAPlayItfImpl));
   474         self->playbackState = XA_PLAYSTATE_STOPPED;
   542         self->playbackState = XA_PLAYSTATE_STOPPED;
   475         self->eventFlags = 0;
   543         self->eventFlags = 0;
   476         self->markerPosition = NO_POSITION;
   544         self->markerPosition = NO_POSITION;
   477         self->positionUpdatePeriod = PLAYITF_DEFAULT_UPDATE_PERIOD;
   545         self->positionUpdatePeriod = PLAYITF_DEFAULT_UPDATE_PERIOD;
   478         self->lastPosition = START_POSITION;
   546         self->lastPosition = START_POSITION;
   479 #ifdef _GSTREAMER_BACKEND_
   547         /*self->adapCtx = impl->curAdaptCtx;*/
   480         self->adapCtx = adapCtx;
   548         self->pObjImpl = impl;
   481 #endif        
       
   482         self->adaptCtxMMF = adaptationCtxMMF;
       
   483         self->cbPtrToSelf = NULL;
   549         self->cbPtrToSelf = NULL;
   484         self->isMarkerPosCbSend = XA_BOOLEAN_FALSE;
   550         self->isMarkerPosCbSend = XA_BOOLEAN_FALSE;
   485 
   551         
   486 #ifdef _GSTREAMER_BACKEND_  
   552 /*        XAAdaptationBase_AddEventHandler( self->adapCtx, &XAPlayItfImpl_AdaptCb, XA_PLAYITFEVENTS, self );*/
   487         XAAdaptationBase_AddEventHandler( adapCtx, &XAPlayItfImpl_AdaptCb, XA_PLAYITFEVENTS, self );
   553         XAAdaptationBase_AddEventHandler( self->pObjImpl->curAdaptCtx, &XAPlayItfImpl_AdaptCb, XA_PLAYITFEVENTS, self );
   488 #endif
       
   489 
   554 
   490         self->self = self;
   555         self->self = self;
   491     }
   556     }
   492 
   557 
   493     DEBUG_API("<-XAPlayItfImpl_Create");
   558     DEBUG_API("<-XAPlayItfImpl_Create");
   499  */
   564  */
   500 void XAPlayItfImpl_Free(XAPlayItfImpl* self)
   565 void XAPlayItfImpl_Free(XAPlayItfImpl* self)
   501 {
   566 {
   502     DEBUG_API("->XAPlayItfImpl_Free");
   567     DEBUG_API("->XAPlayItfImpl_Free");
   503     assert(self==self->self);
   568     assert(self==self->self);
   504 #ifdef _GSTREAMER_BACKEND_   
   569 /*    XAAdaptationBase_RemoveEventHandler( self->adapCtx, &XAPlayItfImpl_AdaptCb );*/
   505     XAAdaptationBase_RemoveEventHandler( self->adapCtx, &XAPlayItfImpl_AdaptCb );
   570     XAAdaptationBase_RemoveEventHandler( self->pObjImpl->curAdaptCtx, &XAPlayItfImpl_AdaptCb );
   506 #endif    
       
   507     free(self);
   571     free(self);
   508     DEBUG_API("<-XAPlayItfImpl_Free");
   572     DEBUG_API("<-XAPlayItfImpl_Free");
   509 }
   573 }
   510 
       
   511 #ifdef _GSTREAMER_BACKEND_  
       
   512 
   574 
   513 /* void XAPlayItfImpl_AdaptCb
   575 /* void XAPlayItfImpl_AdaptCb
   514  * Description: Listen changes in adaptation
   576  * Description: Listen changes in adaptation
   515  */
   577  */
   516 void XAPlayItfImpl_AdaptCb( void *pHandlerCtx, XAAdaptEvent *event )
   578 void XAPlayItfImpl_AdaptCb( void *pHandlerCtx, XAAdaptEvent *event )
   526         DEBUG_API("<-XAPlayItfImpl_AdaptCb");
   588         DEBUG_API("<-XAPlayItfImpl_AdaptCb");
   527         XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS( XATSMediaPlayer );
   589         XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS( XATSMediaPlayer );
   528         return;
   590         return;
   529     }
   591     }
   530     assert(event);
   592     assert(event);
       
   593 
       
   594     if(impl->pObjImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
       
   595     {
       
   596         impl->callback(impl->cbPtrToSelf, impl->cbcontext, event->eventid);
       
   597         DEBUG_API("<-XAPlayItfImpl_AdaptCb");
       
   598         XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS( XATSMediaPlayer );
       
   599         return;
       
   600     }
       
   601 
   531     /* check position update events */
   602     /* check position update events */
   532     if( event->eventid == XA_ADAPT_POSITION_UPDATE_EVT )
   603     if( event->eventid == XA_ADAPT_POSITION_UPDATE_EVT )
   533     {
   604     {
   534         assert(event->data);
   605         assert(event->data);
   535         newpos = *((XAuint32*)(event->data));
   606         newpos = *((XAuint32*)(event->data));
   590         }
   661         }
   591     }
   662     }
   592     else if( event->eventid == XA_PLAYEVENT_HEADSTALLED )
   663     else if( event->eventid == XA_PLAYEVENT_HEADSTALLED )
   593     {
   664     {
   594         impl->playbackState = XA_PLAYSTATE_PAUSED;
   665         impl->playbackState = XA_PLAYSTATE_PAUSED;
   595         XAPlayItfAdapt_GetPosition(impl->adapCtx, &(impl->lastPosition));
   666         if(impl->adapCtx->fwtype == FWMgrFWMMF)
       
   667             {
       
   668             //XAPlayItfAdaptMMF_GetPosition((XAAdaptationGstCtx*)impl->adapCtx, &(impl->lastPosition));
       
   669             }
       
   670         else
       
   671             {
       
   672             XAPlayItfAdaptGST_GetPosition((XAAdaptationGstCtx*)impl->adapCtx, &(impl->lastPosition));
       
   673             }        
   596         /* send callback if needed */
   674         /* send callback if needed */
   597         if( (XA_PLAYEVENT_HEADSTALLED & impl->eventFlags) && impl->callback )
   675         if( (XA_PLAYEVENT_HEADSTALLED & impl->eventFlags) && impl->callback )
   598         {
   676         {
   599             impl->callback(impl->cbPtrToSelf, impl->cbcontext, XA_PLAYEVENT_HEADSTALLED);
   677             impl->callback(impl->cbPtrToSelf, impl->cbcontext, XA_PLAYEVENT_HEADSTALLED);
   600         }
   678         }
   614     }
   692     }
   615 
   693 
   616     DEBUG_API("<-XAPlayItfImpl_AdaptCb");
   694     DEBUG_API("<-XAPlayItfImpl_AdaptCb");
   617     XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS( XATSMediaPlayer );
   695     XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS( XATSMediaPlayer );
   618 }
   696 }
   619 #endif
   697 
   620 
       
   621 XAresult XAPlayItfImpl_DeterminePlaybackEngine(XAPlayItf self, XADataLocator_URI *uri)
       
   622 {
       
   623 
       
   624   XAresult ret = XA_RESULT_SUCCESS;
       
   625   
       
   626   char* tempPtr = NULL;
       
   627   char extension[5];
       
   628   
       
   629   XAPlayItfImpl* impl = (XAPlayItfImpl*)(self);
       
   630   DEBUG_API("->XAPlayItfImpl_DeterminePlaybackEngine");
       
   631     
       
   632   //need to move to configuration file and add more in final class
       
   633   
       
   634   impl->isMMFPlayback = XA_BOOLEAN_TRUE;
       
   635 	
       
   636   tempPtr = strchr((char*)(uri->URI), '.');
       
   637   strcpy(extension, tempPtr);
       
   638 	
       
   639   if(!strcmp(extension, ".wav"))
       
   640   {
       
   641      impl->isMMFPlayback = XA_BOOLEAN_FALSE;
       
   642   }
       
   643 
       
   644   return ret;  
       
   645   
       
   646   DEBUG_API("<-XAPlayItfImpl_DeterminePlaybackEngine");
       
   647 }