From: Jens Georg Date: Thu, 30 Aug 2012 11:36:20 +0000 (+0200) Subject: core: Move DLNA profile lookup to MediaEngine X-Git-Tag: RYGEL_0_17_0~19 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2c34dd2aef3a7be82bd74611231130dfb85b4bc2;p=profile%2Fivi%2Frygel.git core: Move DLNA profile lookup to MediaEngine --- diff --git a/src/librygel-server/filelist.am b/src/librygel-server/filelist.am index 7e01d85..9bea5f8 100644 --- a/src/librygel-server/filelist.am +++ b/src/librygel-server/filelist.am @@ -20,7 +20,8 @@ LIBRYGEL_SERVER_VAPI_SOURCE_FILES = \ rygel-searchable-container.vala \ rygel-visual-item.vala \ rygel-writable-container.vala \ - rygel-media-server.vala + rygel-media-server.vala \ + rygel-media-engine.vala LIBRYGEL_SERVER_NONVAPI_SOURCE_FILES = \ rygel-aac-transcoder.vala \ @@ -66,7 +67,8 @@ LIBRYGEL_SERVER_NONVAPI_SOURCE_FILES = \ rygel-wmp-hacks.vala \ rygel-wmv-transcoder.vala \ rygel-xbmc-hacks.vala \ - rygel-xbox-hacks.vala + rygel-xbox-hacks.vala \ + rygel-gst-media-engine.vala LIBRYGEL_SERVER_VALAFLAGS_PKG = \ --pkg gstreamer-0.10 \ diff --git a/src/librygel-server/rygel-gst-media-engine.vala b/src/librygel-server/rygel-gst-media-engine.vala new file mode 100644 index 0000000..e8de758 --- /dev/null +++ b/src/librygel-server/rygel-gst-media-engine.vala @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2012 Intel Corporation. + * + * Author: Jens Georg + * + * 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 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 program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +using Gst; + +internal class Rygel.GstMediaEngine : Rygel.MediaEngine { + private GLib.List dlna_profiles = null; + + public GstMediaEngine () { + var discoverer = new GUPnP.DLNADiscoverer ((ClockTime) SECOND, + true, + false); + foreach (var profile in discoverer.list_profiles ()) { + var p = new DLNAProfile (profile.mime, profile.name); + this.dlna_profiles.prepend (p); + } + + this.dlna_profiles.reverse (); + } + + public override unowned GLib.List get_dlna_profiles () { + return this.dlna_profiles; + } +} diff --git a/src/librygel-server/rygel-item-creator.vala b/src/librygel-server/rygel-item-creator.vala index 65183a9..1f5dd70 100644 --- a/src/librygel-server/rygel-item-creator.vala +++ b/src/librygel-server/rygel-item-creator.vala @@ -1,7 +1,9 @@ /* - * Copyright (C) 2010 Nokia Corporation. + * Copyright (C) 2010-2011 Nokia Corporation. + * Copyright (C) 2012 Intel Corporation. * * Author: Zeeshan Ali (Khattak) + * Jens Georg * * This file is part of Rygel. * @@ -21,7 +23,6 @@ */ using GUPnP; -using Gst; /** * CreateObject action implementation. @@ -593,26 +594,20 @@ internal class Rygel.ItemCreator: GLib.Object, Rygel.StateMachine { /** * Check if the profile is supported. * - * The check is performed against GUPnP-DLNA's database explicitly excluding + * The check is performed against the MediaEngine's database explicitly excluding * the transcoders. * * @param profile to check * @returns true if the profile is supported, false otherwise. */ private bool is_profile_valid (string profile) { - var discoverer = new GUPnP.DLNADiscoverer ((ClockTime) SECOND, - true, - false); + unowned GLib.List profiles, result; - var valid = false; - foreach (var known_profile in discoverer.list_profiles ()) { - if (known_profile.name == profile) { - valid = true; + profiles = MediaEngine.get_default ().get_dlna_profiles (); + var p = new DLNAProfile (profile, ""); - break; - } - } + result = profiles.find_custom (p, DLNAProfile.compare_by_name); - return valid; + return result != null; } } diff --git a/src/librygel-server/rygel-media-engine.vala b/src/librygel-server/rygel-media-engine.vala new file mode 100644 index 0000000..79fbacf --- /dev/null +++ b/src/librygel-server/rygel-media-engine.vala @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2012 Intel Corporation. + * + * Author: Jens Georg + * + * 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 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 program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/** + * Data class representing a DLNA profile. + * It contains the name and the corresponding DLNA mime type. + * + * Note: The mime type can deviate from mime types typically used elsewhere. + */ +public class Rygel.DLNAProfile { + public string mime; + public string name; + + public DLNAProfile (string name, string mime) { + this.mime = mime; + this.name = name; + } + + /** + * Compare two DLNA profiles by name + */ + public static int compare_by_name (DLNAProfile a, DLNAProfile b) { + return a.name.ascii_casecmp (b.name); + } +} + +/** + * Base class for the media engine that will contain knowledge about streaming + * and transcoding capabilites of the media library in use. + */ +public abstract class Rygel.MediaEngine : GLib.Object { + private static MediaEngine instance; + + /** + * Get the singleton instance of the currently used media engine. + * + * @return An instance of a concreate #MediaEngine implementation. + */ + public static MediaEngine get_default () { + if (instance == null) { + instance = new GstMediaEngine (); + } + + return instance; + } + + /** + * Get a list of the DLNA profiles that are supported by this media + * engine. + * + * @return A list of #DLNAProfiles + */ + public abstract unowned List get_dlna_profiles (); +} diff --git a/src/librygel-server/rygel-source-connection-manager.vala b/src/librygel-server/rygel-source-connection-manager.vala index 9903c6f..77031bd 100644 --- a/src/librygel-server/rygel-source-connection-manager.vala +++ b/src/librygel-server/rygel-source-connection-manager.vala @@ -1,8 +1,10 @@ /* - * Copyright (C) 2009 Nokia Corporation. + * Copyright (C) 2012 Intel Corporation. + * Copyright (C) 2009-2011 Nokia Corporation. * Copyright (C) 2008 Zeeshan Ali (Khattak) . * * Author: Zeeshan Ali (Khattak) + * Jens Georg * * This file is part of Rygel. * @@ -22,7 +24,6 @@ */ using GUPnP; -using Gst; using Gee; /** @@ -50,12 +51,12 @@ internal class Rygel.SourceConnectionManager : Rygel.ConnectionManager { var server = this.get_http_server (); var protocol_infos = server.get_protocol_info (); - var discoverer = new GUPnP.DLNADiscoverer ((ClockTime) SECOND, - true, - false); + unowned GLib.List profiles = MediaEngine.get_default (). + get_dlna_profiles (); + var protocol = server.get_protocol (); - foreach (var profile in discoverer.list_profiles ()) { + foreach (var profile in profiles) { var protocol_info = new ProtocolInfo (); protocol_info.protocol = protocol; diff --git a/src/plugins/tracker/rygel-tracker-item-factory.vala b/src/plugins/tracker/rygel-tracker-item-factory.vala index a91ca6f..8ee28a3 100644 --- a/src/plugins/tracker/rygel-tracker-item-factory.vala +++ b/src/plugins/tracker/rygel-tracker-item-factory.vala @@ -2,6 +2,7 @@ * Copyright (C) 2008 Zeeshan Ali . * Copyright (C) 2008-2012 Nokia Corporation. * Copyright (C) 2010 MediaNet Inh. + * Copyright (C) 2012 Intel Corporation. * * Authors: Zeeshan Ali * Sunil Mohan Adapa diff --git a/tests/Makefile.am b/tests/Makefile.am index 8a0b098..dc431e2 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -93,7 +93,8 @@ rygel_item_creator_test_SOURCES = rygel-item-creator-test.vala \ rygel-item-creator.vala \ rygel-state-machine_item-creator.vala \ rygel-relational-expression.vala \ - rygel-search-expression.vala + rygel-search-expression.vala \ + rygel-media-engine.vala rygel_playbin_renderer_test_SOURCES = rygel-playbin-renderer-test.vala diff --git a/tests/rygel-item-creator-test.vala b/tests/rygel-item-creator-test.vala index 27eda60..84e17b8 100644 --- a/tests/rygel-item-creator-test.vala +++ b/tests/rygel-item-creator-test.vala @@ -1,5 +1,6 @@ /* * Copyright (C) 2012 Nokia Corporation. + * Copyright (C) 2012 Intel Corporation. * * Author: Jens Georg * @@ -241,6 +242,12 @@ public errordomain Rygel.ContentDirectoryError { ERROR } +public class Rygel.GstMediaEngine : Rygel.MediaEngine { + public override unowned GLib.List get_dlna_profiles () { + return null; + } +} + public class Rygel.HTTPItemCreatorTest : GLib.Object { public static int main (string[] args) { diff --git a/tests/rygel-media-engine.vala b/tests/rygel-media-engine.vala new file mode 120000 index 0000000..8d6c01f --- /dev/null +++ b/tests/rygel-media-engine.vala @@ -0,0 +1 @@ +../src/librygel-server/rygel-media-engine.vala \ No newline at end of file