Convert MP2Transcoder into a more generic mpeg audio transcoder.
authorZeeshan Ali (Khattak) <zeeshanak@src.gnome.org>
Sat, 21 Mar 2009 13:55:05 +0000 (13:55 +0000)
committerZeeshan Ali (Khattak) <zeeshanak@src.gnome.org>
Sat, 21 Mar 2009 13:55:05 +0000 (13:55 +0000)
Convert MP2Transcoder into mpeg audio (layer 2 and 3) transcoder.

svn path=/trunk/; revision=698

src/rygel/Makefile.am
src/rygel/rygel-mp3-transcoder.vala [moved from src/rygel/rygel-mp2-transcoder.vala with 83% similarity]
src/rygel/rygel-transcode-manager.vala

index 87ee594..653db39 100644 (file)
@@ -126,8 +126,8 @@ rygel_SOURCES = $(VAPI_SOURCE_FILES) \
                rygel-media-item.h \
                rygel-mp2ts-transcoder.h \
                rygel-mp2ts-transcoder.c \
-               rygel-mp2-transcoder.h \
-               rygel-mp2-transcoder.c
+               rygel-mp3-transcoder.h \
+               rygel-mp3-transcoder.c
 
 rygel.stamp: $(filter %.vala,$(rygel_SOURCES))
        $(VALAC) -C --vapidir=$(srcdir) \
@@ -166,7 +166,7 @@ VAPI_SOURCE_FILES = rygel-content-directory.vala \
                    rygel-browse.vala \
                    rygel-didl-lite-writer.vala \
                    rygel-mp2ts-transcoder.vala \
-                   rygel-mp2-transcoder.vala
+                   rygel-mp3-transcoder.vala
 
 rygel-1.0.vapi: $(VAPI_SOURCE_FILES)
        $(VALAC) -C --library=rygel-1.0 \
similarity index 83%
rename from src/rygel/rygel-mp2-transcoder.vala
rename to src/rygel/rygel-mp3-transcoder.vala
index ff4c5c0..d7a82b1 100644 (file)
 using Rygel;
 using Gst;
 
-internal class Rygel.MP2Transcoder : Gst.Bin {
+internal class Rygel.MP3Transcoder : Gst.Bin {
    private const string DECODEBIN = "decodebin2";
    private const string AUDIO_CONVERT = "audioconvert";
-   private const string AUDIO_ENCODER = "twolame";
+   private const string LAYER2_ENCODER = "twolame";
+   private const string LAYER3_ENCODER = "lame";
    private const string AUDIO_PARSER = "mp3parse";
 
    private const string AUDIO_SRC_PAD = "audio-src-pad";
 
    private dynamic Element audio_enc;
+   private uint layer;
+
+   public MP3Transcoder (Element src, uint layer) throws Error {
+        this.layer = layer;
 
-   public MP2Transcoder (Element src) throws Error {
         Element decodebin = ElementFactory.make (DECODEBIN, DECODEBIN);
         if (decodebin == null) {
             throw new LiveResponseError.MISSING_PLUGIN (
@@ -78,11 +82,19 @@ internal class Rygel.MP2Transcoder : Gst.Bin {
                    AUDIO_CONVERT);
        }
 
-       var encoder = ElementFactory.make (AUDIO_ENCODER, AUDIO_ENCODER);
+       string encoder_name;
+       if (this.layer == 2) {
+           encoder_name = LAYER2_ENCODER;
+       } else {
+           encoder_name = LAYER3_ENCODER;
+       }
+
+       dynamic Element encoder = ElementFactory.make (encoder_name,
+                                                      encoder_name);
        if (encoder == null) {
            throw new LiveResponseError.MISSING_PLUGIN (
                    "Required element '%s' missing",
-                   AUDIO_ENCODER);
+                   encoder_name);
        }
 
        Element parser = ElementFactory.make (AUDIO_PARSER,
@@ -93,6 +105,13 @@ internal class Rygel.MP2Transcoder : Gst.Bin {
                    AUDIO_PARSER);
        }
 
+       if (this.layer == 3) {
+            // Best quality
+            encoder.quality = 0;
+       }
+
+       encoder.bitrate = 256;
+
        var bin = new Bin ("audio-encoder-bin");
        bin.add_many (convert, encoder, parser);
 
index 8e853f4..d29112c 100644 (file)
@@ -67,7 +67,7 @@ public abstract class Rygel.TranscodeManager : GLib.Object {
                                           string  target)
                                           throws Error {
         if (target == "audio/mpeg") {
-            return new MP2Transcoder (src);
+            return new MP3Transcoder (src, 3);
         } else if (target == "video/mpeg") {
             return new MP2TSTranscoder (src);
         } else {