rygel r759 - trunk/src/rygel



Author: zeeshanak
Date: Sat Mar 28 00:45:37 2009
New Revision: 759
URL: http://svn.gnome.org/viewvc/rygel?rev=759&view=rev

Log:
create_transcoder is now part of relevant Transcoder.

Move static create_transcoder method from TranscoderBin implementation
to relevant Transcoder classes as non-static method.

Modified:
   trunk/src/rygel/rygel-l16-transcoder-bin.vala
   trunk/src/rygel/rygel-l16-transcoder.vala
   trunk/src/rygel/rygel-mp2ts-transcoder-bin.vala
   trunk/src/rygel/rygel-mp2ts-transcoder.vala
   trunk/src/rygel/rygel-mp3-transcoder-bin.vala
   trunk/src/rygel/rygel-mp3-transcoder.vala

Modified: trunk/src/rygel/rygel-l16-transcoder-bin.vala
==============================================================================
--- trunk/src/rygel/rygel-l16-transcoder-bin.vala	(original)
+++ trunk/src/rygel/rygel-l16-transcoder-bin.vala	Sat Mar 28 00:45:37 2009
@@ -25,33 +25,18 @@
 
 internal class Rygel.L16TranscoderBin : Rygel.TranscoderBin {
     private const string DECODEBIN = "decodebin2";
-    private const string AUDIO_CONVERT = "audioconvert";
-    private const string AUDIO_RESAMPLE = "audioresample";
-    private const string CAPS_FILTER = "capsfilter";
 
     private const string AUDIO_SRC_PAD = "audio-src-pad";
     private const string AUDIO_SINK_PAD = "audio-sink-pad";
 
     private dynamic Element audio_enc;
 
-    public L16TranscoderBin (Element src,
-                             int     channels,
-                             int     frequency,
-                             int     width,
-                             int     depth,
-                             int     endianness,
-                             bool    signed_)
-                             throws Error {
+    public L16TranscoderBin (Element       src,
+                             L16Transcoder transcoder) throws Error {
         Element decodebin = TranscoderBin.create_element (DECODEBIN, DECODEBIN);
 
-        this.audio_enc = L16TranscoderBin.create_encoder (AUDIO_SRC_PAD,
-                                                          AUDIO_SINK_PAD,
-                                                          channels,
-                                                          frequency,
-                                                          width,
-                                                          depth,
-                                                          endianness,
-                                                          signed_);
+        this.audio_enc = transcoder.create_encoder (AUDIO_SRC_PAD,
+                                                    AUDIO_SINK_PAD);
 
         this.add_many (src, decodebin, this.audio_enc);
         src.link (decodebin);
@@ -77,48 +62,4 @@
             return;
         }
     }
-
-    public static Element create_encoder (string? src_pad_name,
-                                          string? sink_pad_name,
-                                          int     channels,
-                                          int     frequency,
-                                          int     width,
-                                          int     depth,
-                                          int     endianness,
-                                          bool    signed_)
-                                          throws Error {
-        dynamic Element convert1 = TranscoderBin.create_element (AUDIO_CONVERT,
-                                                                 null);
-        dynamic Element resample = TranscoderBin.create_element (
-                                                        AUDIO_RESAMPLE,
-                                                        AUDIO_RESAMPLE);
-        dynamic Element convert2 = TranscoderBin.create_element (AUDIO_CONVERT,
-                                                                 null);
-        dynamic Element capsfilter = TranscoderBin.create_element (CAPS_FILTER,
-                                                                   CAPS_FILTER);
-
-        var bin = new Bin ("audio-encoder-bin");
-        bin.add_many (convert1, resample, convert2, capsfilter);
-
-        capsfilter.caps = new Caps.simple (
-                                    "audio/x-raw-int",
-                                    "channels", typeof (int), channels,
-                                    "rate",  typeof (int), frequency,
-                                    "width", typeof (int), width,
-                                    "depth", typeof (int), depth,
-                                    "endianness", typeof (int), endianness,
-                                    "signed", typeof (bool), signed_);
-
-        convert1.link_many (resample, convert2, capsfilter);
-
-        var pad = convert1.get_static_pad ("sink");
-        var ghost = new GhostPad (sink_pad_name, pad);
-        bin.add_pad (ghost);
-
-        pad = capsfilter.get_static_pad ("src");
-        ghost = new GhostPad (src_pad_name, pad);
-        bin.add_pad (ghost);
-
-        return bin;
-    }
 }

