[rygel] renderer: Check player if it can do time-seek
- From: Jens Georg <jensgeorg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rygel] renderer: Check player if it can do time-seek
- Date: Thu, 6 Dec 2012 07:12:18 +0000 (UTC)
commit e6dd17a6581eb63d5fdcb1edd76b7011a36f9060
Author: Jens Georg <jensg openismus com>
Date: Sat Dec 1 22:52:38 2012 +0100
renderer: Check player if it can do time-seek
examples/renderer-plugins/C/example-player.c | 12 ++++++++++++
.../renderer-plugins/vala/example-player-vala.vala | 2 ++
.../rygel-playbin-player.vala | 7 +++++++
src/librygel-renderer/rygel-media-player.vala | 3 +++
src/librygel-renderer/rygel-player-controller.vala | 18 +++++++++++++++---
src/plugins/mpris/rygel-mpris-player.vala | 2 ++
6 files changed, 41 insertions(+), 3 deletions(-)
---
diff --git a/examples/renderer-plugins/C/example-player.c b/examples/renderer-plugins/C/example-player.c
index 25c4cfb..430fae8 100644
--- a/examples/renderer-plugins/C/example-player.c
+++ b/examples/renderer-plugins/C/example-player.c
@@ -25,6 +25,7 @@ enum {
RYGEL_EXAMPLE_PLAYER_PLAYBACK_STATE,
RYGEL_EXAMPLE_PLAYER_URI,
RYGEL_EXAMPLE_PLAYER_MIME_TYPE,
+ RYGEL_EXAMPLE_PLAYER_CAN_SEEK,
RYGEL_EXAMPLE_PLAYER_METADATA,
RYGEL_EXAMPLE_PLAYER_CONTENT_FEATURES,
RYGEL_EXAMPLE_PLAYER_VOLUME,
@@ -192,6 +193,14 @@ rygel_example_player_class_init (RygelExamplePlayerClass *klass) {
G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
g_object_class_install_property (gobject_class,
+ RYGEL_EXAMPLE_PLAYER_CAN_SEEK,
+ g_param_spec_boolean ("can-seek",
+ "can-seek",
+ "can-seek",
+ FALSE,
+ G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
+
+ g_object_class_install_property (gobject_class,
RYGEL_EXAMPLE_PLAYER_CONTENT_FEATURES,
g_param_spec_string ("content-features",
"content-features",
@@ -434,6 +443,9 @@ _rygel_example_player_get_property (GObject *object, guint property_id, GValue *
case RYGEL_EXAMPLE_PLAYER_POSITION:
g_value_set_int64 (value, rygel_media_player_get_position (base));
break;
+ case RYGEL_EXAMPLE_PLAYER_CAN_SEEK:
+ g_value_set_boolean (value, FALSE);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
diff --git a/examples/renderer-plugins/vala/example-player-vala.vala b/examples/renderer-plugins/vala/example-player-vala.vala
index 04a5a04..a79817b 100644
--- a/examples/renderer-plugins/vala/example-player-vala.vala
+++ b/examples/renderer-plugins/vala/example-player-vala.vala
@@ -99,6 +99,8 @@ public class Rygel.Example.PlayerVala : GLib.Object, Rygel.MediaPlayer {
}
}
+ public bool can_seek { get { return false; } }
+
private string _content_features = "";
public string? content_features {
owned get {
diff --git a/src/librygel-renderer-gst/rygel-playbin-player.vala b/src/librygel-renderer-gst/rygel-playbin-player.vala
index e7388fd..2616699 100644
--- a/src/librygel-renderer-gst/rygel-playbin-player.vala
+++ b/src/librygel-renderer-gst/rygel-playbin-player.vala
@@ -206,6 +206,13 @@ public class Rygel.Playbin.Player : GLib.Object, Rygel.MediaPlayer {
}
}
+ public bool can_seek {
+ get {
+ return this.transfer_mode != TRANSFER_MODE_INTERACTIVE &&
+ ! this.mime_type.has_prefix ("image/");
+ }
+ }
+
private string _content_features = "";
private ProtocolInfo protocol_info;
public string? content_features {
diff --git a/src/librygel-renderer/rygel-media-player.vala b/src/librygel-renderer/rygel-media-player.vala
index 81a0acd..68ecd0a 100644
--- a/src/librygel-renderer/rygel-media-player.vala
+++ b/src/librygel-renderer/rygel-media-player.vala
@@ -54,6 +54,9 @@ public interface Rygel.MediaPlayer : GLib.Object {
/// The mime-type of the currently-playing media
public abstract string? mime_type { owned get; set; }
+ /// The current media supports time-based seeking
+ public abstract bool can_seek { get; }
+
/**
* The contents of the contentFeatures.dlna.org HTTP header,
* containing the 4th field of the protocol info for the current
diff --git a/src/librygel-renderer/rygel-player-controller.vala b/src/librygel-renderer/rygel-player-controller.vala
index 2ac1c35..4f4be7c 100644
--- a/src/librygel-renderer/rygel-player-controller.vala
+++ b/src/librygel-renderer/rygel-player-controller.vala
@@ -77,16 +77,28 @@ internal class Rygel.PlayerController : Object {
public string current_transport_actions {
owned get {
+ string actions = null;
switch (this._playback_state) {
case "PLAYING":
case "TRANSITIONING":
- return "Stop,Seek,X_DLNA_SeekTime,Pause";
+ actions = "Stop,Seek,Pause";
+ break;
case "STOPPED":
case "PAUSED_PLAYBACK":
- return "Play,Seek,X_DLNA_SeekTime";
+ actions = "Play,Seek";
+ break;
default:
- return "";
+ break;
}
+ if (actions != null && this.player.can_seek) {
+ actions += ",X_DLNA_SeekTime";
+ }
+
+ if (actions == null) {
+ return "";
+ }
+
+ return actions;
}
}
diff --git a/src/plugins/mpris/rygel-mpris-player.vala b/src/plugins/mpris/rygel-mpris-player.vala
index 80e9569..df12c1e 100644
--- a/src/plugins/mpris/rygel-mpris-player.vala
+++ b/src/plugins/mpris/rygel-mpris-player.vala
@@ -87,6 +87,8 @@ public class Rygel.MPRIS.Player : GLib.Object, Rygel.MediaPlayer {
public string? metadata { owned get; set; }
public string? content_features { owned get; set; }
+ public bool can_seek { get { return true; } }
+
public double volume {
get {
return this.actual_player.volume;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]