[longomatch] Implement synchronous seeks
- From: Andoni Morales Alastruey <amorales src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [longomatch] Implement synchronous seeks
- Date: Fri, 13 Feb 2015 16:40:54 +0000 (UTC)
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]