khronosfws/openmax_al/src/mmf_adaptation/xaplayitfadaptationmmf.c
changeset 16 43d09473c595
parent 12 5a06f39ad45b
child 21 2ed61feeead6
child 31 8dfd592727cb
--- a/khronosfws/openmax_al/src/mmf_adaptation/xaplayitfadaptationmmf.c	Mon May 03 12:59:52 2010 +0300
+++ b/khronosfws/openmax_al/src/mmf_adaptation/xaplayitfadaptationmmf.c	Fri May 14 16:22:35 2010 +0300
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description: 
+* Description:
 *
 */
 
@@ -28,43 +28,34 @@
 gboolean XAPlayItfAdapt_PositionUpdate(gpointer ctx);
 
 /*
- * XAresult XAPlayItfAdapt_SetPlayState(XAAdaptationBaseCtx *bCtx, XAuint32 state)
+ * XAresult XAPlayItfAdaptMMF_SetPlayState(XAAdaptationBaseCtx *bCtx, XAuint32 state)
  * Sets play state to GStreamer.
  * @param XAAdaptationBaseCtx *bCtx - Adaptation context, this will be casted to correct type regarding to contextID
  * XAuint32 state - Play state to be set
  * @return XAresult ret - Success value
  */
-XAresult XAPlayItfAdaptMMF_SetPlayState(XAAdaptationBaseMMFCtx *bCtx, XAuint32 state)
+XAresult XAPlayItfAdaptMMF_SetPlayState(XAAdaptationBaseCtx *bCtx, XAuint32 state)
 {
     XAresult ret = XA_RESULT_SUCCESS;
-    
-    XAMediaPlayerAdaptationMMFCtx* mCtx = NULL;
-
-
-    
-    DEBUG_API_A1("->XAPlayItfAdapt_SetPlayState %s",PLAYSTATENAME(state));
+    XAMediaPlayerAdaptationMMFCtx* mCtx = (XAMediaPlayerAdaptationMMFCtx*) bCtx;
 
-    if(!bCtx)
-    {
-        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
-        return XA_RESULT_PARAMETER_INVALID;
-    }
+    DEBUG_API_A1("->XAPlayItfAdaptMMF_SetPlayState %s",PLAYSTATENAME(state));
 
-    mCtx = (XAMediaPlayerAdaptationMMFCtx*) bCtx;
+    /* bCtx and parameter pointer validation happens in the calling function.
+     * We don't need to repeat it here*/
     switch ( state )
     {
         case XA_PLAYSTATE_STOPPED:
         {
-            mmf_stop_playback(mCtx->mmfContext);
-            mmf_close(mCtx->mmfContext);
+            ret = mmf_playitf_stop_playback(mCtx->mmfContext);
             break;
         }
         case XA_PLAYSTATE_PAUSED:
-            mmf_pause_playback(mCtx->mmfContext);
+            ret = mmf_playitf_pause_playback(mCtx->mmfContext);
             break;
         case XA_PLAYSTATE_PLAYING:
         {
-            mmf_resume_playback(mCtx->mmfContext);
+            ret = mmf_playitf_resume_playback(mCtx->mmfContext);
             break;
         }
         default:
@@ -72,72 +63,151 @@
             break;
     }
 
-   DEBUG_API("<-XAPlayItfAdapt_SetPlayState");
+    DEBUG_API("<-XAPlayItfAdaptMMF_SetPlayState");
     return ret;
 }
 
 /*
- * XAresult XAPlayItfAdapt_GetDuration(XAAdaptationBaseCtx *bCtx, XAmillisecond *pMsec)
+ * XAresult XAPlayItfAdaptMMF_GetPlayState(XAAdaptationBaseCtx *bCtx, XAuint32 *pState)
+ * @param XAAdaptationBaseCtx *bCtx - Adaptation context, this will be casted to correct type regarding to contextID
+ * XAuint32 *state - XAmillisecond *pMsec - Pointer where to store play state
+ * @return XAresult ret - Success value
+ */
+XAresult XAPlayItfAdaptMMF_GetPlayState(XAAdaptationBaseCtx *bCtx, XAuint32 *pState)
+    {
+    XAresult ret = XA_RESULT_SUCCESS;
+    XAMediaPlayerAdaptationMMFCtx* mCtx = (XAMediaPlayerAdaptationMMFCtx*) bCtx;
+
+    DEBUG_API("->XAPlayItfAdaptMMF_GetPlayState");
+
+    /* If playhead reaches eof, state will transition to paused.
+     * This object does not have visibility to callback*/
+    ret = mmf_playitf_get_play_state(mCtx->mmfContext, pState);
+
+    DEBUG_API("<-XAPlayItfAdaptMMF_GetPlayState");
+    return ret;
+
+    }
+
+/*
+ * XAresult XAPlayItfAdaptMMF_GetDuration(XAAdaptationBaseCtx *bCtx, XAmillisecond *pMsec)
  * @param XAAdaptationBaseCtx *bCtx - Adaptation context, this will be casted to correct type regarding to contextID
  * XAmillisecond *pMsec - Pointer where to store duration of stream.
  * @return XAresult ret - Success value
  */
