[banshee] GStreamerSharp: Properly handle GStreamer errors (bgo#643407)
- From: Gabriel Burt <gburt src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [banshee] GStreamerSharp: Properly handle GStreamer errors (bgo#643407)
- Date: Sun, 27 Feb 2011 20:39:16 +0000 (UTC)
commit be43b91996c7f5c8f5c265e7016b15d9dcf33f3e
Author: Pete Johanson <peter peterjohanson com>
Date: Sun Feb 27 06:50:35 2011 -0500
GStreamerSharp: Properly handle GStreamer errors (bgo#643407)
Signed-off-by: Gabriel Burt <gabriel burt gmail com>
.../Banshee.GStreamerSharp/PlayerEngine.cs | 63 +++++++++++++++++++-
1 files changed, 62 insertions(+), 1 deletions(-)
---
diff --git a/src/Backends/Banshee.GStreamerSharp/Banshee.GStreamerSharp/PlayerEngine.cs b/src/Backends/Banshee.GStreamerSharp/Banshee.GStreamerSharp/PlayerEngine.cs
index dd05eb1..f9d3574 100644
--- a/src/Backends/Banshee.GStreamerSharp/Banshee.GStreamerSharp/PlayerEngine.cs
+++ b/src/Backends/Banshee.GStreamerSharp/Banshee.GStreamerSharp/PlayerEngine.cs
@@ -126,7 +126,9 @@ namespace Banshee.GStreamerSharp
Enum error_type;
string err_msg, debug;
msg.ParseError (out error_type, out err_msg, out debug);
- Log.Error (err_msg, debug);
+
+ HandleError (error_type, err_msg, debug);
+
break;
}
@@ -138,6 +140,59 @@ namespace Banshee.GStreamerSharp
OnEventChanged (PlayerEvent.Volume);
}
+ private void HandleError (Enum domain, string error_message, string debug)
+ {
+ Close (true);
+
+ error_message = error_message ?? Catalog.GetString ("Unknown Error");
+
+ if (domain is ResourceError) {
+ ResourceError domain_code = (ResourceError)domain;
+ if (CurrentTrack != null) {
+ switch (domain_code) {
+ case ResourceError.NotFound:
+ CurrentTrack.SavePlaybackError (StreamPlaybackError.ResourceNotFound);
+ break;
+ default:
+ break;
+ }
+ }
+ Log.Error (String.Format ("GStreamer resource error: {0}", domain_code), false);
+ } else if (domain is StreamError) {
+ StreamError domain_code = (StreamError)domain;
+ if (CurrentTrack != null) {
+ switch (domain_code) {
+ case StreamError.CodecNotFound:
+ CurrentTrack.SavePlaybackError (StreamPlaybackError.CodecNotFound);
+ break;
+ default:
+ break;
+ }
+ }
+
+ Log.Error (String.Format ("GStreamer stream error: {0}", domain_code), false);
+ } else if (domain is CoreError) {
+ CoreError domain_code = (CoreError)domain;
+ if (CurrentTrack != null) {
+ switch (domain_code) {
+ case CoreError.MissingPlugin:
+ CurrentTrack.SavePlaybackError (StreamPlaybackError.CodecNotFound);
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (domain_code != CoreError.MissingPlugin) {
+ Log.Error (String.Format ("GStreamer core error: {0}", (CoreError)domain), false);
+ }
+ } else if (domain is LibraryError) {
+ Log.Error (String.Format ("GStreamer library error: {0}", (LibraryError)domain), false);
+ }
+
+ OnEventChanged (new PlayerEventErrorArgs (error_message));
+ }
+
private void HandleBuffering (int buffer_percent)
{
OnEventChanged (new PlayerEventBufferingArgs (buffer_percent / 100.0));
@@ -228,6 +283,12 @@ namespace Banshee.GStreamerSharp
OnStateChanged (PlayerState.Paused);
}
+ public override void Close (bool fullShutdown)
+ {
+ pipeline.SetState (State.Null);
+ base.Close (fullShutdown);
+ }
+
public override string GetSubtitleDescription (int index)
{
return playbin.GetTextTags (index)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]