[snappy] change audio/video offset
- From: Luis de Bethencourt <luisbg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [snappy] change audio/video offset
- Date: Wed, 19 Mar 2014 21:15:39 +0000 (UTC)
commit 7dcd57bee5c900d28e6a662464b34fb28b6f4581
Author: Luis de Bethencourt <luis debethencourt com>
Date: Wed Mar 19 17:15:33 2014 -0400
change audio/video offset
docs/keyboard_controls | 3 +++
src/gst_engine.c | 11 +++++++++++
src/gst_engine.h | 2 ++
src/user_interface.c | 17 +++++++++++++++++
4 files changed, 33 insertions(+), 0 deletions(-)
---
diff --git a/docs/keyboard_controls b/docs/keyboard_controls
index ee45099..d3e62c2 100644
--- a/docs/keyboard_controls
+++ b/docs/keyboard_controls
@@ -34,6 +34,9 @@ r - rotate video
. - frame step foward
, - frame step backwards
+- - delay audio 50 milliseconds with respect to the video
++ - advance the audio 50 milliseconds with respect to the video
+
[ - decrease speed of playback 10%
] - increase speed of playback 10%
diff --git a/src/gst_engine.c b/src/gst_engine.c
index a1ac53b..beac1ea 100644
--- a/src/gst_engine.c
+++ b/src/gst_engine.c
@@ -741,6 +741,7 @@ engine_init (GstEngine * engine, GstElement * sink)
engine->media_height = 400;
engine->media_duration = -1;
engine->second = GST_SECOND;
+ engine->av_offset = 0;
engine->rate = 1.0;
engine->uri = NULL;
@@ -771,6 +772,16 @@ engine_init (GstEngine * engine, GstElement * sink)
return TRUE;
}
+/* Change audio/video offset */
+gboolean
+engine_change_offset (GstEngine * engine, gint64 av_offset)
+{
+ engine->av_offset = av_offset;
+ g_object_set (G_OBJECT (engine->player), "av-offset", av_offset, NULL);
+
+ return TRUE;
+}
+
/* Change playback rate */
gboolean
engine_change_speed (GstEngine * engine, gdouble rate)
diff --git a/src/gst_engine.h b/src/gst_engine.h
index 49ef3f0..671a86c 100644
--- a/src/gst_engine.h
+++ b/src/gst_engine.h
@@ -44,6 +44,7 @@ struct _GstEngine
guint media_width, media_height;
gint64 media_duration;
gint64 second;
+ gint64 av_offset;
gdouble rate;
gchar *uri;
@@ -64,6 +65,7 @@ gboolean change_state (GstEngine * engine, gchar * state);
gboolean check_missing_plugins_error (GstEngine * engine, GstMessage * msg);
gboolean cycle_streams (GstEngine * engine, guint streamid);
gboolean engine_init (GstEngine * engine, GstElement * sink);
+gboolean engine_change_offset (GstEngine * engine, gint64 av_offest);
gboolean engine_change_speed (GstEngine * engine, gdouble rate);
void engine_load_uri (GstEngine * engine, gchar * uri);
void engine_open_uri (GstEngine * engine, gchar * uri);
diff --git a/src/user_interface.c b/src/user_interface.c
index d61c5c0..20138af 100644
--- a/src/user_interface.c
+++ b/src/user_interface.c
@@ -491,6 +491,23 @@ event_cb (ClutterStage * stage, ClutterEvent * event, UserInterface * ui)
break;
}
+ case CLUTTER_minus:
+ case CLUTTER_plus:
+ {
+ // get current av_offset
+ gint64 av_offset = ui->engine->av_offset;
+
+ // change a/v offset
+ if (keyval == CLUTTER_minus) {
+ engine_change_offset (ui->engine, av_offset - (GST_SECOND / 20));
+ } else {
+ engine_change_offset (ui->engine, av_offset + (GST_SECOND / 20));
+ }
+
+ handled = TRUE;
+ break;
+ }
+
default:
{
handled = FALSE;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]