Live items provide gst source element creation method.
authorZeeshan Ali (Khattak) <zeeshanak@src.gnome.org>
Mon, 9 Feb 2009 22:27:32 +0000 (22:27 +0000)
committerZeeshan Ali (Khattak) <zeeshanak@src.gnome.org>
Mon, 9 Feb 2009 22:27:32 +0000 (22:27 +0000)
HTTPServer doesn't need to emit any signals anymore as it can now
just ask the MediaItem to create the gst source element for it.

svn path=/trunk/; revision=537

src/plugins/test/rygel-test-audio-item.vala
src/plugins/test/rygel-test-item.vala
src/plugins/test/rygel-test-root-container.vala
src/plugins/test/rygel-test-video-item.vala
src/rygel/rygel-http-server.vala
src/rygel/rygel-media-item.vala

index b2de3c5..127f76f 100644 (file)
@@ -45,15 +45,16 @@ public class Rygel.TestAudioItem : Rygel.TestItem {
               http_server);
     }
 
-    public override Element create_gst_source () throws Error {
+    public override Element? create_stream_source () {
         Bin bin = new Bin (this.title);
 
         dynamic Element src = ElementFactory.make ("audiotestsrc", null);
         Element encoder = ElementFactory.make ("wavenc", null);
 
         if (src == null || encoder == null) {
-            throw new LiveResponseError.MISSING_PLUGIN (
-                                    "Required plugin missing");
+            warning ("Required plugin missing");
+
+            return null;
         }
 
         // Tell the source to behave like a live source
index 0715a93..6690651 100644 (file)
@@ -43,7 +43,5 @@ public abstract class Rygel.TestItem : Rygel.MediaItem {
         this.mime_type = mime;
         this.author = TEST_AUTHOR;
     }
-
-    public abstract Element create_gst_source () throws Error;
 }
 
index 2a54e5c..5435ed2 100644 (file)
@@ -40,7 +40,6 @@ public class Rygel.TestRootContainer : MediaContainer {
         base.root (title, 0);
 
         this.http_server = http_server;
-        this.http_server.need_stream_source += this.on_need_stream_source;
 
         this.items = new ArrayList<MediaItem> ();
         this.items.add (new TestAudioItem ("sinewave",
@@ -79,20 +78,5 @@ public class Rygel.TestRootContainer : MediaContainer {
 
         return item;
     }
-
-    /* Private methods */
-    private void on_need_stream_source (HTTPServer  http_server,
-                                        MediaItem   item,
-                                        out Element src) {
-        try {
-            src = ((TestItem) item).create_gst_source ();
-        } catch (Error error) {
-            critical ("Error creating Gst source element for item %s: %s",
-                      item.id,
-                      error.message);
-
-            return;
-        }
-    }
 }
 
index 7b204dc..f09f2a7 100644 (file)
@@ -45,7 +45,7 @@ public class Rygel.TestVideoItem : Rygel.TestItem {
               http_server);
     }
 
-    public override Element create_gst_source () throws Error {
+    public override Element? create_stream_source () {
         Bin bin = new Bin (this.title);
 
         dynamic Element src = ElementFactory.make ("videotestsrc", null);
@@ -53,8 +53,9 @@ public class Rygel.TestVideoItem : Rygel.TestItem {
         Element muxer = ElementFactory.make ("mpegtsmux", null);
 
         if (src == null || muxer == null || encoder == null) {
-            throw new LiveResponseError.MISSING_PLUGIN (
-                                "Required plugin missing");
+            warning ("Required plugin missing");
+
+            return null;
         }
 
         // Tell the source to behave like a live source
index 0db48f9..95fba96 100644 (file)
@@ -43,9 +43,6 @@ public class Rygel.HTTPServer : GLib.Object {
     private GUPnP.Context context;
     private ArrayList<HTTPResponse> responses;
 
-    public signal void need_stream_source (MediaItem   item,
-                                           out Element src);
-
     public HTTPServer (ContentDirectory content_dir,
                        string           name) {
         this.content_dir = content_dir;
@@ -210,8 +207,8 @@ public class Rygel.HTTPServer : GLib.Object {
             // URI provided, try to create source element from it
             src = Element.make_from_uri (URIType.SRC, uri, null);
         } else {
-            // No URI provided, ask for source element directly
-            this.need_stream_source (item, out src);
+            // No URI provided, ask for source element
+            src = item.create_stream_source ();
         }
 
         if (src == null) {
index bf3a26e..bcf81fc 100644 (file)
@@ -150,6 +150,12 @@ public class Rygel.MediaItem : MediaObject {
         didl_writer.end_item ();
     }
 
+    // Live media items need to provide a nice working implementation of this
+    // method if they can/do no provide a valid URI
+    public virtual Gst.Element? create_stream_source () {
+        return null;
+    }
+
     private string get_protocol_for_uri (string uri) throws Error {
         if (uri.has_prefix ("http")) {
             return "http-get";