Modified: trunk/src/rygel/rygel-l16-transcoder.vala
==============================================================================
--- trunk/src/rygel/rygel-l16-transcoder.vala	(original)
+++ trunk/src/rygel/rygel-l16-transcoder.vala	Sat Mar 28 00:45:37 2009
@@ -32,6 +32,10 @@
     private const int ENDIANNESS = ByteOrder.BIG_ENDIAN; // Network byte order
     private const bool SIGNED = true; // Network byte order
 
+    private const string AUDIO_CONVERT = "audioconvert";
+    private const string AUDIO_RESAMPLE = "audioresample";
+    private const string CAPS_FILTER = "capsfilter";
+
     public L16Transcoder () {
         var mime_type = "audio/L" + L16Transcoder.WIDTH.to_string () +
                         ";rate=" + L16Transcoder.FREQUENCY.to_string () +
@@ -41,13 +45,7 @@
     }
 
     public override Element create_source (Element src) throws Error {
-        return new L16TranscoderBin (src,
-                                     L16Transcoder.CHANNELS,
-                                     L16Transcoder.FREQUENCY,
-                                     L16Transcoder.WIDTH,
-                                     L16Transcoder.DEPTH,
-                                     L16Transcoder.ENDIANNESS,
-                                     L16Transcoder.SIGNED);
+        return new L16TranscoderBin (src, this);
     }
 
     public override DIDLLiteResource create_resource (
@@ -62,4 +60,42 @@
 
         return res;
     }
+
+    public Element create_encoder (string? src_pad_name,
+                                   string? sink_pad_name)
+                                   throws Error {
+        dynamic Element convert1 = TranscoderBin.create_element (AUDIO_CONVERT,
+                                                                 null);
+        dynamic Element resample = TranscoderBin.create_element (
+                                                        AUDIO_RESAMPLE,
+                                                        AUDIO_RESAMPLE);
+        dynamic Element convert2 = TranscoderBin.create_element (AUDIO_CONVERT,
+                                                                 null);
+        dynamic Element capsfilter = TranscoderBin.create_element (CAPS_FILTER,
+                                                                   CAPS_FILTER);
+
+        var bin = new Bin ("audio-encoder-bin");
+        bin.add_many (convert1, resample, convert2, capsfilter);
+
+        capsfilter.caps = new Caps.simple (
+                                    "audio/x-raw-int",
+                                    "channels", typeof (int), CHANNELS,
+                                    "rate",  typeof (int), FREQUENCY,
+                                    "width", typeof (int), WIDTH,
+                                    "depth", typeof (int), DEPTH,
+                                    "endianness", typeof (int), ENDIANNESS,
+                                    "signed", typeof (bool), SIGNED);
+
+        convert1.link_many (resample, convert2, capsfilter);
+
+        var pad = convert1.get_static_pad ("sink");
+        var ghost = new GhostPad (sink_pad_name, pad);
+        bin.add_pad (ghost);
+
+        pad = capsfilter.get_static_pad ("src");
+        ghost = new GhostPad (src_pad_name, pad);
+        bin.add_pad (ghost);
+
+        return bin;
+    }
 }

