[longomatch] Handle more nicely segments updates
- From: Andoni Morales Alastruey <amorales src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [longomatch] Handle more nicely segments updates
- Date: Mon, 7 Jul 2014 11:21:55 +0000 (UTC)
commit 146484d3b96350b83d3115ba5ce2e08ad0c0b811
Author: Andoni Morales Alastruey <ylatuya gmail com>
Date: Tue May 20 17:01:05 2014 +0200
Handle more nicely segments updates
LongoMatch.Core/Interfaces/GUI/IPlayerBin.cs | 2 +-
LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs | 70 +++++++++++++------
LongoMatch.GUI.Multimedia/Gui/PlayerCapturerBin.cs | 4 +-
.../gtk-gui/LongoMatch.Gui.PlayerBin.cs | 11 ---
LongoMatch.GUI.Multimedia/gtk-gui/gui.stetic | 11 ---
LongoMatch.Services/Services/EventsManager.cs | 46 +++++++------
6 files changed, 76 insertions(+), 68 deletions(-)
---
diff --git a/LongoMatch.Core/Interfaces/GUI/IPlayerBin.cs b/LongoMatch.Core/Interfaces/GUI/IPlayerBin.cs
index a28fad8..edc7255 100644
--- a/LongoMatch.Core/Interfaces/GUI/IPlayerBin.cs
+++ b/LongoMatch.Core/Interfaces/GUI/IPlayerBin.cs
@@ -55,7 +55,7 @@ namespace LongoMatch.Interfaces.GUI
void StepBackward();
void FramerateUp();
void FramerateDown();
- void LoadPlay (string fileName, Play play);
+ void LoadPlay (string fileName, Play play, Time seekTime, bool playing);
void LoadPlayListPlay (PlayListPlay play, bool hasNext);
void CloseSegment();
}
diff --git a/LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs b/LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs
index 7a3e846..5f5fb23 100644
--- a/LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs
+++ b/LongoMatch.GUI.Multimedia/Gui/PlayerBin.cs
@@ -67,7 +67,7 @@ namespace LongoMatch.Gui
string filename;
double previousVLevel = 1;
double[] seeksQueue;
- object[] pendingSeek; //{start,stop,rate}
+ object[] pendingSeek; //{seekTime, rate, playing}
protected VolumeWindow vwin;
Seeker seeker;
Segment segment;
@@ -78,7 +78,7 @@ namespace LongoMatch.Gui
{
this.Build();
vwin = new VolumeWindow();
- vwin.VolumeChanged += new VolumeChangedHandler(OnVolumeChanged);
+ ConnectSignals ();
tickHandler = new TickHandler(OnTick);
controlsbox.Visible = false;
UnSensitive();
@@ -206,13 +206,14 @@ namespace LongoMatch.Gui
else
nextbutton.Sensitive = false;
- LoadSegment (play.MediaFile.FilePath, play.Start, play.Stop, play.Rate);
+ LoadSegment (play.MediaFile.FilePath, play.Start, play.Stop,
+ play.Start, true, play.Rate);
}
- public void LoadPlay (string filename, Play play) {
- LoadSegment (filename, play.Start, play.Stop, play.Rate);
+ public void LoadPlay (string filename, Play play, Time seekTime, bool playing) {
+ LoadSegment (filename, play.Start, play.Stop, seekTime, playing, play.Rate);
}
-
+
public void Close() {
player.Close();
filename = null;
@@ -305,10 +306,27 @@ namespace LongoMatch.Gui
}
}
- void LoadSegment (string filename, Time start, Time stop, float rate = 1) {
- Log.Debug (String.Format ("Loading player segment {0} {1} {2} {3}",
- filename, start, stop, rate));
- Open (filename, false);
+ void ConnectSignals () {
+ vwin.VolumeChanged += new VolumeChangedHandler(OnVolumeChanged);
+ closebutton.Clicked += OnClosebuttonClicked;
+ prevbutton.Clicked += OnPrevbuttonClicked;
+ nextbutton.Clicked += OnNextbuttonClicked;
+ playbutton.Clicked += OnPlaybuttonClicked;
+ pausebutton.Clicked += OnPausebuttonClicked;
+ drawbutton.Clicked += OnDrawButtonClicked;
+ timescale.ValueChanged += OnTimescaleValueChanged;
+ timescale.AdjustBounds += OnTimescaleAdjustBounds;
+ }
+
+ void LoadSegment (string filename, Time start, Time stop, Time seekTime,
+ bool playing, float rate = 1) {
+ Log.Debug (String.Format ("Update player segment {0} {1} {2}",
+ start.ToMSecondsString(),
+ stop.ToMSecondsString(), rate));
+ if (filename != this.filename) {
+ Open (filename, false);
+ }
+ player.Pause();
segment.Start = start;
segment.Stop = stop;
rate = rate == 0 ? 1 : rate;
@@ -318,11 +336,13 @@ namespace LongoMatch.Gui
start.ToMSecondsString());
SetScaleValue ((int) (rate * SCALE_FPS));
player.Rate = (double) rate;
- player.Seek (start, true);
- player.Play ();
+ player.Seek (seekTime, true);
+ if (playing) {
+ player.Play ();
+ }
} else {
Log.Debug ("Delaying seek until player is ready");
- pendingSeek = new object[3] {start, stop, rate};
+ pendingSeek = new object[3] {seekTime, rate, playing};
}
}
@@ -415,9 +435,11 @@ namespace LongoMatch.Gui
void OnReadyToSeek() {
readyToSeek = true;
if(pendingSeek != null) {
- player.Rate = (float) pendingSeek [2];
+ player.Rate = (float) pendingSeek [1];
player.Seek ((Time)pendingSeek[0], true);
- player.Play();
+ if ((bool)pendingSeek[2]) {
+ player.Play();
+ }
pendingSeek = null;
}
}
@@ -430,20 +452,24 @@ namespace LongoMatch.Gui
}
if (SegmentLoaded) {
- Time duration = segment.Stop - segment.Start;
+ Time dur, ct;
+ double cp;
+
+ dur = segment.Stop - segment.Start;
if (currentTime > segment.Stop) {
player.Pause ();
}
- currentTime -= segment.Start;
- currentPosition = (float)currentTime.MSeconds/(float)(duration.MSeconds);
- slength = duration.ToMSecondsString();
-
+ ct = currentTime - segment.Start;
+ cp = (float)ct.MSeconds/(float)(dur.MSeconds);
+ slength = dur.ToMSecondsString();
+ timelabel.Text = ct.ToMSecondsString() + "/" + slength;
+ timescale.Value = cp;
} else {
slength = length.ToMSecondsString ();
+ timelabel.Text = currentTime.ToMSecondsString() + "/" + slength;
+ timescale.Value = currentPosition;
}
- timelabel.Text = currentTime.ToMSecondsString() + "/" + slength;
- timescale.Value = currentPosition;
if (Tick != null)
Tick (currentTime, streamLength, currentPosition);
diff --git a/LongoMatch.GUI.Multimedia/Gui/PlayerCapturerBin.cs
b/LongoMatch.GUI.Multimedia/Gui/PlayerCapturerBin.cs
index e35fa10..11ba7a1 100644
--- a/LongoMatch.GUI.Multimedia/Gui/PlayerCapturerBin.cs
+++ b/LongoMatch.GUI.Multimedia/Gui/PlayerCapturerBin.cs
@@ -211,13 +211,13 @@ namespace LongoMatch.Gui
playerbin.LoadPlayListPlay (play, hasNext);
}
- public void LoadPlay (string filename, Play play) {
+ public void LoadPlay (string filename, Play play, Time seekTime, bool playing) {
if (mode == PlayerOperationMode.PreviewCapturer) {
backtolivebutton.Visible = true;
ShowPlayer ();
LoadBackgroundPlayer(filename);
}
- playerbin.LoadPlay (filename, play);
+ playerbin.LoadPlay (filename, play, seekTime, playing);
}
public void Seek (Time time, bool accurate) {
diff --git a/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.PlayerBin.cs
b/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.PlayerBin.cs
index 3aec695..0d3d932 100644
--- a/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.PlayerBin.cs
+++ b/LongoMatch.GUI.Multimedia/gtk-gui/LongoMatch.Gui.PlayerBin.cs
@@ -386,17 +386,6 @@ namespace LongoMatch.Gui
this.nextbutton.Hide ();
this.controlsbox.Hide ();
this.Show ();
- this.vscale1.FormatValue += new global::Gtk.FormatValueHandler
(this.OnVscale1FormatValue);
- this.vscale1.ValueChanged += new global::System.EventHandler
(this.OnVscale1ValueChanged);
- this.closebutton.Clicked += new global::System.EventHandler
(this.OnClosebuttonClicked);
- this.drawbutton.Clicked += new global::System.EventHandler (this.OnDrawButtonClicked);
- this.playbutton.Clicked += new global::System.EventHandler (this.OnPlaybuttonClicked);
- this.pausebutton.Clicked += new global::System.EventHandler
(this.OnPausebuttonClicked);
- this.prevbutton.Clicked += new global::System.EventHandler (this.OnPrevbuttonClicked);
- this.nextbutton.Clicked += new global::System.EventHandler (this.OnNextbuttonClicked);
- this.timescale.ValueChanged += new global::System.EventHandler
(this.OnTimescaleValueChanged);
- this.timescale.AdjustBounds += new global::Gtk.AdjustBoundsHandler
(this.OnTimescaleAdjustBounds);
- this.volumebutton.Clicked += new global::System.EventHandler
(this.OnVolumebuttonClicked);
}
}
}
diff --git a/LongoMatch.GUI.Multimedia/gtk-gui/gui.stetic b/LongoMatch.GUI.Multimedia/gtk-gui/gui.stetic
index 9f2d562..ba98ed3 100644
--- a/LongoMatch.GUI.Multimedia/gtk-gui/gui.stetic
+++ b/LongoMatch.GUI.Multimedia/gtk-gui/gui.stetic
@@ -152,8 +152,6 @@
<property name="DrawValue">True</property>
<property name="Digits">0</property>
<property name="ValuePos">Bottom</property>
- <signal name="FormatValue" handler="OnVscale1FormatValue" />
- <signal name="ValueChanged" handler="OnVscale1ValueChanged" />
</widget>
<packing>
<property name="Position">0</property>
@@ -191,7 +189,6 @@
<property name="Icon">stock:gtk-close Dnd</property>
<property name="Label" translatable="yes" />
<property name="UseUnderline">True</property>
- <signal name="Clicked" handler="OnClosebuttonClicked" />
</widget>
<packing>
<property name="Position">0</property>
@@ -208,7 +205,6 @@
<property name="Label" translatable="yes" />
<property name="UseUnderline">True</property>
<property name="Relief">None</property>
- <signal name="Clicked" handler="OnDrawButtonClicked" />
</widget>
<packing>
<property name="Position">1</property>
@@ -225,7 +221,6 @@
<property name="Label" translatable="yes" />
<property name="UseUnderline">True</property>
<property name="Relief">None</property>
- <signal name="Clicked" handler="OnPlaybuttonClicked" />
</widget>
<packing>
<property name="Position">2</property>
@@ -242,7 +237,6 @@
<property name="Label" translatable="yes" />
<property name="UseUnderline">True</property>
<property name="Relief">None</property>
- <signal name="Clicked" handler="OnPausebuttonClicked" />
</widget>
<packing>
<property name="Position">3</property>
@@ -260,7 +254,6 @@
<property name="Label" translatable="yes" />
<property name="UseUnderline">True</property>
<property name="Relief">None</property>
- <signal name="Clicked" handler="OnPrevbuttonClicked" />
</widget>
<packing>
<property name="Position">4</property>
@@ -279,7 +272,6 @@
<property name="Label" translatable="yes" />
<property name="UseUnderline">True</property>
<property name="Relief">None</property>
- <signal name="Clicked" handler="OnNextbuttonClicked" />
</widget>
<packing>
<property name="Position">5</property>
@@ -362,8 +354,6 @@
<property name="DrawValue">False</property>
<property name="Digits">0</property>
<property name="ValuePos">Top</property>
- <signal name="ValueChanged" handler="OnTimescaleValueChanged" />
- <signal name="AdjustBounds" handler="OnTimescaleAdjustBounds" />
</widget>
<packing>
<property name="Position">3</property>
@@ -388,7 +378,6 @@
<property name="Label" translatable="yes" />
<property name="UseUnderline">True</property>
<property name="Relief">None</property>
- <signal name="Clicked" handler="OnVolumebuttonClicked" />
</widget>
<packing>
<property name="Position">5</property>
diff --git a/LongoMatch.Services/Services/EventsManager.cs b/LongoMatch.Services/Services/EventsManager.cs
index 69c2464..b8504e7 100644
--- a/LongoMatch.Services/Services/EventsManager.cs
+++ b/LongoMatch.Services/Services/EventsManager.cs
@@ -35,7 +35,7 @@ namespace LongoMatch.Services
public class EventsManager
{
/* Current play loaded. null if no play is loaded */
- TimeNode selectedTimeNode=null;
+ TimeNode loadedPlay=null;
/* current project in use */
Project openedProject;
ProjectType projectType;
@@ -101,7 +101,7 @@ namespace LongoMatch.Services
analysisWindow.DuplicatePlay += OnDuplicatePlay;
/* Connect playlist events */
- analysisWindow.PlayListNodeSelectedEvent += (tn) => {selectedTimeNode = tn;};
+ analysisWindow.PlayListNodeSelectedEvent += (tn) => {loadedPlay = tn;};
/* Connect tags events */
analysisWindow.TagPlayEvent += OnTagPlay;
@@ -157,6 +157,16 @@ namespace LongoMatch.Services
}
+ void LoadPlay (Play play, Time seekTime, bool playing) {
+ player.LoadPlay (openedProject.Description.File.FilePath, play,
+ seekTime, playing);
+ analysisWindow.UpdateSelectedPlay(play);
+ loadedPlay = play;
+ if (playing) {
+ player.Play ();
+ }
+ }
+
private void ProcessNewTag(Category category,Time pos) {
Time length, startTime, stopTime, start, stop, fStart, fStop;
@@ -223,13 +233,13 @@ namespace LongoMatch.Services
}
}
- protected virtual void OnNewTagAtPos (Category category, Time pos) {
+ void OnNewTagAtPos (Category category, Time pos) {
player.CloseSegment();
player.Seek (pos, true);
ProcessNewTag(category,pos);
}
- public virtual void OnNewTag(Category category) {
+ public void OnNewTag(Category category) {
Time pos;
if(projectType == ProjectType.FakeCaptureProject ||
@@ -242,13 +252,13 @@ namespace LongoMatch.Services
ProcessNewTag(category,pos);
}
- public virtual void OnNewPlayStart (Category category) {
+ void OnNewPlayStart (Category category) {
Time startTime = player.CurrentTime;
catsTime.Add (category, startTime);
Log.Debug("New play start time: " + startTime);
}
- public virtual void OnNewPlayStop(Category category) {
+ void OnNewPlayStop(Category category) {
int diff;
Time startTime, stopTime;
@@ -278,14 +288,14 @@ namespace LongoMatch.Services
AddNewPlay(startTime, stopTime, category);
}
- public virtual void OnNewPlayCancel (Category category) {
+ void OnNewPlayCancel (Category category) {
try {
catsTime.Remove (category);
} catch {
}
}
- private void LaunchPlayTagger(Play play, bool showAllTags) {
+ void LaunchPlayTagger(Play play, bool showAllTags) {
guiToolkit.TagPlay(play, openedProject.Categories,
openedProject.LocalTeamTemplate,
openedProject.VisitorTeamTemplate,
@@ -294,27 +304,21 @@ namespace LongoMatch.Services
void HandlePlaybackRateChanged (float rate)
{
- if (selectedTimeNode != null) {
- selectedTimeNode.Rate = rate;
+ if (loadedPlay != null) {
+ loadedPlay.Rate = rate;
}
}
- protected virtual void OnPlaySelected(Play play)
+ void OnPlaySelected(Play play)
{
- Log.Debug("Play selected: " + play);
- selectedTimeNode = play;
- player.LoadPlay (openedProject.Description.File.FilePath, play);
- analysisWindow.UpdateSelectedPlay(play);
+ LoadPlay (play, play.Start, true);
}
protected virtual void OnTimeNodeChanged(TimeNode tNode, object val)
{
/* FIXME: Tricky, create a new handler for categories */
if(tNode is Play && val is Time) {
- if(tNode != selectedTimeNode)
- OnPlaySelected((Play)tNode);
- Time pos = (Time)val;
- player.Seek (pos, true);
+ LoadPlay (tNode as Play, val as Time, false);
}
else if(tNode is Category) {
analysisWindow.UpdateCategories();
@@ -347,7 +351,7 @@ namespace LongoMatch.Services
protected virtual void OnSegmentClosedEvent()
{
- selectedTimeNode = null;
+ loadedPlay = null;
}
protected virtual void OnSnapshotSeries(Play play) {
@@ -368,7 +372,7 @@ namespace LongoMatch.Services
Image pixbuf = null;
player.Pause();
pixbuf = player.CurrentFrame;
- guiToolkit.DrawingTool (pixbuf, selectedTimeNode as Play, time);
+ guiToolkit.DrawingTool (pixbuf, loadedPlay as Play, time);
}
protected virtual void OnTagPlay(Play play) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]