khronosfws/openmax_al/src/mediaplayer/xaplayitf.c
changeset 16 43d09473c595
parent 12 5a06f39ad45b
child 21 2ed61feeead6
child 31 8dfd592727cb
--- a/khronosfws/openmax_al/src/mediaplayer/xaplayitf.c	Mon May 03 12:59:52 2010 +0300
+++ b/khronosfws/openmax_al/src/mediaplayer/xaplayitf.c	Fri May 14 16:22:35 2010 +0300
@@ -20,9 +20,9 @@
 #include <assert.h>
 
 #include "xaplayitf.h"
-#ifdef _GSTREAMER_BACKEND_  
-#include "XAPlayItfAdaptation.h"
-#endif
+
+#include "xaplayitfadaptation.h"
+
 #include "xaplayitfadaptationmmf.h"
 #include "xathreadsafety.h"
 #include <string.h>
@@ -58,46 +58,43 @@
     XAresult ret = XA_RESULT_SUCCESS;
     XAPlayItfImpl* impl = GetImpl(self);
     DEBUG_API_A1("->XAPlayItfImpl_SetPlayState %s",PLAYSTATENAME(state));
-    XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
 
     if( !impl || state < XA_PLAYSTATE_STOPPED || state > XA_PLAYSTATE_PLAYING )
     {
         /* invalid parameter */
-        XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
         DEBUG_API("<-XAPlayItfImpl_SetPlayState");
         return XA_RESULT_PARAMETER_INVALID;
     }
 
