[rygel] server: XMBC on XBox needs transcoding for HD



commit 32cd5edd66406b5662ed56d0a479b994e1d205b2
Author: Samuel CUELLA <samuel cuella supinfo com>
Date:   Tue Jan 24 17:44:00 2017 +0000

    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

 src/librygel-server/filelist.am                |    1 +
 src/librygel-server/rygel-client-hacks.vala    |    4 +
 src/librygel-server/rygel-xbmc-hacks.vala      |    4 +-
 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 c1b8a27..e360e6f 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 709dd57..4bd5420 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 d167e12..e554c2b 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 0000000..a4d0d61
--- /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);
+        }
+    }
+}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]