[banshee/gapless-ng: 828/836] [libbanshee] Make ReplayGain more error-resilient.
- From: Christopher James Halse Rogers <chrishr src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [banshee/gapless-ng: 828/836] [libbanshee] Make ReplayGain more error-resilient.
- Date: Thu, 25 Feb 2010 22:45:28 +0000 (UTC)
commit f7b83753cefea592d68041560501cea4f862369e
Author: Christopher James Halse Rogers <raof ubuntu com>
Date: Thu Feb 25 10:10:38 2010 +1100
[libbanshee] Make ReplayGain more error-resilient.
Do this by calling _bp_replaygain_pipeline_rebuild from _bp_pipeline_construct,
and only call the re-linking pad_block_cb when actually changing RG state.
libbanshee/banshee-player-replaygain.c | 21 ++++++++++++++-------
1 files changed, 14 insertions(+), 7 deletions(-)
---
diff --git a/libbanshee/banshee-player-replaygain.c b/libbanshee/banshee-player-replaygain.c
index 4105a20..cab4c94 100644
--- a/libbanshee/banshee-player-replaygain.c
+++ b/libbanshee/banshee-player-replaygain.c
@@ -51,22 +51,23 @@ pad_block_cb (GstPad *srcPad, gboolean blocked, gpointer user_data) {
g_return_if_fail (IS_BANSHEE_PLAYER (player));
if (player->rgvolume_in_pipeline == TRUE) {
- g_return_if_fail (player->rgvolume != NULL);
gst_element_unlink(player->before_rgvolume, player->rgvolume);
gst_element_unlink(player->rgvolume, player->after_rgvolume);
} else {
gst_element_unlink(player->before_rgvolume, player->after_rgvolume);
}
- if (player->rgvolume == NULL && player->replaygain_enabled == TRUE) {
- player->rgvolume = gst_element_factory_make ("rgvolume", NULL);
- gst_bin_add (GST_BIN (player->audiobin), player->rgvolume);
+ if (player->replaygain_enabled) {
+ player->rgvolume = _bp_rgvolume_new (player);
+ } else {
+ gst_bin_remove (GST_BIN (player->audiobin), player->rgvolume);
}
- if (player->replaygain_enabled == TRUE) {
+ if (player->replaygain_enabled && GST_IS_ELEMENT (player->rgvolume)) {
+ gst_bin_add (GST_BIN (player->audiobin), player->rgvolume);
gst_element_sync_state_with_parent(player->rgvolume);
- // link in rgvolume and connect to the real audio sink.
+ // link in rgvolume and connect to the real audio sink
gst_element_link (player->before_rgvolume, player->rgvolume);
gst_element_link (player->rgvolume, player->after_rgvolume);
player->rgvolume_in_pipeline = TRUE;
@@ -116,8 +117,14 @@ void _bp_rgvolume_print_volume(BansheePlayer *player)
void _bp_replaygain_pipeline_rebuild (BansheePlayer* player)
{
g_return_if_fail (IS_BANSHEE_PLAYER (player));
- g_return_if_fail (GST_IS_ELEMENT (player->before_rgvolume));
+ if ((player->replaygain_enabled && player->rgvolume_in_pipeline) ||
+ (!player->replaygain_enabled && !player->rgvolume_in_pipeline)) {
+ // The pipeline is already in the correct state. Do nothing.
+ return;
+ }
+
+ g_return_if_fail (GST_IS_ELEMENT (player->before_rgvolume));
GstPad* srcPad = gst_element_get_static_pad(player->before_rgvolume, "src");
if (gst_pad_is_active(srcPad) == TRUE && gst_pad_is_blocked (srcPad) == FALSE) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]