From: Zeeshan Ali (Khattak) Date: Sat, 21 Mar 2009 13:55:05 +0000 (+0000) Subject: Convert MP2Transcoder into a more generic mpeg audio transcoder. X-Git-Tag: RYGEL_0_3~321 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d5d8bfa43135918a5706a8c3613ac92d3e420b41;p=profile%2Fivi%2Frygel.git Convert MP2Transcoder into a more generic mpeg audio transcoder. Convert MP2Transcoder into mpeg audio (layer 2 and 3) transcoder. svn path=/trunk/; revision=698 --- diff --git a/src/rygel/Makefile.am b/src/rygel/Makefile.am index 87ee594..653db39 100644 --- a/src/rygel/Makefile.am +++ b/src/rygel/Makefile.am @@ -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 \ diff --git a/src/rygel/rygel-mp2-transcoder.vala b/src/rygel/rygel-mp3-transcoder.vala similarity index 83% rename from src/rygel/rygel-mp2-transcoder.vala rename to src/rygel/rygel-mp3-transcoder.vala index ff4c5c0..d7a82b1 100644 --- a/src/rygel/rygel-mp2-transcoder.vala +++ b/src/rygel/rygel-mp3-transcoder.vala @@ -23,17 +23,21 @@ 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); diff --git a/src/rygel/rygel-transcode-manager.vala b/src/rygel/rygel-transcode-manager.vala index 8e853f4..d29112c 100644 --- a/src/rygel/rygel-transcode-manager.vala +++ b/src/rygel/rygel-transcode-manager.vala @@ -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 {