diff options
author | Alexander Kojevnikov <alexander@kojevnikov.com> | 2011-02-24 09:19:55 +0800 |
---|---|---|
committer | Alexander Kojevnikov <alexander@kojevnikov.com> | 2011-02-24 09:19:55 +0800 |
commit | 12e07c0777e737216efea40337f3aaa0370b7a43 (patch) | |
tree | cf40d543de864c195e2f57c50b7e584c44f3de99 | |
parent | 5a448e1cfacdb49b73e473081aa47f8bd764eaa1 (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.c | 14 |
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; } |