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) \
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 \
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 (
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,
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);