[longomatch] Implement synchronous seeks



commit a5ec0a07921ef0ba75df1ae38c8b9be62c593fb8
Author: Andoni Morales Alastruey <ylatuya gmail com>
Date:   Fri Feb 13 17:40:19 2015 +0100

    Implement synchronous seeks

 LongoMatch.Multimedia/Player/GstPlayer.cs |   14 ++++----------
 libcesarplayer/lgm-video-player.c         |   11 +++++++----
 libcesarplayer/lgm-video-player.h         |    3 ++-
 3 files changed, 13 insertions(+), 15 deletions(-)
---
diff --git a/LongoMatch.Multimedia/Player/GstPlayer.cs b/LongoMatch.Multimedia/Player/GstPlayer.cs
index bb06027..a91a7e7 100644
--- a/LongoMatch.Multimedia/Player/GstPlayer.cs
+++ b/LongoMatch.Multimedia/Player/GstPlayer.cs
@@ -66,7 +66,7 @@ namespace LongoMatch.Video.Player
                static extern bool lgm_video_player_seek (IntPtr raw, double position);
 
                [DllImport("libcesarplayer.dll")]
-               static extern bool lgm_video_player_seek_time (IntPtr raw, long time, bool accurate);
+               static extern bool lgm_video_player_seek_time (IntPtr raw, long time, bool accurate, bool 
synchronous);
 
                [DllImport("libcesarplayer.dll")]
                static extern bool lgm_video_player_seek_to_next_frame (IntPtr raw);
@@ -434,7 +434,7 @@ namespace LongoMatch.Video.Player
 
                public bool Seek (Time time, bool accurate, bool synchronous)
                {
-                       return lgm_video_player_seek_time (Handle, time.NSeconds, accurate);
+                       return lgm_video_player_seek_time (Handle, time.NSeconds, accurate, synchronous);
                }
 
                public bool SeekToPreviousFrame ()
@@ -537,14 +537,8 @@ namespace LongoMatch.Video.Player
                        Image img = null;
                        
                        Pause ();
-                       Seek (pos, accurate, false);
-                       for (int i=0; i < 3; i++) {
-                               img = GetCurrentFrame (outwidth, outheight);
-                               if (img != null) {
-                                       break;
-                               }
-                               System.Threading.Thread.Sleep (100);
-                       }
+                       Seek (pos, accurate, true);
+                       img = GetCurrentFrame (outwidth, outheight);
                        return img;
                }
        }
diff --git a/libcesarplayer/lgm-video-player.c b/libcesarplayer/lgm-video-player.c
index e644452..99b0791 100644
--- a/libcesarplayer/lgm-video-player.c
+++ b/libcesarplayer/lgm-video-player.c
@@ -531,7 +531,7 @@ lgm_video_player_play (LgmVideoPlayer * lvp)
 
 gboolean
 lgm_video_player_seek_time (LgmVideoPlayer * lvp, gint64 time,
-    gboolean accurate)
+    gboolean accurate, gboolean synchronous)
 {
   guint32 flags;
 
@@ -548,10 +548,13 @@ lgm_video_player_seek_time (LgmVideoPlayer * lvp, gint64 time,
     flags |= GST_SEEK_FLAG_KEY_UNIT;
   }
 
-  got_time_tick (lvp->priv->play, time, lvp);
   gst_element_seek (lvp->priv->play, lvp->priv->rate,
       GST_FORMAT_TIME, flags, GST_SEEK_TYPE_SET, time,
       GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE);
+  if (synchronous) {
+    gst_element_get_state (lvp->priv->play, NULL, NULL, 5 * GST_SECOND);
+  }
+  got_time_tick (lvp->priv->play, time, lvp);
   return TRUE;
 }
 
@@ -570,7 +573,7 @@ lgm_video_player_set_rate (LgmVideoPlayer * lvp, gdouble rate)
 
   GST_DEBUG ("Setting rate to %f", rate);
   lvp->priv->rate = rate;
-  lgm_video_player_seek_time (lvp, pos, TRUE);
+  lgm_video_player_seek_time (lvp, pos, TRUE, FALSE);
 
   return TRUE;
 }
@@ -627,7 +630,7 @@ lgm_video_player_seek_to_previous_frame (LgmVideoPlayer * lvp)
   if (lgm_video_player_is_playing (lvp))
     lgm_video_player_pause (lvp);
 
-  lgm_video_player_seek_time (lvp, final_pos, TRUE);
+  lgm_video_player_seek_time (lvp, final_pos, TRUE, FALSE);
   got_time_tick (GST_ELEMENT (lvp->priv->play), pos, lvp);
   lgm_video_player_expose (lvp);
 
diff --git a/libcesarplayer/lgm-video-player.h b/libcesarplayer/lgm-video-player.h
index 9d5793b..55a0e30 100644
--- a/libcesarplayer/lgm-video-player.h
+++ b/libcesarplayer/lgm-video-player.h
@@ -91,7 +91,8 @@ EXPORT gboolean lgm_video_player_is_seekable              (LgmVideoPlayer * lvp)
 
 EXPORT gboolean lgm_video_player_seek_time                (LgmVideoPlayer * lvp,
                                                            gint64 time,
-                                                           gboolean accurate);
+                                                           gboolean accurate,
+                                                           gboolean synchronous);
 
 EXPORT gboolean lgm_video_player_seek_to_next_frame       (LgmVideoPlayer * lvp);
 


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