diff options
author | Jens Georg <mail@jensge.org> | 2015-05-14 19:23:46 +0200 |
---|---|---|
committer | Jens Georg <mail@jensge.org> | 2015-05-14 19:29:12 +0200 |
commit | 74e8d8ad6f25af3287d660923579195eaa56e12c (patch) | |
tree | 92f42c3c9814945eaf98e1ad6c33ad9e2f0fcd03 /src | |
parent | 173ecc82c7fae0826773a3ac5040aa3709732cdf (diff) | |
download | rygel-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
Diffstat (limited to 'src')
-rw-r--r-- | src/librygel-server/rygel-client-hacks.vala | 5 | ||||
-rw-r--r-- | src/librygel-server/rygel-lg-tv-hacks.vala | 17 | ||||
-rw-r--r-- | src/librygel-server/rygel-samsung-tv-hacks.vala | 31 | ||||
-rw-r--r-- | src/librygel-server/rygel-xbmc-hacks.vala | 16 | ||||
-rw-r--r-- | src/librygel-server/rygel-xbox-hacks.vala | 18 |
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"; + } } } |