-XAresult XAPlayItfAdaptMMF_GetDuration(XAAdaptationBaseMMFCtx *bCtx, XAmillisecond *pMsec)
+XAresult XAPlayItfAdaptMMF_GetDuration(XAAdaptationBaseCtx *bCtx, XAmillisecond *pMsec)
 {
     XAresult ret = XA_RESULT_SUCCESS;
+    XAMediaPlayerAdaptationMMFCtx* mCtx = (XAMediaPlayerAdaptationMMFCtx*) bCtx;
 
-    DEBUG_API("->XAPlayItfAdapt_GetDuration");
+    DEBUG_API("->XAPlayItfAdaptMMF_GetDuration");
 
-    if(!bCtx)
-    {
-        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
-        /* invalid parameter */
-        return XA_RESULT_PARAMETER_INVALID;
-    }
+    ret = mmf_playitf_get_duration(mCtx->mmfContext, pMsec);
 
-
-    DEBUG_API("<-XAPlayItfAdapt_GetDuration");
+    DEBUG_API("<-XAPlayItfAdaptMMF_GetDuration");
     return ret;
 }
 
 /*
- * XAresult XAPlayItfAdapt_GetPosition(XAAdaptationBaseCtx *bCtx, XAmillisecond *pMsec)
+ * XAresult XAPlayItfAdaptMMF_GetPosition(XAAdaptationBaseCtx *bCtx, XAmillisecond *pMsec)
  * @param XAAdaptationBaseCtx *bCtx - Adaptation context, this will be casted to correct type regarding to contextID value
  * XAmillisecond *pMsec - Pointer where to store current position in stream.
  * @return XAresult ret - Success value
  */
-XAresult XAPlayItfAdaptMMF_GetPosition(XAAdaptationBaseMMFCtx *bCtx, XAmillisecond *pMsec)
+XAresult XAPlayItfAdaptMMF_GetPosition(XAAdaptationBaseCtx *bCtx, XAmillisecond *pMsec)
 {
     XAresult ret = XA_RESULT_SUCCESS;
-    
-    DEBUG_API("->XAPlayItfAdapt_GetPosition");
+    XAMediaPlayerAdaptationMMFCtx* mCtx = (XAMediaPlayerAdaptationMMFCtx*) bCtx;
+
+    DEBUG_API("->XAPlayItfAdaptMMF_GetPosition");
 
-    if(!bCtx)
-    {
-        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
-        /* invalid parameter */
-        return XA_RESULT_PARAMETER_INVALID;
-    }
-    
-    DEBUG_API("<-XAPlayItfAdapt_GetPosition");
+    ret = mmf_playitf_get_position(mCtx->mmfContext, pMsec);
+
+    DEBUG_API("<-XAPlayItfAdaptMMF_GetPosition");
     return ret;
 }
 
 /*
- * XAresult XAPlayItfAdapt_EnablePositionTracking
- * Enable/disable periodic position tracking callbacks
+ * XAresult XAPlayItfAdaptMMF_RegisterCallback(XAAdaptationBaseCtx *bCtx, xaPlayCallback callback)
+ * Description: Sets the playback callback function.
  */