Modified: trunk/src/rygel/rygel-mp2ts-transcoder-bin.vala
==============================================================================
--- trunk/src/rygel/rygel-mp2ts-transcoder-bin.vala	(original)
+++ trunk/src/rygel/rygel-mp2ts-transcoder-bin.vala	Sat Mar 28 00:45:37 2009
@@ -25,10 +25,6 @@
 
 internal class Rygel.MP2TSTranscoderBin : Rygel.TranscoderBin {
     private const string DECODEBIN = "decodebin2";
-    private const string VIDEO_ENCODER = "mpeg2enc";
-    private const string COLORSPACE_CONVERT = "ffmpegcolorspace";
-    private const string VIDEO_RATE = "videorate";
-    private const string VIDEO_SCALE = "videoscale";
     private const string MUXER = "mpegtsmux";
 
     private const string AUDIO_ENC_SINK = "audio-enc-sink-pad";
@@ -38,18 +34,14 @@
     private dynamic Element video_enc;
     private dynamic Element muxer;
 
-    public MP2TSTranscoderBin (Element src,
-                               int     width,
-                               int     height)
+    public MP2TSTranscoderBin (Element         src,
+                               MP2TSTranscoder transcoder)
                                throws Error {
         Element decodebin = TranscoderBin.create_element (DECODEBIN, DECODEBIN);
-        this.audio_enc = MP3TranscoderBin.create_encoder (MP3Layer.TWO,
-                                                          null,
-                                                          AUDIO_ENC_SINK);
-        this.video_enc = MP2TSTranscoderBin.create_encoder (null,
-                                                            VIDEO_ENC_SINK,
-                                                            width,
-                                                            height);
+        var mp3_transcoder = new MP3Transcoder (MP3Layer.TWO);
+        this.audio_enc = mp3_transcoder.create_encoder (null,
+                                                        AUDIO_ENC_SINK);
+        this.video_enc = transcoder.create_encoder (null, VIDEO_ENC_SINK);
         this.muxer = TranscoderBin.create_element (MUXER, MUXER);
 
         this.add_many (src,
@@ -94,38 +86,4 @@
             return;
         }
     }
-
-    internal static Element create_encoder (string? src_pad_name,
-                                            string? sink_pad_name,
-                                            int     width,
-                                            int     height)
-                                            throws Error {
-        var videorate = TranscoderBin.create_element (VIDEO_RATE, VIDEO_RATE);
-        var videoscale = TranscoderBin.create_element (VIDEO_SCALE,
-                                                       VIDEO_SCALE);
-        var convert = TranscoderBin.create_element (COLORSPACE_CONVERT,
-                                                    COLORSPACE_CONVERT);
-        var encoder = TranscoderBin.create_element (VIDEO_ENCODER,
-                                                    VIDEO_ENCODER);
-
-        var bin = new Bin ("video-encoder-bin");
-        bin.add_many (videorate, videoscale, convert, encoder);
-
-        var caps = new Caps.simple ("video/x-raw-yuv",
-                                    "width", typeof (int), width,
-                                    "height", typeof (int), height);
-        videorate.link (convert);
-        convert.link (videoscale);
-        videoscale.link_filtered (encoder, caps);
-
-        var pad = videorate.get_static_pad ("sink");
-        var ghost = new GhostPad (sink_pad_name, pad);
-        bin.add_pad (ghost);
-
-        pad = encoder.get_static_pad ("src");
-        ghost = new GhostPad (src_pad_name, pad);
-        bin.add_pad (ghost);
-
-        return bin;
-    }
 }

Modified: trunk/src/rygel/rygel-mp2ts-transcoder.vala
==============================================================================
--- trunk/src/rygel/rygel-mp2ts-transcoder.vala	(original)
+++ trunk/src/rygel/rygel-mp2ts-transcoder.vala	Sat Mar 28 00:45:37 2009
@@ -35,6 +35,11 @@
     private const int[] HEIGHT = {480, 1080};
     private const string[] PROFILES = {"MPEG_TS_SD_NA", "MPEG_TS_HD_NA"};
 
