[rygel] core,media-export: Check for playbin
- From: Zeeshan Ali Khattak <zeeshanak src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [rygel] core,media-export: Check for playbin
- Date: Sat, 24 Oct 2009 14:09:14 +0000 (UTC)
commit d8e4e6d653eb36961cd302eec23761d25a4e2000
Author: Jens Georg <mail jensge org>
Date: Wed Oct 21 14:06:33 2009 +0200
core,media-export: Check for playbin
Properly check for playbin[2] availability upon creation and react more nicely
with a message to the user to check his/her setup
.../rygel-media-export-root-container.vala | 10 +++++-
src/rygel/rygel-metadata-extractor.vala | 33 +++++++++++++++++---
2 files changed, 36 insertions(+), 7 deletions(-)
---
diff --git a/src/plugins/media-export/rygel-media-export-root-container.vala b/src/plugins/media-export/rygel-media-export-root-container.vala
index bbb6af5..ad58baa 100644
--- a/src/plugins/media-export/rygel-media-export-root-container.vala
+++ b/src/plugins/media-export/rygel-media-export-root-container.vala
@@ -144,7 +144,7 @@ public class Rygel.MediaExportRootContainer : Rygel.MediaDBContainer {
private MediaExportRootContainer (MediaDB db) {
base (db, "0", "MediaExportRoot");
- this.extractor = new MetadataExtractor ();
+ this.extractor = MetadataExtractor.create ();
this.harvester = new HashMap<File,MediaExportHarvester> (file_hash,
file_equal);
@@ -212,7 +212,13 @@ public class Rygel.MediaExportRootContainer : Rygel.MediaDBContainer {
}
private void harvest (File file, MediaContainer parent = this) {
- if (!this.harvester.contains (file)) {
+ if (this.extractor == null) {
+ warning ("No Metadata extractor available. Will not crawl");
+ return;
+ }
+
+ if (this.extractor != null &&
+ !this.harvester.contains (file)) {
var harvester = new MediaExportHarvester (parent,
this.media_db,
this.extractor,
diff --git a/src/rygel/rygel-metadata-extractor.vala b/src/rygel/rygel-metadata-extractor.vala
index e10143e..e11ccdd 100644
--- a/src/rygel/rygel-metadata-extractor.vala
+++ b/src/rygel/rygel-metadata-extractor.vala
@@ -68,6 +68,8 @@ public class Rygel.MetadataExtractor: GLib.Object {
private uint timeout_id;
+ private static ElementFactory factory;
+
private static void register_custom_tag (string tag, Type type) {
Gst.tag_register (tag,
TagFlag.META,
@@ -79,10 +81,7 @@ public class Rygel.MetadataExtractor: GLib.Object {
private void renew_playbin () {
// setup fake sinks
- this.playbin = ElementFactory.make ("playbin2", null);
- if (this.playbin == null) {
- this.playbin = ElementFactory.make ("playbin", null);
- }
+ this.playbin = this.factory.create ("tag_reader");
// increase reference count of sinks to workaround
// bug #596078
@@ -101,7 +100,31 @@ public class Rygel.MetadataExtractor: GLib.Object {
bus.message["error"] += this.error_cb;
}
- public MetadataExtractor () {
+ public static MetadataExtractor? create() {
+ if (MetadataExtractor.factory == null) {
+ debug ("Checking for gstreamer playbin...");
+ var factory = ElementFactory.find("playbin2");
+ if (factory != null) {
+ debug ("Using playbin2");
+ } else {
+ debug ("Could not create Playbin2, trying Playbin");
+ factory = ElementFactory.find ("playbin");
+
+ if (factory != null) {
+ debug ("Using playbin");
+ } else {
+ critical ("Could not find any playbin. " +
+ "Please check your gstreamer setup");
+ return null;
+ }
+ }
+ MetadataExtractor.factory = factory;
+ }
+
+ return new MetadataExtractor ();
+ }
+
+ MetadataExtractor () {
this.register_custom_tag (TAG_RYGEL_SIZE, typeof (int64));
this.register_custom_tag (TAG_RYGEL_DURATION, typeof (int64));
this.register_custom_tag (TAG_RYGEL_MIME, typeof (string));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]