summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Kojevnikov <alexander@kojevnikov.com>2011-02-24 09:19:55 +0800
committerAlexander Kojevnikov <alexander@kojevnikov.com>2011-02-24 09:19:55 +0800
commit12e07c0777e737216efea40337f3aaa0370b7a43 (patch)
treecf40d543de864c195e2f57c50b7e584c44f3de99
parent5a448e1cfacdb49b73e473081aa47f8bd764eaa1 (diff)
libbanshee: Add an audioresample element to the transcoding pipeline
This fixes transcoding for audio files with a non-standard sampling rate. Credits go to Tim-Philipp Müller for the analysis of the problem and to David Nielsen for his persuasion. Fixes bgo#635698
-rw-r--r--libbanshee/banshee-transcoder.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/libbanshee/banshee-transcoder.c b/libbanshee/banshee-transcoder.c
index 6e2bd7b75..aa288ecb5 100644
--- a/libbanshee/banshee-transcoder.c
+++ b/libbanshee/banshee-transcoder.c
@@ -44,7 +44,6 @@ struct GstTranscoder {
guint iterate_timeout_id;
GstElement *pipeline;
GstElement *sink_bin;
- GstElement *conv_elem;
gchar *output_uri;
GstTranscoderProgressCallback progress_cb;
GstTranscoderFinishedCallback finished_cb;
@@ -227,6 +226,7 @@ gst_transcoder_create_pipeline(GstTranscoder *transcoder,
GstElement *encoder_elem;
GstElement *sink_elem;
GstElement *conv_elem;
+ GstElement *resample_elem;
GstPad *encoder_pad;
if(transcoder == NULL) {
@@ -265,6 +265,12 @@ gst_transcoder_create_pipeline(GstTranscoder *transcoder,
return FALSE;
}
+ resample_elem = gst_element_factory_make("audioresample", "audioresample");
+ if(resample_elem == NULL) {
+ gst_transcoder_raise_error(transcoder, _("Could not create 'audioresample' plugin"), NULL);
+ return FALSE;
+ }
+
encoder_elem = gst_transcoder_build_encoder(encoder_pipeline);
if(encoder_elem == NULL) {
gst_transcoder_raise_error(transcoder, _("Could not create encoding pipeline"), encoder_pipeline);
@@ -277,8 +283,8 @@ gst_transcoder_create_pipeline(GstTranscoder *transcoder,
return FALSE;
}
- gst_bin_add_many(GST_BIN(transcoder->sink_bin), conv_elem, encoder_elem, sink_elem, NULL);
- gst_element_link_many(conv_elem, encoder_elem, sink_elem, NULL);
+ gst_bin_add_many(GST_BIN(transcoder->sink_bin), conv_elem, resample_elem, encoder_elem, sink_elem, NULL);
+ gst_element_link_many(conv_elem, resample_elem, encoder_elem, sink_elem, NULL);
gst_element_add_pad(transcoder->sink_bin, gst_ghost_pad_new("sink", encoder_pad));
gst_object_unref(encoder_pad);
@@ -293,8 +299,6 @@ gst_transcoder_create_pipeline(GstTranscoder *transcoder,
gst_bus_add_watch(gst_pipeline_get_bus(GST_PIPELINE(transcoder->pipeline)),
gst_transcoder_bus_callback, transcoder);
-
- transcoder->conv_elem = conv_elem;
return TRUE;
}