+    private const string VIDEO_ENCODER = "mpeg2enc";
+    private const string COLORSPACE_CONVERT = "ffmpegcolorspace";
+    private const string VIDEO_RATE = "videorate";
+    private const string VIDEO_SCALE = "videoscale";
+
     private MP2TSProfile profile;
 
     public MP2TSTranscoder (MP2TSProfile profile) {
@@ -44,9 +49,7 @@
     }
 
     public override Element create_source (Element src) throws Error {
-        return new MP2TSTranscoderBin (src,
-                                       MP2TSTranscoder.WIDTH[this.profile],
-                                       MP2TSTranscoder.HEIGHT[this.profile]);
+        return new MP2TSTranscoderBin (src, this);
     }
 
     public override DIDLLiteResource create_resource (MediaItem        item,
@@ -59,4 +62,37 @@
 
         return res;
     }
+
+    public Element create_encoder (string? src_pad_name,
+                                   string? sink_pad_name)
+                                   throws Error {
+        var videorate = TranscoderBin.create_element (VIDEO_RATE, VIDEO_RATE);
+        var videoscale = TranscoderBin.create_element (VIDEO_SCALE,
+                                                       VIDEO_SCALE);
+        var convert = TranscoderBin.create_element (COLORSPACE_CONVERT,
+                                                    COLORSPACE_CONVERT);
+        var encoder = TranscoderBin.create_element (VIDEO_ENCODER,
+                                                    VIDEO_ENCODER);
+
+        var bin = new Bin ("video-encoder-bin");
+        bin.add_many (videorate, videoscale, convert, encoder);
+
+        var caps = new Caps.simple (
+                                "video/x-raw-yuv",
+                                "width", typeof (int), WIDTH[this.profile],
+                                "height", typeof (int), HEIGHT[this.profile]);
+        videorate.link (convert);
+        convert.link (videoscale);
+        videoscale.link_filtered (encoder, caps);
+
+        var pad = videorate.get_static_pad ("sink");
+        var ghost = new GhostPad (sink_pad_name, pad);
+        bin.add_pad (ghost);
+
+        pad = encoder.get_static_pad ("src");
+        ghost = new GhostPad (src_pad_name, pad);
+        bin.add_pad (ghost);
+
+        return bin;
+    }
 }

