summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/librygel-server/rygel-gst-media-engine.vala56
-rw-r--r--src/librygel-server/rygel-media-engine.vala7
-rw-r--r--src/librygel-server/rygel-transcode-manager.vala66
-rw-r--r--tests/rygel-item-creator-test.vala7
4 files changed, 78 insertions, 58 deletions
diff --git a/src/librygel-server/rygel-gst-media-engine.vala b/src/librygel-server/rygel-gst-media-engine.vala
index e8de758c..58685982 100644
--- a/src/librygel-server/rygel-gst-media-engine.vala
+++ b/src/librygel-server/rygel-gst-media-engine.vala
@@ -24,6 +24,7 @@ using Gst;
internal class Rygel.GstMediaEngine : Rygel.MediaEngine {
private GLib.List<DLNAProfile> dlna_profiles = null;
+ private GLib.List<Transcoder> transcoders = null;
public GstMediaEngine () {
var discoverer = new GUPnP.DLNADiscoverer ((ClockTime) SECOND,
@@ -35,9 +36,64 @@ internal class Rygel.GstMediaEngine : Rygel.MediaEngine {
}
this.dlna_profiles.reverse ();
+
+ var transcoding = true;
+ var lpcm_transcoder = true;
+ var mp3_transcoder = true;
+ var mp2ts_transcoder = true;
+ var wmv_transcoder = true;
+ var aac_transcoder = true;
+ var avc_transcoder = true;
+
+ var config = MetaConfig.get_default ();
+ try {
+ transcoding = config.get_transcoding ();
+
+ if (transcoding) {
+ lpcm_transcoder = config.get_lpcm_transcoder ();
+ mp3_transcoder = config.get_mp3_transcoder ();
+ mp2ts_transcoder = config.get_mp2ts_transcoder ();
+ wmv_transcoder = config.get_wmv_transcoder ();
+ aac_transcoder = config.get_aac_transcoder ();
+ avc_transcoder = config.get_avc_transcoder ();
+ }
+ } catch (Error err) {}
+
+ if (transcoding) {
+ if (lpcm_transcoder) {
+ this.transcoders.prepend (new L16Transcoder ());
+ }
+
+ if (mp3_transcoder) {
+ this.transcoders.prepend (new MP3Transcoder ());
+ }
+
+ if (mp2ts_transcoder) {
+ this.transcoders.prepend (new MP2TSTranscoder(MP2TSProfile.SD));
+ this.transcoders.prepend (new MP2TSTranscoder(MP2TSProfile.HD));
+ }
+
+ if (wmv_transcoder) {
+ this.transcoders.prepend (new WMVTranscoder ());
+ }
+
+ if (aac_transcoder) {
+ this.transcoders.prepend (new AACTranscoder ());
+ }
+
+ if (avc_transcoder) {
+ this.transcoders.prepend (new AVCTranscoder ());
+ }
+
+ this.transcoders.reverse ();
+ }
}
public override unowned GLib.List<DLNAProfile> get_dlna_profiles () {
return this.dlna_profiles;
}
+
+ public override unowned GLib.List<Transcoder>? get_transcoders () {
+ return this.transcoders;
+ }
}
diff --git a/src/librygel-server/rygel-media-engine.vala b/src/librygel-server/rygel-media-engine.vala
index 79fbacf5..04e374fc 100644
--- a/src/librygel-server/rygel-media-engine.vala
+++ b/src/librygel-server/rygel-media-engine.vala
@@ -70,4 +70,11 @@ public abstract class Rygel.MediaEngine : GLib.Object {
* @return A list of #DLNAProfile<!-- -->s
*/
public abstract unowned List<DLNAProfile> get_dlna_profiles ();
+
+ /**
+ * Get a list of the Transcoders that are supported by this media engine.
+ *
+ * @return A list of #Transcoder<!-- -->s or null if not supported.
+ */
+ public abstract unowned List<Transcoder>? get_transcoders ();
}
diff --git a/src/librygel-server/rygel-transcode-manager.vala b/src/librygel-server/rygel-transcode-manager.vala
index b7eebcdf..3bea5ec1 100644
--- a/src/librygel-server/rygel-transcode-manager.vala
+++ b/src/librygel-server/rygel-transcode-manager.vala
@@ -25,7 +25,6 @@
using GUPnP;
using Gee;
-using Gst;
/**
* Responsible for management of all transcoders:
@@ -33,7 +32,6 @@ using Gst;
* # Provide all possible transcoding resources for items.
*/
public abstract class Rygel.TranscodeManager : GLib.Object {
- private ArrayList<Transcoder> transcoders;
private static bool protocol_equal_func (void *a, void *b) {
var protocol_a = a as ProtocolInfo;
@@ -43,59 +41,7 @@ public abstract class Rygel.TranscodeManager : GLib.Object {
protocol_a.mime_type == protocol_b.mime_type;
}
- public TranscodeManager () {
- transcoders = new ArrayList<Transcoder> ();
-
- var config = MetaConfig.get_default ();
-
- var transcoding = true;
- var lpcm_transcoder = true;
- var mp3_transcoder = true;
- var mp2ts_transcoder = true;
- var wmv_transcoder = true;
- var aac_transcoder = true;
- var avc_transcoder = true;
-
- try {
- transcoding = config.get_transcoding ();
-
- if (transcoding) {
- lpcm_transcoder = config.get_lpcm_transcoder ();
- mp3_transcoder = config.get_mp3_transcoder ();
- mp2ts_transcoder = config.get_mp2ts_transcoder ();
- wmv_transcoder = config.get_wmv_transcoder ();
- aac_transcoder = config.get_aac_transcoder ();
- avc_transcoder = config.get_avc_transcoder ();
- }
- } catch (Error err) {}
-
- if (transcoding) {
- if (lpcm_transcoder) {
- transcoders.add (new L16Transcoder ());
- }
-
- if (mp3_transcoder) {
- transcoders.add (new MP3Transcoder ());
- }
-
- if (mp2ts_transcoder) {
- transcoders.add (new MP2TSTranscoder(MP2TSProfile.SD));
- transcoders.add (new MP2TSTranscoder(MP2TSProfile.HD));
- }
-
- if (wmv_transcoder) {
- transcoders.add (new WMVTranscoder ());
- }
-
- if (aac_transcoder) {
- transcoders.add (new AACTranscoder ());
- }
-
- if (avc_transcoder) {
- transcoders.add (new AVCTranscoder ());
- }
- }
- }
+ public TranscodeManager () { }
public abstract string create_uri_for_item (MediaItem item,
int thumbnail_index,
@@ -104,9 +50,11 @@ public abstract class Rygel.TranscodeManager : GLib.Object {
public void add_resources (DIDLLiteItem didl_item, MediaItem item)
throws Error {
+ var engine = MediaEngine.get_default ();
var list = new GLib.List<Transcoder> ();
+ unowned GLib.List<Transcoder> transcoders = engine.get_transcoders ();
- foreach (var transcoder in this.transcoders) {
+ foreach (var transcoder in transcoders) {
if (transcoder.get_distance (item) != uint.MAX) {
list.append (transcoder);
}
@@ -121,7 +69,7 @@ public abstract class Rygel.TranscodeManager : GLib.Object {
public Transcoder get_transcoder (string target) throws Error {
Transcoder transcoder = null;
- foreach (var iter in this.transcoders) {
+ foreach (var iter in MediaEngine.get_default ().get_transcoders ()) {
if (iter.can_handle (target)) {
transcoder = iter;
}
@@ -139,9 +87,11 @@ public abstract class Rygel.TranscodeManager : GLib.Object {
internal abstract string get_protocol ();
internal virtual ArrayList<ProtocolInfo> get_protocol_info () {
+ var engine = MediaEngine.get_default ();
var protocol_infos = new ArrayList<ProtocolInfo> (protocol_equal_func);
+ unowned GLib.List<Transcoder> transcoders = engine.get_transcoders ();
- foreach (var transcoder in this.transcoders) {
+ foreach (var transcoder in transcoders) {
var protocol_info = new ProtocolInfo ();
protocol_info.protocol = this.get_protocol ();
diff --git a/tests/rygel-item-creator-test.vala b/tests/rygel-item-creator-test.vala
index 84e17b88..482693d1 100644
--- a/tests/rygel-item-creator-test.vala
+++ b/tests/rygel-item-creator-test.vala
@@ -242,10 +242,17 @@ public errordomain Rygel.ContentDirectoryError {
ERROR
}
+public class Rygel.Transcoder {
+}
+
public class Rygel.GstMediaEngine : Rygel.MediaEngine {
public override unowned GLib.List<DLNAProfile> get_dlna_profiles () {
return null;
}
+
+ public override unowned GLib.List<Transcoder>? get_transcoders () {
+ return null;
+ }
}
public class Rygel.HTTPItemCreatorTest : GLib.Object {