-XAresult XAPlayItfAdaptMMF_EnablePositionTracking(XAAdaptationBaseMMFCtx *bCtx, XAboolean enable)
+XAresult XAPlayItfAdaptMMF_RegisterCallback(XAAdaptationBaseCtx *bCtx, xaPlayCallback callback)
 {
-    DEBUG_API_A1("->XAPlayItfAdapt_EnablePositionTracking (enable: %d)", (int)enable);
-    if(!bCtx)
-    {
-        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
-        /* invalid parameter */
-        return XA_RESULT_PARAMETER_INVALID;
-    }
+    XAresult ret = XA_RESULT_SUCCESS;
+    XAMediaPlayerAdaptationMMFCtx* mCtx = (XAMediaPlayerAdaptationMMFCtx*) bCtx;
+
+    DEBUG_API("->XAPlayItfAdaptMMF_RegisterCallback");
+
+    ret = mmf_playitf_register_callback(mCtx->mmfContext, callback);
+
+    DEBUG_API("<-XAPlayItfAdaptMMF_RegisterCallback");
+    return ret;
+}
 
-    DEBUG_API("<-XAPlayItfAdapt_EnablePositionTracking");
-    return XA_RESULT_SUCCESS;
+/**
+ * XAresult XAPlayItfAdaptMMF_SetCallbackEventsMask(XAAdaptationBaseCtx *bCtx, XAuint32 eventFlags)
+ * Description: Enables/disables notification of playback events.
+ **/
+XAresult XAPlayItfAdaptMMF_SetCallbackEventsMask(XAAdaptationBaseCtx *bCtx, XAuint32 eventFlags)
+{
+    XAresult ret = XA_RESULT_SUCCESS;
+    XAMediaPlayerAdaptationMMFCtx* mCtx = (XAMediaPlayerAdaptationMMFCtx*) bCtx;
+
+    DEBUG_API("->XAPlayItfAdaptMMF_SetCallbackEventsMask");
+
+    ret = mmf_playitf_set_callback_events_mask(mCtx->mmfContext, eventFlags);
+
+    DEBUG_API("<-XAPlayItfAdaptMMF_SetCallbackEventsMask");
+    return ret;
 }
 
+/**
+ * XAresult XAPlayItfAdaptMMF_SetMarkerPosition(XAAdaptationBaseCtx *bCtx, XAmillisecond mSec)
+ * Description: Sets marker position.
+ **/
+XAresult XAPlayItfAdaptMMF_SetMarkerPosition(XAAdaptationBaseCtx *bCtx, XAmillisecond mSec)
+{
+    XAresult ret = XA_RESULT_SUCCESS;
+    XAMediaPlayerAdaptationMMFCtx* mCtx = (XAMediaPlayerAdaptationMMFCtx*) bCtx;
+
+    DEBUG_API("->XAPlayItfAdaptMMF_SetMarkerPosition");
+
+    ret = mmf_playitf_set_marker_position(mCtx->mmfContext, mSec);
+
+    DEBUG_API("<-XAPlayItfAdaptMMF_SetMarkerPosition");
+    return ret;
+}
+
+/**
+ * XAresult XAPlayItfAdaptMMF_SetCallbackEventsMask(XAAdaptationBaseCtx *bCtx, XAuint32 eventFlags)
+ * Description: Clears marker position.
+ **/
+XAresult XAPlayItfAdaptMMF_ClearMarkerPosition(XAAdaptationBaseCtx *bCtx)
+{
+    XAresult ret = XA_RESULT_SUCCESS;
+    XAMediaPlayerAdaptationMMFCtx* mCtx = (XAMediaPlayerAdaptationMMFCtx*) bCtx;
+
+    DEBUG_API("->XAPlayItfAdaptMMF_ClearMarkerPosition");
+
+    ret = mmf_playitf_clear_marker_position(mCtx->mmfContext);
+
+    DEBUG_API("<-XAPlayItfAdaptMMF_ClearMarkerPosition");
+    return ret;
+}
+
+/**
+ * XAPlayItfAdaptMMF_SetPositionUpdatePeriod(XAAdaptationBaseCtx *bCtx, XAmillisecond mSec)
+ * Description: Sets position update period.
+ **/
+XAresult XAPlayItfAdaptMMF_SetPositionUpdatePeriod(XAAdaptationBaseCtx *bCtx, XAmillisecond mSec)
+{
+    XAresult ret = XA_RESULT_SUCCESS;
+    XAMediaPlayerAdaptationMMFCtx* mCtx = (XAMediaPlayerAdaptationMMFCtx*) bCtx;
+
+    DEBUG_API("->XAPlayItfAdaptMMF_SetPositionUpdatePeriod");
+
+    ret = mmf_playitf_set_position_update_period(mCtx->mmfContext, mSec);
+
+    DEBUG_API("<-XAPlayItfAdaptMMF_SetPositionUpdatePeriod");
+    return ret;
+}