[snappy] ui: increase or decrease playback speed
- From: Luis de Bethencourt <luisbg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [snappy] ui: increase or decrease playback speed
- Date: Wed, 9 Oct 2013 15:45:42 +0000 (UTC)
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]