[snappy] ui: increase or decrease playback speed



commit 424784d29ae4de19e4cc7766e708c8e94292aeaa
Author: Luis de Bethencourt <luis debethencourt com>
Date:   Wed Oct 9 11:45:33 2013 -0400

    ui: increase or decrease playback speed

 docs/keyboard_controls |    3 +++
 src/gst_engine.c       |   15 ++++++++++-----
 src/user_interface.c   |   19 +++++++++++++------
 3 files changed, 26 insertions(+), 11 deletions(-)
---
diff --git a/docs/keyboard_controls b/docs/keyboard_controls
index fbf456e..bddd3be 100644
--- a/docs/keyboard_controls
+++ b/docs/keyboard_controls
@@ -33,3 +33,6 @@ r          - rotate video
 
 .          - frame step foward
 ,          - frame step backwards
+
+[          - decrease speed of playback 10%
+]          - increase speed of playback 10%
\ No newline at end of file
diff --git a/src/gst_engine.c b/src/gst_engine.c
index 4b67a49..36421e0 100644
--- a/src/gst_engine.c
+++ b/src/gst_engine.c
@@ -740,6 +740,7 @@ engine_init (GstEngine * engine, GstElement * sink)
   engine->media_height = 400;
   engine->media_duration = -1;
   engine->second = GST_SECOND;
+  engine->rate = 1.0;
 
   engine->uri = NULL;
 
@@ -769,7 +770,7 @@ engine_init (GstEngine * engine, GstElement * sink)
 
 /*              Change playback rate             */
 gboolean
-engine_change_speed (GstEngine *engine, gdouble rate)
+engine_change_speed (GstEngine * engine, gdouble rate)
 {
   gint64 pos;
   GstFormat fmt = GST_FORMAT_TIME;
@@ -778,14 +779,18 @@ engine_change_speed (GstEngine *engine, gdouble rate)
 
   /* Obtain the current position, needed for the seek event */
   if (!gst_element_query_position (engine->player, fmt, &pos)) {
-      g_printerr ("Unable to retrieve current position.\n");
-      return FALSE;
+    g_printerr ("Unable to retrieve current position.\n");
+    return FALSE;
   }
 
-  seek_event = gst_event_new_seek (rate, fmt, GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE,
-      GST_SEEK_TYPE_SET, pos, GST_SEEK_TYPE_NONE, 0);
+  seek_event =
+      gst_event_new_seek (rate, fmt,
+      GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE, GST_SEEK_TYPE_SET, pos,
+      GST_SEEK_TYPE_NONE, 0);
   gst_element_send_event (engine->player, seek_event);
 
+  engine->rate = rate;
+
   return TRUE;
 }
 
diff --git a/src/user_interface.c b/src/user_interface.c
index bb05c42..c49b66d 100644
--- a/src/user_interface.c
+++ b/src/user_interface.c
@@ -446,14 +446,21 @@ event_cb (ClutterStage * stage, ClutterEvent * event, UserInterface * ui)
           break;
         }
 
+        case CLUTTER_KEY_bracketleft:
         case CLUTTER_KEY_bracketright:
-       {
-         // change playback speed
-         engine_change_speed(ui->engine, 1.2);
+        {
+          // get current rate
+          gdouble rate = ui->engine->rate;
+
+          // change playback speed
+          if (keyval == CLUTTER_KEY_bracketleft)
+            engine_change_speed (ui->engine, rate - 0.1);
+          else
+            engine_change_speed (ui->engine, rate + 0.1);
 
-         handled = TRUE;
-         break;
-       }
+          handled = TRUE;
+          break;
+        }
 
         case CLUTTER_less:
         {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]