[totem] backend: Simplify setting the playback direction



commit 8f3aa112b4fda273392dc2fe64dfea31212e2445
Author: Bastien Nocera <hadess hadess net>
Date:   Thu Aug 22 02:49:11 2013 +0200

    backend: Simplify setting the playback direction

 src/backend/bacon-video-widget.c |   57 ++++++++++++--------------------------
 1 files changed, 18 insertions(+), 39 deletions(-)
---
diff --git a/src/backend/bacon-video-widget.c b/src/backend/bacon-video-widget.c
index fc59b19..6499cfd 100644
--- a/src/backend/bacon-video-widget.c
+++ b/src/backend/bacon-video-widget.c
@@ -110,6 +110,7 @@
 #define SEEK_TIMEOUT NANOSECS_IN_SEC / 10
 #define FORWARD_RATE 1.0
 #define REVERSE_RATE -1.0
+#define DIRECTION_STR (forward == FALSE ? "reverse" : "forward")
 
 #define is_error(e, d, c) \
   (e->domain == GST_##d##_ERROR && \
@@ -5952,54 +5953,32 @@ bvw_set_playback_direction (BaconVideoWidget *bvw, gboolean forward)
 {
   gboolean is_forward;
   gboolean retval;
+  float target_rate;
+  GstEvent *event;
+  gint64 cur = 0;
 
   is_forward = (bvw->priv->rate > 0.0);
   if (forward == is_forward)
     return TRUE;
 
   retval = FALSE;
+  target_rate = (forward ? FORWARD_RATE : REVERSE_RATE);
 
-  if (forward == FALSE) {
-    GstEvent *event;
-    gint64 cur = 0;
-
-    if (gst_element_query_position (bvw->priv->play, GST_FORMAT_TIME, &cur)) {
-      GST_DEBUG ("Setting playback direction to reverse at %"G_GINT64_FORMAT"", cur);
-      event = gst_event_new_seek (REVERSE_RATE,
-                                 GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE,
-                                 GST_SEEK_TYPE_SET, G_GINT64_CONSTANT (0),
-                                 GST_SEEK_TYPE_SET, cur);
-      if (gst_element_send_event (bvw->priv->play, event) == FALSE) {
-       GST_WARNING ("Failed to set playback direction to reverse");
-      } else {
-       gst_element_get_state (bvw->priv->play, NULL, NULL, GST_CLOCK_TIME_NONE);
-       bvw->priv->rate = REVERSE_RATE;
-       retval = TRUE;
-      }
+  if (gst_element_query_position (bvw->priv->play, GST_FORMAT_TIME, &cur)) {
+    GST_DEBUG ("Setting playback direction to %s at %"G_GINT64_FORMAT"", DIRECTION_STR, cur);
+    event = gst_event_new_seek (target_rate,
+                               GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE,
+                               GST_SEEK_TYPE_SET, forward ? cur : G_GINT64_CONSTANT (0),
+                               GST_SEEK_TYPE_SET, forward ? G_GINT64_CONSTANT (0) : cur);
+    if (gst_element_send_event (bvw->priv->play, event) == FALSE) {
+      GST_WARNING ("Failed to set playback direction to %s", DIRECTION_STR);
     } else {
-      GST_LOG ("Failed to query position to set playback to reverse");
+      gst_element_get_state (bvw->priv->play, NULL, NULL, GST_CLOCK_TIME_NONE);
+      bvw->priv->rate = target_rate;
+      retval = TRUE;
     }
   } else {
-    GstEvent *event;
-    gint64 cur = 0;
-
-    cur = 0;
-    if (gst_element_query_position (bvw->priv->play, GST_FORMAT_TIME, &cur)) {
-      GST_DEBUG ("Setting playback direction to forward at %"G_GINT64_FORMAT"", cur);
-      event = gst_event_new_seek (FORWARD_RATE,
-                                 GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE,
-                                 GST_SEEK_TYPE_SET, cur,
-                                 GST_SEEK_TYPE_SET, G_GINT64_CONSTANT (0));
-      if (gst_element_send_event (bvw->priv->play, event) == FALSE) {
-       GST_WARNING ("Failed to set playback direction to forward");
-      } else {
-       gst_element_get_state (bvw->priv->play, NULL, NULL, GST_CLOCK_TIME_NONE);
-       bvw->priv->rate = FORWARD_RATE;
-       retval = TRUE;
-      }
-    } else {
-      GST_LOG ("Failed to query position to set playback to forward");
-    }
+    GST_LOG ("Failed to query position to set playback to %s", DIRECTION_STR);
   }
 
   return retval;


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