[snappy] change audio/video offset



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]