summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Georg <mail@jensge.org>2015-05-14 19:23:46 +0200
committerJens Georg <mail@jensge.org>2015-05-14 19:29:12 +0200
commit74e8d8ad6f25af3287d660923579195eaa56e12c (patch)
tree92f42c3c9814945eaf98e1ad6c33ad9e2f0fcd03
parent173ecc82c7fae0826773a3ac5040aa3709732cdf (diff)
downloadrygel-74e8d8ad6f25af3287d660923579195eaa56e12c.tar.gz
server: Fix mime-type rewriting
Signed-off-by: Jens Georg <mail@jensge.org> https://bugzilla.gnome.org/show_bug.cgi?id=748628
-rw-r--r--src/librygel-server/rygel-client-hacks.vala5
-rw-r--r--src/librygel-server/rygel-lg-tv-hacks.vala17
-rw-r--r--src/librygel-server/rygel-samsung-tv-hacks.vala31
-rw-r--r--src/librygel-server/rygel-xbmc-hacks.vala16
-rw-r--r--src/librygel-server/rygel-xbox-hacks.vala18
5 files changed, 41 insertions, 46 deletions
diff --git a/src/librygel-server/rygel-client-hacks.vala b/src/librygel-server/rygel-client-hacks.vala
index 32a9013c..7defa45c 100644
--- a/src/librygel-server/rygel-client-hacks.vala
+++ b/src/librygel-server/rygel-client-hacks.vala
@@ -89,6 +89,11 @@ internal abstract class Rygel.ClientHacks : GLib.Object {
public virtual void translate_container_id (MediaQueryAction action,
ref string container_id) {}
+ /**
+ * Modify the passed media object.
+ *
+ * Called before serializing the Object to DIDL-Lite.
+ */
public virtual void apply (MediaObject object) {}
public virtual void filter_sort_criteria (ref string sort_criteria) {}
diff --git a/src/librygel-server/rygel-lg-tv-hacks.vala b/src/librygel-server/rygel-lg-tv-hacks.vala
index 9a533d19..c92b4cc3 100644
--- a/src/librygel-server/rygel-lg-tv-hacks.vala
+++ b/src/librygel-server/rygel-lg-tv-hacks.vala
@@ -31,19 +31,20 @@ internal class Rygel.LGTVHacks : ClientHacks {
}
public override void apply (MediaObject object) {
- if (!(object is MediaFileItem)) {
- return;
+ foreach (var resource in object.get_resource_list ()) {
+ if (resource.mime_type == "audio/x-vorbis+ogg" ||
+ resource.mime_type == "audio/x-flac+ogg") {
+ resource.mime_type = "application/ogg";
+ }
}
- var item = object as MediaFileItem;
- if (item.mime_type == "audio/x-vorbis+ogg" ||
- item.mime_type == "audio/x-flac+ogg") {
- item.mime_type = "application/ogg";
+ if (!(object is MediaFileItem)) {
+ return;
}
// Re-order resources to it picks up the MP3
- if (item is MusicItem) {
- var resources = item.get_resource_list ();
+ if (object is MusicItem) {
+ var resources = object.get_resource_list ();
var i = 0;
foreach (var resource in resources) {
diff --git a/src/librygel-server/rygel-samsung-tv-hacks.vala b/src/librygel-server/rygel-samsung-tv-hacks.vala
index 7e16bc80..a2fbd674 100644
--- a/src/librygel-server/rygel-samsung-tv-hacks.vala
+++ b/src/librygel-server/rygel-samsung-tv-hacks.vala
@@ -29,23 +29,20 @@ internal class Rygel.SamsungTVHacks : ClientHacks {
}
public override void apply (MediaObject object) {
- if (!(object is MediaFileItem)) {
- return;
- }
-
- var item = object as MediaFileItem;
- if (item.mime_type == "video/x-matroska") {
- item.mime_type = "video/x-mkv";
- }
- else if (item.mime_type == "video/mp2t") {
- // Required to play Panasonic TZ-7 AVCHD-Lite movies. Verified on D+E-Series TV
- // Example: http://s3.amazonaws.com/movies.dpreview.com/panasonic_dmcfz150/00015.MTS
- item.mime_type = "video/vnd.dlna.mpeg-tts";
- }
- else if (item.mime_type == "video/quicktime") {
- // Required to play Canon EOS camera movies. Verfied on D-Series TV (E-Series still don't work)
- // Example: http://s3.amazonaws.com/movies.dpreview.com/canon_eos60d/MVI_1326.MOV
- item.mime_type = "video/mp4";
+ foreach (var resource in object.get_resource_list ()) {
+ if (resource.mime_type == "video/x-matroska") {
+ resource.mime_type = "video/x-mkv";
+ } else if (resource.mime_type == "video/mp2t") {
+ // Required to play Panasonic TZ-7 AVCHD-Lite movies. Verified
+ // on D+E-Series TV
+ // Example: http://s3.amazonaws.com/movies.dpreview.com/panasonic_dmcfz150/00015.MTS
+ resource.mime_type = "video/vnd.dlna.mpeg-tts";
+ } else if (resource.mime_type == "video/quicktime") {
+ // Required to play Canon EOS camera movies. Verfied on
+ // D-Series TV (E-Series still don't work)
+ // Example: http://s3.amazonaws.com/movies.dpreview.com/canon_eos60d/MVI_1326.MOV
+ resource.mime_type = "video/mp4";
+ }
}
}
diff --git a/src/librygel-server/rygel-xbmc-hacks.vala b/src/librygel-server/rygel-xbmc-hacks.vala
index 01c22c74..9126e0c3 100644
--- a/src/librygel-server/rygel-xbmc-hacks.vala
+++ b/src/librygel-server/rygel-xbmc-hacks.vala
@@ -33,16 +33,12 @@ internal class Rygel.XBMCHacks : ClientHacks {
}
public override void apply (MediaObject object) {
- if (!(object is MediaFileItem)) {
- return;
- }
-
- var item = object as MediaFileItem;
-
- if (item.mime_type == "audio/mp4" ||
- item.mime_type == "audio/3gpp" ||
- item.mime_type == "audio/vnd.dlna.adts") {
- item.mime_type = "audio/aac";
+ foreach (var resource in object.get_resource_list ()) {
+ if (resource.mime_type == "audio/mp4" ||
+ resource.mime_type == "audio/3gpp" ||
+ resource.mime_type == "audio/vnd.dlna.adts") {
+ resource.mime_type = "audio/aac";
+ }
}
}
diff --git a/src/librygel-server/rygel-xbox-hacks.vala b/src/librygel-server/rygel-xbox-hacks.vala
index 02a989a4..c27ae5c7 100644
--- a/src/librygel-server/rygel-xbox-hacks.vala
+++ b/src/librygel-server/rygel-xbox-hacks.vala
@@ -121,17 +121,13 @@ internal class Rygel.XBoxHacks : ClientHacks {
return;
}
- if (! (object is MediaFileItem)) {
- return;
- }
-
- var item = object as MediaFileItem;
-
- if (item.mime_type == "video/x-msvideo") {
- item.mime_type = "video/avi";
- } else if (item.mime_type == "video/mpeg") {
- // Force transcoding for MPEG files
- item.mime_type = "invalid/content";
+ foreach (var resource in object.get_resource_list ()) {
+ if (resource.mime_type == "video/x-msvideo") {
+ resource.mime_type = "video/avi";
+ } else if (resource.mime_type == "video/mpeg") {
+ // Force transcoding for MPEG files
+ resource.mime_type = "invalid/content";
+ }
}
}