banshee r3649 - in trunk/banshee: . libbanshee src/Backends/Banshee.GStreamer/Banshee.GStreamer src/Core/Banshee.Services/Banshee.MediaEngine src/Extensions/Banshee.AudioCd/Banshee.AudioCd
- From: abock svn gnome org
- To: svn-commits-list gnome org
- Subject: banshee r3649 - in trunk/banshee: . libbanshee src/Backends/Banshee.GStreamer/Banshee.GStreamer src/Core/Banshee.Services/Banshee.MediaEngine src/Extensions/Banshee.AudioCd/Banshee.AudioCd
- Date: Thu, 3 Apr 2008 01:36:58 +0100 (BST)
Author: abock
Date: Thu Apr 3 01:36:58 2008
New Revision: 3649
URL: http://svn.gnome.org/viewvc/banshee?rev=3649&view=rev
Log:
2008-04-02 Aaron Bockover <abock gnome org>
* libbanshee/banshee-player.c: Implement better null/pause state selection
when handling a playback stop request; always go to NULL if the caller
requests it, but override PAUSED requests with NULL if the playing
resource is not CDDA
* src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs:
* src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngine.cs:
* src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs:
Allow Close callers to force the NULL state (e.g. release all resources
forcefully so ejecting media can happen cleanly, for instance)
* src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdRipper.cs:
* src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdSource.cs:
Stubbed some more stuff out, still not working (ripping); ejecting while
playing works again
Modified:
trunk/banshee/ChangeLog
trunk/banshee/libbanshee/banshee-player.c
trunk/banshee/src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs
trunk/banshee/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngine.cs
trunk/banshee/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs
trunk/banshee/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdRipper.cs
trunk/banshee/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdSource.cs
Modified: trunk/banshee/libbanshee/banshee-player.c
==============================================================================
--- trunk/banshee/libbanshee/banshee-player.c (original)
+++ trunk/banshee/libbanshee/banshee-player.c Thu Apr 3 01:36:58 2008
@@ -113,7 +113,7 @@
g_free (player);
player = NULL;
- bp_debug ("bp: disposed player");
+ bp_debug ("bp_destroy: disposed player");
}
P_INVOKE BansheePlayer *
@@ -167,7 +167,17 @@
{
// Some times "stop" really means "pause", particularly with
// CDDA track transitioning; a NULL state will release resources
- bp_pipeline_set_state (player, nullstate ? GST_STATE_NULL : GST_STATE_PAUSED);
+ GstState state = nullstate ? GST_STATE_NULL : GST_STATE_PAUSED;
+
+ if (!nullstate && player->cdda_device == NULL) {
+ // only allow going to PAUSED if we're playing CDDA
+ state = GST_STATE_NULL;
+ }
+
+ bp_debug ("bp_stop: setting state to %s",
+ state == GST_STATE_NULL ? "GST_STATE_NULL" : "GST_STATE_PAUSED");
+
+ bp_pipeline_set_state (player, state);
}
P_INVOKE void
@@ -182,7 +192,6 @@
bp_pipeline_set_state (player, GST_STATE_PLAYING);
}
-
P_INVOKE gboolean
bp_set_position (BansheePlayer *player, guint64 time_ms)
{
Modified: trunk/banshee/src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs
==============================================================================
--- trunk/banshee/src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs (original)
+++ trunk/banshee/src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs Thu Apr 3 01:36:58 2008
@@ -123,10 +123,10 @@
bp_destroy (handle);
}
- public override void Close ()
+ public override void Close (bool fullShutdown)
{
- bp_stop (handle, false);
- base.Close ();
+ bp_stop (handle, fullShutdown);
+ base.Close (fullShutdown);
}
protected override void OpenUri (SafeUri uri)
@@ -175,7 +175,7 @@
private void OnEos (IntPtr player)
{
- Close ();
+ Close (false);
OnEventChanged (PlayerEngineEvent.EndOfStream);
}
@@ -186,7 +186,7 @@
private void OnError (IntPtr player, uint domain, int code, IntPtr error, IntPtr debug)
{
- Close ();
+ Close (true);
string error_message = error == IntPtr.Zero
? Catalog.GetString ("Unknown Error")
Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngine.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngine.cs (original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngine.cs Thu Apr 3 01:36:58 2008
@@ -59,14 +59,14 @@
OnStateChanged (idle_state);
}
- public virtual void Close ()
+ public virtual void Close (bool fullShutdown)
{
OnStateChanged (idle_state);
}
public virtual void Dispose ()
{
- Close ();
+ Close (true);
}
public void Open (TrackInfo track)
@@ -88,7 +88,7 @@
private void HandleOpen (SafeUri uri)
{
if (current_state != PlayerEngineState.Idle && current_state != PlayerEngineState.NotReady) {
- Close ();
+ Close (false);
}
try {
Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs (original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs Thu Apr 3 01:36:58 2008
@@ -347,8 +347,13 @@
public void Close ()
{
+ Close (false);
+ }
+
+ public void Close (bool fullShutdown)
+ {
active_engine.Reset ();
- active_engine.Close ();
+ active_engine.Close (fullShutdown);
}
public void Play ()
Modified: trunk/banshee/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdRipper.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdRipper.cs (original)
+++ trunk/banshee/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdRipper.cs Thu Apr 3 01:36:58 2008
@@ -58,8 +58,24 @@
}
}
+ private IAudioCdRipper ripper;
+ private AudioCdSource source;
+
public AudioCdRipper (AudioCdSource source)
{
+ if (ripper_extension_node != null) {
+ ripper = (IAudioCdRipper)ripper_extension_node.CreateInstance ();
+ } else {
+ throw new ApplicationException ("No AudioCdRipper extension is installed");
+ }
+
+ this.source = source;
+ }
+
+ public void Start ()
+ {
+ source.LockAllTracks ();
+ ripper.Begin ();
}
}
}
Modified: trunk/banshee/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdSource.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdSource.cs (original)
+++ trunk/banshee/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdSource.cs Thu Apr 3 01:36:58 2008
@@ -71,6 +71,13 @@
}
}
+ public void StopPlayingDisc ()
+ {
+ if (DiscIsPlaying) {
+ ServiceManager.PlayerEngine.Close (true);
+ }
+ }
+
public void Dispose ()
{
ClearMessages ();
@@ -137,13 +144,33 @@
private void OnImportDisc (object o, EventArgs args)
{
- Hyena.Log.Information ("This feature is not implemented yet.", true);
+ if (AudioCdRipper.Supported) {
+ AudioCdRipper ripper = new AudioCdRipper (this);
+ ripper.Start ();
+ }
}
private void OnDuplicateDisc (object o, EventArgs args)
{
Hyena.Log.Information ("This feature is not implemented yet.", true);
}
+
+ internal void LockAllTracks ()
+ {
+ StopPlayingDisc ();
+
+ foreach (AudioCdTrackInfo track in disc_model) {
+ track.CanPlay = false;
+ }
+
+ OnUpdated ();
+ }
+
+ internal void UnlockTrack (AudioCdTrackInfo track)
+ {
+ track.CanPlay = true;
+ OnUpdated ();
+ }
#region Source Overrides
@@ -210,9 +237,7 @@
public bool Unmap ()
{
- if (DiscIsPlaying) {
- ServiceManager.PlayerEngine.Close ();
- }
+ StopPlayingDisc ();
foreach (TrackInfo track in disc_model) {
track.CanPlay = false;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]