summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel CUELLA <samuel.cuella@supinfo.com>2017-01-24 17:44:00 +0000
committerJens Georg <mail@jensge.org>2017-02-27 21:18:04 +0100
commit32cd5edd66406b5662ed56d0a479b994e1d205b2 (patch)
tree31827ffbf7dc819cda40bd66fd9136aefb2bcf16
parentff75d41f80777db8523057dfdb893b5c73edd756 (diff)
downloadrygel-32cd5edd66406b5662ed56d0a479b994e1d205b2.tar.gz
server: XMBC on XBox needs transcoding for HD
Patch modified for style and to include the other XMBC hacks https://bugzilla.gnome.org/show_bug.cgi?id=777703
-rw-r--r--src/librygel-server/filelist.am1
-rw-r--r--src/librygel-server/rygel-client-hacks.vala4
-rw-r--r--src/librygel-server/rygel-xbmc-hacks.vala4
-rw-r--r--src/librygel-server/rygel-xbmc4xbox-hacks.vala72
4 files changed, 79 insertions, 2 deletions
diff --git a/src/librygel-server/filelist.am b/src/librygel-server/filelist.am
index c1b8a27f..e360e6fe 100644
--- a/src/librygel-server/filelist.am
+++ b/src/librygel-server/filelist.am
@@ -80,6 +80,7 @@ LIBRYGEL_SERVER_NONVAPI_SOURCE_FILES = \
rygel-thumbnailer.vala \
rygel-wmp-hacks.vala \
rygel-xbmc-hacks.vala \
+ rygel-xbmc4xbox-hacks.vala \
rygel-xbox-hacks.vala \
rygel-phillips-hacks.vala \
rygel-data-sink.vala \
diff --git a/src/librygel-server/rygel-client-hacks.vala b/src/librygel-server/rygel-client-hacks.vala
index 709dd572..4bd54205 100644
--- a/src/librygel-server/rygel-client-hacks.vala
+++ b/src/librygel-server/rygel-client-hacks.vala
@@ -64,6 +64,10 @@ internal abstract class Rygel.ClientHacks : GLib.Object {
} catch (Error error) { }
try {
+ return new XBMC4XBoxHacks (message);
+ } catch (Error error) { }
+
+ try {
return new XBoxHacks (message);
} catch (Error error) { }
diff --git a/src/librygel-server/rygel-xbmc-hacks.vala b/src/librygel-server/rygel-xbmc-hacks.vala
index d167e127..e554c2bd 100644
--- a/src/librygel-server/rygel-xbmc-hacks.vala
+++ b/src/librygel-server/rygel-xbmc-hacks.vala
@@ -28,8 +28,8 @@ internal class Rygel.XBMCHacks : ClientHacks {
// promised by developers.
private const string AGENT = ".*Platinum/.*|.*XBMC/.*|.*Kodi.*";
- public XBMCHacks (Message? message = null) throws ClientHacksError {
- base (AGENT, message);
+ public XBMCHacks (Message? message = null, string? agent = null) throws ClientHacksError {
+ base (agent == null ? AGENT : agent, message);
}
public override void apply (MediaObject object) {
diff --git a/src/librygel-server/rygel-xbmc4xbox-hacks.vala b/src/librygel-server/rygel-xbmc4xbox-hacks.vala
new file mode 100644
index 00000000..a4d0d612
--- /dev/null
+++ b/src/librygel-server/rygel-xbmc4xbox-hacks.vala
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2017 Samuel CUELLA
+ *
+ * Author: Samuel CUELLA <samuel.cuella@supinfo.com>
+ * Author: Jens Georg <mail@jensge.org>
+ *
+ * This file is part of Rygel.
+ *
+ * Rygel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * Rygel is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+using Soup;
+using GUPnP;
+
+
+internal class Rygel.XBMC4XBoxHacks : XBMCHacks {
+
+ private const string AGENT = "(.*XBMC.*Xbox.*)|(Platinum/0.5.3.0)";
+
+ public XBMC4XBoxHacks (Message? message = null) throws ClientHacksError {
+ base (message, AGENT);
+ }
+
+ public override void apply (MediaObject object) {
+ base.apply (object);
+
+ Gee.List<MediaResource> resources = object.get_resource_list ();
+ MediaResource primary = resources.first ();
+
+ if (primary == null) {
+ return;
+ }
+
+ debug ("%s primary resource is %dx%d, %s. DNLA profile is %s",
+ object.title,
+ primary.width,
+ primary.height,
+ primary.extension,
+ primary.dlna_profile);
+
+ if (!(primary.width > 720 || primary.height > 480 )) {
+ return;
+ }
+
+ MediaResource? right_one = null;
+ foreach (var resource in resources) {
+ if (resource.dlna_profile == "MPEG_TS_SD_EU_ISO") {
+ right_one = resource;
+
+ break;
+ }
+ }
+
+ if (right_one != null) {
+ //Makes the right_one the first_one, that will be picked
+ // up by XBMC4XBOX
+ resources.set (0, right_one);
+ }
+ }
+}