private HashMap<string, DeviceContext> devices;
private ContextManager manager;
- protected Rygel.Plugin plugin { get; protected set; }
+ public Rygel.Plugin plugin { construct set; protected get; }
public string title { construct; protected get; }
- public PluginCapabilities capabilities { construct; protected get; }
+ public PluginCapabilities capabilities {
+ construct;
+ protected get;
+ default = PluginCapabilities.NONE;
+ }
public override void constructed () {
this.manager = ContextManager.create (0);
using Gee;
using GUPnP;
-internal class Rygel.Playbin.WrappingPlugin : Rygel.MediaRendererPlugin {
- private MediaPlayer player;
-
- public WrappingPlugin (Gst.Element playbin) {
- base ("LibRygel-Renderer", _("LibRygel Renderer"));
-
- return_val_if_fail (playbin != null, null);
- return_val_if_fail (playbin.get_type ().name() == "GstPlayBin", null);
-
- this.player = new Player.wrap (playbin);
- }
-
-
- public override MediaPlayer? get_player () {
- return this.player;
- }
-}
-
/**
* An in-process UPnP renderer that uses a GStreamer Playbin2 element.
*
*
* See the <link linkend="implementing-renderers-gst">Implementing GStreamer-based Renderers</link> section.
*/
-public class Rygel.Playbin.Renderer : Rygel.MediaDevice {
+public class Rygel.Playbin.Renderer : Rygel.MediaRenderer {
/**
* Create a new instance of Renderer.
*
* @param title Friendly name of the new UPnP renderer on the network.
*/
public Renderer (string title) {
- Object (title: title);
- }
-
- public override void constructed () {
- base.constructed ();
-
- this.plugin = new Plugin ();
- this.prepare_upnp (this.title);
+ Object (title: title,
+ player: Player.get_default ());
}
/**
* @param title Friendly name of the new UPnP renderer on the network.
*/
public Renderer.wrap (Gst.Element pipeline, string title) {
- base ();
-
return_val_if_fail (pipeline != null, null);
return_val_if_fail (pipeline.get_type ().name() == "GstPlayBin", null);
- this.plugin = new WrappingPlugin (pipeline);
- this.prepare_upnp (title);
+ Object (title: title,
+ player: new Player.wrap (pipeline));
}
/**
return player.playbin;
}
-
- private void prepare_upnp (string title) {
- this.plugin.title = title;
-
- // Always listen on localhost
- this.add_interface ("lo");
- }
}
internal class Plugin : Rygel.MediaRendererPlugin {
private Rygel.MediaPlayer player;
- public Plugin (Rygel.MediaPlayer player,
+ public Plugin (Rygel.MediaPlayer player,
Rygel.PluginCapabilities capabilities) {
base ("LibRygelRenderer", _("LibRygelRenderer"), null, capabilities);
this.player = player;
public override void constructed () {
base.constructed ();
- this.plugin = new global::Plugin (this.player, this.capabilities);
+ if (this.plugin == null) {
+ this.plugin = new global::Plugin (this.player, this.capabilities);
+ }
this.plugin.title = this.title;
}
}