-    /* check is play state changed, if not do nothing */
-    if(state != impl->playbackState)
+    XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
+
+    if(impl->pObjImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
     {
-        if(state == XA_PLAYSTATE_PLAYING)
-        {
-#ifdef _GSTREAMER_BACKEND_
-        XAPlayItfAdapt_GetPosition(impl->adapCtx, &(impl->lastPosition));
-#endif        
-        }
-        if(impl->isMMFPlayback)
-        {
-           ret = XAPlayItfAdaptMMF_SetPlayState(impl->adaptCtxMMF, state);    
-        }
-        else
-        {
-#ifdef _GSTREAMER_BACKEND_
-        ret = XAPlayItfAdapt_SetPlayState(impl->adapCtx, state);
-#endif        
-        }
+        ret = XAPlayItfAdaptMMF_SetPlayState(impl->pObjImpl->curAdaptCtx, state);
+        XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
+        DEBUG_API("<-XAPlayItfImpl_SetPlayState");
+        return ret;		    
+    }
 
-        if(ret == XA_RESULT_SUCCESS)
-        {
-            impl->playbackState = state;
-            if(state == XA_PLAYSTATE_STOPPED || state == XA_PLAYSTATE_PAUSED)
-            {
-                impl->isMarkerPosCbSend = XA_BOOLEAN_FALSE;
-                impl->lastPosition = 0;
-            }
-        }
+	/* check is play state changed, if not do nothing */
+    if(state != impl->playbackState)
+	{
+    	if(state == XA_PLAYSTATE_PLAYING)
+    	{
+        	XAPlayItfAdaptGST_GetPosition((XAAdaptationGstCtx*)impl->adapCtx, &(impl->lastPosition));
+    	}
+		ret = XAPlayItfAdaptGST_SetPlayState(impl->adapCtx, state);
+
+		if(ret == XA_RESULT_SUCCESS)
+		    {
+		    impl->playbackState = state;
+		    if(state == XA_PLAYSTATE_STOPPED || state == XA_PLAYSTATE_PAUSED)
+		        {
+		        impl->isMarkerPosCbSend = XA_BOOLEAN_FALSE;
+		        impl->lastPosition = 0;
+		        }
+		    }
     }
 
     XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
@@ -113,6 +110,7 @@
 {
     XAresult ret = XA_RESULT_SUCCESS;
     XAPlayItfImpl* impl = GetImpl(self);
+
     DEBUG_API("->XAPlayItfImpl_GetPlayState");
 
     if(!impl || !pState)
@@ -123,7 +121,18 @@
         return XA_RESULT_PARAMETER_INVALID;
     }
 
-    *pState = impl->playbackState;
+    XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
+
+    if(impl->pObjImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
+    {
+        ret = XAPlayItfAdaptMMF_GetPlayState(impl->pObjImpl->curAdaptCtx, pState);    
+    }
+    else
+    {
+        *pState = impl->playbackState;
+    }
+
+    XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
 
     DEBUG_API_A1("<-XAPlayItfImpl_GetPlayState: %s",PLAYSTATENAME(impl->playbackState));
     return ret;
@@ -138,20 +147,28 @@
     XAresult ret = XA_RESULT_SUCCESS;
     XAPlayItfImpl* impl = GetImpl(self);
     DEBUG_API("->XAPlayItfImpl_GetDuration");
-    XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
 
     if(!impl || !pMsec)
     {
         /* invalid parameter */
-        XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
         DEBUG_API("<-XAPlayItfImpl_GetDuration");
         return XA_RESULT_PARAMETER_INVALID;
     }
-#ifdef _GSTREAMER_BACKEND_
-    ret = XAPlayItfAdapt_GetDuration(impl->adapCtx, pMsec);
-#endif
+
+    XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
+
+    if(impl->pObjImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
+    {
+        ret = XAPlayItfAdaptMMF_GetDuration(impl->pObjImpl->curAdaptCtx, pMsec);
+    }
+    else
+    {
+        ret = XAPlayItfAdaptGST_GetDuration((XAAdaptationGstCtx*)impl->adapCtx, pMsec);
+    }
+    
     XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
+
     DEBUG_API("<-XAPlayItfImpl_GetDuration");
     return ret;
 }
@@ -165,27 +182,36 @@
 {
     XAresult ret = XA_RESULT_SUCCESS;
     XAPlayItfImpl* impl = GetImpl(self);
+ 
     DEBUG_API("->XAPlayItfImpl_GetPosition");
-    XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
+
     if(!impl || !pMsec)
     {
         /* invalid parameter */
-        XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
         DEBUG_API("<-XAPlayItfImpl_GetPosition");
         return XA_RESULT_PARAMETER_INVALID;
     }
 
-    if ( impl->playbackState == XA_PLAYSTATE_STOPPED )
+    XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
+
+    if(impl->pObjImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
+    {
+        ret = XAPlayItfAdaptMMF_GetPosition(impl->pObjImpl->curAdaptCtx, pMsec);
+    }
+    else
     {
-    	*pMsec = 0;
-    	DEBUG_API("<-XAPlayItfImpl_GetPosition");
-      XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );    	
-    	return XA_RESULT_SUCCESS;
-    }
-#ifdef _GSTREAMER_BACKEND_
-    ret = XAPlayItfAdapt_GetPosition(impl->adapCtx, pMsec);
-#endif
+
+        if ( impl->playbackState == XA_PLAYSTATE_STOPPED )
+        {
+    	    *pMsec = 0;
+    	    DEBUG_API("<-XAPlayItfImpl_GetPosition");
+            XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );    	
+    	    return XA_RESULT_SUCCESS;
+        }
+        ret = XAPlayItfAdaptGST_GetPosition((XAAdaptationGstCtx*)impl->adapCtx, pMsec);
+	}
+
     XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
     DEBUG_API("<-XAPlayItfImpl_GetPosition");
     return ret;
@@ -216,6 +242,15 @@
     impl->cbcontext = pContext;
     impl->cbPtrToSelf = self;
 
+    XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
+
+    if(impl->pObjImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
+    {
+        ret = XAPlayItfAdaptMMF_RegisterCallback(impl->pObjImpl->curAdaptCtx, callback);
+    }
+
+    XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
+
     DEBUG_API("<-XAPlayItfImpl_RegisterCallback");
     return ret;
 }
@@ -230,25 +265,34 @@
     XAPlayItfImpl* impl = GetImpl(self);
 
     DEBUG_API("->XAPlayItfImpl_SetCallbackEventsMask");
-    XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
 
     if(!impl || ( eventFlags > (XA_PLAYEVENT_HEADATEND | XA_PLAYEVENT_HEADATMARKER |
                   XA_PLAYEVENT_HEADATNEWPOS | XA_PLAYEVENT_HEADMOVING | XA_PLAYEVENT_HEADSTALLED) ) )
     {
         /* invalid parameter */
-        XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
         DEBUG_API("<-XAPlayItfImpl_SetCallbackEventsMask");
         return XA_RESULT_PARAMETER_INVALID;
     }
 
+    XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
+
     impl->eventFlags = eventFlags;
-#ifdef _GSTREAMER_BACKEND_
+
+    if(impl->pObjImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
+    {
+        ret = XAPlayItfAdaptMMF_SetCallbackEventsMask(impl->pObjImpl->curAdaptCtx, eventFlags);
+
+	    XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
+	    DEBUG_API("<-XAPlayItfImpl_SetCallbackEventsMask");
+	    return ret;
+    }
+
     /* enable position tracking if client wants so */
     if( (eventFlags & (XA_PLAYEVENT_HEADATMARKER | XA_PLAYEVENT_HEADATNEWPOS))
         &&  impl->adapCtx && !impl->positionupdateOn)
-    {
-        ret = XAPlayItfAdapt_EnablePositionTracking(impl->adapCtx, XA_BOOLEAN_TRUE);
+        {
+        ret = XAPlayItfAdapt_EnablePositionTracking((XAAdaptationGstCtx*)impl->adapCtx, XA_BOOLEAN_TRUE);
         if( ret == XA_RESULT_SUCCESS )
         {
             impl->positionupdateOn = XA_BOOLEAN_TRUE;
@@ -257,13 +301,13 @@
     else if( !(eventFlags & (XA_PLAYEVENT_HEADATMARKER | XA_PLAYEVENT_HEADATNEWPOS))
             &&  impl->adapCtx && impl->positionupdateOn)
     {
-        ret = XAPlayItfAdapt_EnablePositionTracking(impl->adapCtx, XA_BOOLEAN_FALSE);
+        ret = XAPlayItfAdapt_EnablePositionTracking((XAAdaptationGstCtx*)impl->adapCtx, XA_BOOLEAN_FALSE);
         if( ret == XA_RESULT_SUCCESS )
         {
             impl->positionupdateOn = XA_BOOLEAN_FALSE;
         }
     }
-#endif
+
     XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
     DEBUG_API("<-XAPlayItfImpl_SetCallbackEventsMask");
     return ret;
@@ -301,10 +345,10 @@
 {
     XAresult ret = XA_RESULT_SUCCESS;
     XAmillisecond duration = 0;
-    XAPlayItfImpl* impl = NULL;
-
+    XAPlayItfImpl* impl = GetImpl(self);
 
     DEBUG_API_A1("->XAPlayItfImpl_SetMarkerPosition: %lu ms", mSec);
+
     /* Get duration of the content */
     if(XAPlayItfImpl_GetDuration(self, &duration) != XA_RESULT_SUCCESS)
     {
@@ -314,7 +358,6 @@
         return XA_RESULT_PARAMETER_INVALID;
     }
 
-    impl = GetImpl(self);
 
     if(!impl || mSec > duration)
     {
@@ -323,9 +366,19 @@
         /* invalid parameter */
         return XA_RESULT_PARAMETER_INVALID;
     }
+
     impl->markerPosition = mSec;
     impl->isMarkerPosCbSend = XA_BOOLEAN_FALSE;
 
+    XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
+
+    if(impl->pObjImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
+    {
+        ret = XAPlayItfAdaptMMF_SetMarkerPosition(impl->pObjImpl->curAdaptCtx, mSec);
+    }
+
+    XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
+
     DEBUG_API("<-XAPlayItfImpl_SetMarkerPosition");
     return ret;
 }
@@ -347,9 +400,19 @@
         /* invalid parameter */
         return XA_RESULT_PARAMETER_INVALID;
     }
+
     impl->isMarkerPosCbSend = XA_BOOLEAN_FALSE;
     impl->markerPosition = NO_POSITION;
 
+    XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
+
+    if(impl->pObjImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
+    {
+        ret = XAPlayItfAdaptMMF_ClearMarkerPosition(impl->pObjImpl->curAdaptCtx);
+    }
+
+    XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
+
     DEBUG_API("<-XAPlayItfImpl_ClearMarkerPosition");
     return ret;
 }
@@ -405,6 +468,15 @@
     }
     impl->positionUpdatePeriod = mSec;
 
+    XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
+
+    if(impl->pObjImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
+    {
+        ret = XAPlayItfAdaptMMF_SetPositionUpdatePeriod(impl->pObjImpl->curAdaptCtx, mSec);
+    }
+
+    XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
+
     DEBUG_API("<-XAPlayItfImpl_SetPositionUpdatePeriod");
     return ret;
 }
@@ -442,11 +514,7 @@
  * XAPlayItfImpl* XAPlayItfImpl_Create()
  * Description: Allocate and initialize PlayItfImpl
  **/
-XAPlayItfImpl* XAPlayItfImpl_Create( 
-#ifdef _GSTREAMER_BACKEND_
-        XAAdaptationBaseCtx *adapCtx,
-#endif        
-        XAAdaptationBaseMMFCtx *adaptationCtxMMF )
+XAPlayItfImpl* XAPlayItfImpl_Create( XAMediaPlayerImpl *impl )
 {
     XAPlayItfImpl *self;
 
@@ -476,16 +544,13 @@
         self->markerPosition = NO_POSITION;
         self->positionUpdatePeriod = PLAYITF_DEFAULT_UPDATE_PERIOD;
         self->lastPosition = START_POSITION;
-#ifdef _GSTREAMER_BACKEND_
-        self->adapCtx = adapCtx;
-#endif        
-        self->adaptCtxMMF = adaptationCtxMMF;
+        /*self->adapCtx = impl->curAdaptCtx;*/
+        self->pObjImpl = impl;
         self->cbPtrToSelf = NULL;
         self->isMarkerPosCbSend = XA_BOOLEAN_FALSE;
-
-#ifdef _GSTREAMER_BACKEND_  
-        XAAdaptationBase_AddEventHandler( adapCtx, &XAPlayItfImpl_AdaptCb, XA_PLAYITFEVENTS, self );
-#endif
+        
+/*        XAAdaptationBase_AddEventHandler( self->adapCtx, &XAPlayItfImpl_AdaptCb, XA_PLAYITFEVENTS, self );*/
+        XAAdaptationBase_AddEventHandler( self->pObjImpl->curAdaptCtx, &XAPlayItfImpl_AdaptCb, XA_PLAYITFEVENTS, self );
 
         self->self = self;
     }
@@ -501,15 +566,12 @@
 {
     DEBUG_API("->XAPlayItfImpl_Free");
     assert(self==self->self);
-#ifdef _GSTREAMER_BACKEND_   
-    XAAdaptationBase_RemoveEventHandler( self->adapCtx, &XAPlayItfImpl_AdaptCb );
-#endif    
+/*    XAAdaptationBase_RemoveEventHandler( self->adapCtx, &XAPlayItfImpl_AdaptCb );*/
+    XAAdaptationBase_RemoveEventHandler( self->pObjImpl->curAdaptCtx, &XAPlayItfImpl_AdaptCb );
     free(self);
     DEBUG_API("<-XAPlayItfImpl_Free");
 }
 
-#ifdef _GSTREAMER_BACKEND_  
-
 /* void XAPlayItfImpl_AdaptCb
  * Description: Listen changes in adaptation
  */
@@ -528,6 +590,15 @@
         return;
     }
     assert(event);
+
+    if(impl->pObjImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
+    {
+        impl->callback(impl->cbPtrToSelf, impl->cbcontext, event->eventid);
+        DEBUG_API("<-XAPlayItfImpl_AdaptCb");
+        XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS( XATSMediaPlayer );
+        return;
+    }
+
     /* check position update events */
     if( event->eventid == XA_ADAPT_POSITION_UPDATE_EVT )
     {
@@ -592,7 +663,14 @@
     else if( event->eventid == XA_PLAYEVENT_HEADSTALLED )
     {
         impl->playbackState = XA_PLAYSTATE_PAUSED;
-        XAPlayItfAdapt_GetPosition(impl->adapCtx, &(impl->lastPosition));
+        if(impl->adapCtx->fwtype == FWMgrFWMMF)
+            {
+            //XAPlayItfAdaptMMF_GetPosition((XAAdaptationGstCtx*)impl->adapCtx, &(impl->lastPosition));
+            }
+        else
+            {
+            XAPlayItfAdaptGST_GetPosition((XAAdaptationGstCtx*)impl->adapCtx, &(impl->lastPosition));
+            }        
         /* send callback if needed */
         if( (XA_PLAYEVENT_HEADSTALLED & impl->eventFlags) && impl->callback )
         {
@@ -616,32 +694,4 @@
     DEBUG_API("<-XAPlayItfImpl_AdaptCb");
     XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS( XATSMediaPlayer );
 }
-#endif
 
-XAresult XAPlayItfImpl_DeterminePlaybackEngine(XAPlayItf self, XADataLocator_URI *uri)
-{
-
-  XAresult ret = XA_RESULT_SUCCESS;
-  
-  char* tempPtr = NULL;
-  char extension[5];
-  
-  XAPlayItfImpl* impl = (XAPlayItfImpl*)(self);
-  DEBUG_API("->XAPlayItfImpl_DeterminePlaybackEngine");
-    
-  //need to move to configuration file and add more in final class
-  
-  impl->isMMFPlayback = XA_BOOLEAN_TRUE;
-	
-  tempPtr = strchr((char*)(uri->URI), '.');
-  strcpy(extension, tempPtr);
-	
-  if(!strcmp(extension, ".wav"))
-  {
-     impl->isMMFPlayback = XA_BOOLEAN_FALSE;
-  }
-
-  return ret;  
-  
-  DEBUG_API("<-XAPlayItfImpl_DeterminePlaybackEngine");
-}