diff options
author | Samuel CUELLA <samuel.cuella@supinfo.com> | 2017-01-24 17:44:00 +0000 |
---|---|---|
committer | Jens Georg <mail@jensge.org> | 2017-02-27 21:18:04 +0100 |
commit | 32cd5edd66406b5662ed56d0a479b994e1d205b2 (patch) | |
tree | 31827ffbf7dc819cda40bd66fd9136aefb2bcf16 | |
parent | ff75d41f80777db8523057dfdb893b5c73edd756 (diff) | |
download | rygel-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.am | 1 | ||||
-rw-r--r-- | src/librygel-server/rygel-client-hacks.vala | 4 | ||||
-rw-r--r-- | src/librygel-server/rygel-xbmc-hacks.vala | 4 | ||||
-rw-r--r-- | src/librygel-server/rygel-xbmc4xbox-hacks.vala | 72 |
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); + } + } +} |