khronosfws/openmax_al/src/mmf_adaptation/cmmfbackendengine.cpp
changeset 32 94fc26b6e006
parent 31 8dfd592727cb
child 47 c2e43643db4c
--- a/khronosfws/openmax_al/src/mmf_adaptation/cmmfbackendengine.cpp	Wed Jun 23 18:47:10 2010 +0300
+++ b/khronosfws/openmax_al/src/mmf_adaptation/cmmfbackendengine.cpp	Tue Jul 06 14:50:35 2010 +0300
@@ -23,6 +23,7 @@
 #include "markerpositiontimer.h"
 #include "positionupdatetimer.h"
 #include "profileutilmacro.h"
+#include <mmf/common/mmfvideoenums.h>
 
 extern "C"
     {
@@ -1617,6 +1618,68 @@
     return retVal;
     }
 
+XAresult CMMFBackendEngine::SetPlaybackRate(XAint16 rate)
+    {
+    XAresult retVal(XA_RESULT_INTERNAL_ERROR);
+
+    switch (iMediaPlayerState)
+        {
+        case XA_PLAYSTATE_STOPPED:
+        case XA_PLAYSTATE_PAUSED:
+        case XA_PLAYSTATE_PLAYING:
+            if (iAPIBeingUsed == EAudioPlayerUtility)
+                {
+                retVal = XA_RESULT_FEATURE_UNSUPPORTED;
+                }
+            else
+                {
+                TRAPD(err, iVideoPlayer->SetPlayVelocityL(rate));
+                if(!err)
+                    {
+                    retVal = XA_RESULT_SUCCESS; 
+                    }
+                }
+            break;
+        case XA_PLAYSTATE_PLAYERUNINITIALIZED:
+        default:
+            break;
+        }
+    return retVal;
+    }
+
+XAresult CMMFBackendEngine::GetPlaybackRateCapabilities(XAboolean* forward,
+                                                        XAboolean* backward)
+    {
+    XAresult retVal(XA_RESULT_PARAMETER_INVALID);
+    
+    switch (iMediaPlayerState)
+        {
+        case XA_PLAYSTATE_STOPPED:
+        case XA_PLAYSTATE_PAUSED:
+        case XA_PLAYSTATE_PLAYING:
+            if (iAPIBeingUsed == EAudioPlayerUtility)
+                {
+                retVal = XA_RESULT_FEATURE_UNSUPPORTED;
+                }
+            else
+                {
+                TVideoPlayRateCapabilities capability;
+                TRAPD(err, iVideoPlayer->GetPlayRateCapabilitiesL(capability));
+                if(!err)
+                    {
+                    *forward = capability.iPlayForward;
+                    *backward = capability.iPlayBackward;
+                    retVal = XA_RESULT_SUCCESS; 
+                    }
+                }
+            break;
+        case XA_PLAYSTATE_PLAYERUNINITIALIZED:
+        default:
+            break;
+        }
+    return retVal;
+    }
+
 extern "C"
     {
 
@@ -1854,4 +1917,14 @@
         {
         return ((CMMFBackendEngine *) (context))->GetVolume(volume);
         }
+
+    XAresult mmf_playbackrateitf_set_playbackrate(void * context, XAint16 rate)
+        {
+        return ((CMMFBackendEngine *) (context))->SetPlaybackRate(rate);
+        }
+
+    XAresult mmf_playbackrateitf_get_playbackratecaps(void * context, XAboolean* forward, XAboolean* backward)
+        {
+        return ((CMMFBackendEngine *) (context))->GetPlaybackRateCapabilities(forward,backward);
+        }
     }