Modified: trunk/src/rygel/rygel-mp3-transcoder-bin.vala
==============================================================================
--- trunk/src/rygel/rygel-mp3-transcoder-bin.vala	(original)
+++ trunk/src/rygel/rygel-mp3-transcoder-bin.vala	Sat Mar 28 00:45:37 2009
@@ -30,22 +30,18 @@
 
 internal class Rygel.MP3TranscoderBin : Rygel.TranscoderBin {
     private const string DECODEBIN = "decodebin2";
-    private const string AUDIO_CONVERT = "audioconvert";
-    private const string[] AUDIO_ENCODER = {null, "twolame", "lame"};
-    private const string AUDIO_PARSER = "mp3parse";
-    private const string AUDIO_RESAMPLE = "audioresample";
 
     private const string AUDIO_SRC_PAD = "audio-src-pad";
     private const string AUDIO_SINK_PAD = "audio-sink-pad";
 
     private dynamic Element audio_enc;
 
-    public MP3TranscoderBin (Element src, MP3Layer layer) throws Error {
+    public MP3TranscoderBin (Element src,
+                             MP3Transcoder transcoder) throws Error {
         Element decodebin = TranscoderBin.create_element (DECODEBIN, DECODEBIN);
 
-        this.audio_enc = MP3TranscoderBin.create_encoder (layer,
-                                                          AUDIO_SRC_PAD,
-                                                          AUDIO_SINK_PAD);
+        this.audio_enc = transcoder.create_encoder (AUDIO_SRC_PAD,
+                                                    AUDIO_SINK_PAD);
 
         this.add_many (src, decodebin, this.audio_enc);
         src.link (decodebin);
@@ -57,46 +53,6 @@
         decodebin.pad_added += this.decodebin_pad_added;
     }
 
-    public static Element create_encoder (MP3Layer layer,
-                                          string?  src_pad_name,
-                                          string?  sink_pad_name)
-                                          throws Error {
-        dynamic Element convert = TranscoderBin.create_element (AUDIO_CONVERT,
-                                                                AUDIO_CONVERT);
-        dynamic Element resample = TranscoderBin.create_element (
-                                                        AUDIO_RESAMPLE,
-                                                        AUDIO_RESAMPLE);
-        dynamic Element encoder = TranscoderBin.create_element (
-                                                        AUDIO_ENCODER[layer],
-                                                        AUDIO_ENCODER[layer]);
-        dynamic Element parser = TranscoderBin.create_element (AUDIO_PARSER,
-                                                               AUDIO_PARSER);
-
-        if (layer == MP3Layer.THREE) {
-            // Best quality
-            encoder.quality = 0;
-        }
-
-        encoder.bitrate = 256;
-
-        var bin = new Bin ("audio-encoder-bin");
-        bin.add_many (convert, resample, encoder, parser);
-
-        var filter = Caps.from_string ("audio/x-raw-int");
-        convert.link_filtered (encoder, filter);
-        encoder.link (parser);
-
-        var pad = convert.get_static_pad ("sink");
-        var ghost = new GhostPad (sink_pad_name, pad);
-        bin.add_pad (ghost);
-
-        pad = parser.get_static_pad ("src");
-        ghost = new GhostPad (src_pad_name, pad);
-        bin.add_pad (ghost);
-
-        return bin;
-    }
-
     private void decodebin_pad_added (Element decodebin, Pad new_pad) {
         Pad enc_pad = this.audio_enc.get_pad (AUDIO_SINK_PAD);
         if (!new_pad.can_link (enc_pad)) {

Modified: trunk/src/rygel/rygel-mp3-transcoder.vala
==============================================================================
--- trunk/src/rygel/rygel-mp3-transcoder.vala	(original)
+++ trunk/src/rygel/rygel-mp3-transcoder.vala	Sat Mar 28 00:45:37 2009
@@ -24,6 +24,11 @@
 using Gst;
 
 internal class Rygel.MP3Transcoder : Rygel.Transcoder {
+    private const string AUDIO_CONVERT = "audioconvert";
+    private const string[] AUDIO_ENCODER = {null, "twolame", "lame"};
+    private const string AUDIO_PARSER = "mp3parse";
+    private const string AUDIO_RESAMPLE = "audioresample";
+
     private MP3Layer layer;
 
     public MP3Transcoder (MP3Layer layer) {
@@ -33,6 +38,45 @@
     }
 
     public override Element create_source (Element src) throws Error {
-        return new MP3TranscoderBin (src, this.layer);
+        return new MP3TranscoderBin (src, this);
+    }
+
+    public Element create_encoder (string?  src_pad_name,
+                                   string?  sink_pad_name)
+                                   throws Error {
+        dynamic Element convert = TranscoderBin.create_element (AUDIO_CONVERT,
+                                                                AUDIO_CONVERT);
+        dynamic Element resample = TranscoderBin.create_element (
+                                                    AUDIO_RESAMPLE,
+                                                    AUDIO_RESAMPLE);
+        dynamic Element encoder = TranscoderBin.create_element (
+                                                    AUDIO_ENCODER[this.layer],
+                                                    AUDIO_ENCODER[this.layer]);
+        dynamic Element parser = TranscoderBin.create_element (AUDIO_PARSER,
+                                                               AUDIO_PARSER);
+
+        if (this.layer == MP3Layer.THREE) {
+            // Best quality
+            encoder.quality = 0;
+        }
+
+        encoder.bitrate = 256;
+
+        var bin = new Bin ("audio-encoder-bin");
+        bin.add_many (convert, resample, encoder, parser);
+
+        var filter = Caps.from_string ("audio/x-raw-int");
+        convert.link_filtered (encoder, filter);
+        encoder.link (parser);
+
+        var pad = convert.get_static_pad ("sink");
+        var ghost = new GhostPad (sink_pad_name, pad);
+        bin.add_pad (ghost);
+
+        pad = parser.get_static_pad ("src");
+        ghost = new GhostPad (src_pad_name, pad);
+        bin.add_pad (ghost);
+
+        return bin;
     }
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]