From b7b0e7f7eff304de839c92ede4378e839527493f Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Thu, 28 Feb 2013 23:27:12 +0100 Subject: [PATCH 1/4] Load does no longer block, refs #8 --- GstreamerHelper/GstreamerAudioStream.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/GstreamerHelper/GstreamerAudioStream.cpp b/GstreamerHelper/GstreamerAudioStream.cpp index 6dd00bf9..75a6b012 100644 --- a/GstreamerHelper/GstreamerAudioStream.cpp +++ b/GstreamerHelper/GstreamerAudioStream.cpp @@ -45,6 +45,9 @@ GstreamerAudioStream::~GstreamerAudioStream(void) Close(); } +// Loads a stream but does not wait for it to get initialized, +// so querying duration or position directly after initialization might +// return strange values! To work around this use the prescan load function! int GstreamerAudioStream::Load(const wchar_t* Media) { Element = gst_element_factory_make("playbin", "playbin"); @@ -71,15 +74,18 @@ int GstreamerAudioStream::Load(const wchar_t* Media) g_object_set(Element, "flags", GST_PLAY_FLAG_AUDIO, NULL); gst_element_set_state(Element, GST_STATE_PAUSED); - gst_bus_timed_pop_filtered(Bus, -1, GST_MESSAGE_ASYNC_DONE); + //gst_bus_timed_pop_filtered(Bus, -1, GST_MESSAGE_ASYNC_DONE); RefreshDuration(); return ID; } +//Loads a stream and waits for its initialization int GstreamerAudioStream::Load(const wchar_t* Media, bool Prescan) { Load(Media); + if(Prescan) + gst_bus_timed_pop_filtered(Bus, -1, GST_MESSAGE_ASYNC_DONE); return ID; } From 1f01e271355a1293b3f405f2ddf03b92451ad27b Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Fri, 1 Mar 2013 17:42:48 +0100 Subject: [PATCH 2/4] Fixed memory leaks in Close() --- GstreamerHelper/GstreamerAudioStream.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/GstreamerHelper/GstreamerAudioStream.cpp b/GstreamerHelper/GstreamerAudioStream.cpp index 75a6b012..776db6b3 100644 --- a/GstreamerHelper/GstreamerAudioStream.cpp +++ b/GstreamerHelper/GstreamerAudioStream.cpp @@ -93,21 +93,22 @@ void GstreamerAudioStream::Close(void) { if(Element) gst_element_set_state(Element, GST_STATE_NULL); - if(Bus) - g_object_unref(Bus); + gst_object_unref(Bus); if(Element) - g_object_unref(Element); + gst_object_unref(Element); + if(Message) + gst_message_unref(Message); if(Convert) - g_object_unref(Convert); + gst_object_unref(Convert); if(Audiosink) - g_object_unref(Audiosink); + gst_object_unref(Audiosink); if(Pad) - g_object_unref(Pad); + gst_object_unref(Pad); if(GhostPad) - g_object_unref(GhostPad); + gst_object_unref(GhostPad); if(SinkBin) - g_object_unref(SinkBin); + gst_object_unref(SinkBin); if(FadeTimer) g_timer_destroy (FadeTimer); From 38a7a2208ef88c78e086df6f134bb7796e2b672a Mon Sep 17 00:00:00 2001 From: Michael W Date: Sun, 3 Mar 2013 14:38:31 +0100 Subject: [PATCH 3/4] fixed fading bug --- GstreamerHelper/GstreamerAudioStream.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/GstreamerHelper/GstreamerAudioStream.cpp b/GstreamerHelper/GstreamerAudioStream.cpp index 6dd00bf9..8b2217db 100644 --- a/GstreamerHelper/GstreamerAudioStream.cpp +++ b/GstreamerHelper/GstreamerAudioStream.cpp @@ -220,14 +220,14 @@ void GstreamerAudioStream::FadeAndPause(float TargetVolume, float Seconds) { PauseStreamAfterFade = true; - Fade(TargetVolume, FadeTime); + Fade(TargetVolume, Seconds); } void GstreamerAudioStream::FadeAndStop(float TargetVolume, float Seconds) { CloseStreamAfterFade = true; - Fade(TargetVolume, FadeTime); + Fade(TargetVolume, Seconds); } bool GstreamerAudioStream::IsPlaying() From 93f2866ead6d4ff4c00979b0e7957401876a61a6 Mon Sep 17 00:00:00 2001 From: Michael W Date: Sun, 3 Mar 2013 19:31:28 +0100 Subject: [PATCH 4/4] fixed duet lyrics disappearing when cycling player info display --- Vocaluxe/Screens/CScreenSing.cs | 44 +++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/Vocaluxe/Screens/CScreenSing.cs b/Vocaluxe/Screens/CScreenSing.cs index 0273cc9a..9715258a 100644 --- a/Vocaluxe/Screens/CScreenSing.cs +++ b/Vocaluxe/Screens/CScreenSing.cs @@ -210,6 +210,8 @@ namespace Vocaluxe.Screens CConfig.PlayerInfo = (EPlayerInfo)mode; CConfig.SaveConfig(); SetVisibility(); + if (CGame.GetSong() != null) + SetDuetLyricsVisibility(CGame.GetSong().IsDuet); //make sure duet lyrics remain visible break; case Keys.S: @@ -635,7 +637,7 @@ namespace Vocaluxe.Screens SingNotes[htSingNotes(SingBars)].Reset(); - bool LyricsOnTop = (CGame.NumPlayer != 1) && CConfig.LyricsOnTop == EOffOn.TR_CONFIG_ON; + if (song.IsDuet) { Texts[htTexts(TextDuetName1)].Text = song.DuetPart1; @@ -659,24 +661,9 @@ namespace Vocaluxe.Screens CGame.Player[i].LineNr = duet_player[i]; } } - Statics[htStatics(StaticLyricsDuet)].Visible = true; - Lyrics[htLyrics(LyricMainDuet)].Visible = true; - Lyrics[htLyrics(LyricSubDuet)].Visible = true; - - Lyrics[htLyrics(LyricMainTop)].Visible = false; - Lyrics[htLyrics(LyricSubTop)].Visible = false; - Statics[htStatics(StaticLyricsTop)].Visible = false; - } - else - { - Statics[htStatics(StaticLyricsDuet)].Visible = false; - Lyrics[htLyrics(LyricMainDuet)].Visible = false; - Lyrics[htLyrics(LyricSubDuet)].Visible = false; - - Lyrics[htLyrics(LyricMainTop)].Visible = LyricsOnTop; - Lyrics[htLyrics(LyricSubTop)].Visible = LyricsOnTop; - Statics[htStatics(StaticLyricsTop)].Visible = LyricsOnTop; + } + SetDuetLyricsVisibility(song.IsDuet); for (int p = 0; p < CGame.NumPlayer; p++) { @@ -711,6 +698,27 @@ namespace Vocaluxe.Screens StartSong(); } + private void SetDuetLyricsVisibility(bool isDuet) + { + Statics[htStatics(StaticLyricsDuet)].Visible = isDuet; + Lyrics[htLyrics(LyricMainDuet)].Visible = isDuet; + Lyrics[htLyrics(LyricSubDuet)].Visible = isDuet; + + if (isDuet) + { + Lyrics[htLyrics(LyricMainTop)].Visible = false; + Lyrics[htLyrics(LyricSubTop)].Visible = false; + Statics[htStatics(StaticLyricsTop)].Visible = false; + } + else + { + bool LyricsOnTop = (CGame.NumPlayer != 1) && CConfig.LyricsOnTop == EOffOn.TR_CONFIG_ON; + Lyrics[htLyrics(LyricMainTop)].Visible = LyricsOnTop; + Lyrics[htLyrics(LyricSubTop)].Visible = LyricsOnTop; + Statics[htStatics(StaticLyricsTop)].Visible = LyricsOnTop; + } + } + private void StartSong() { PrepareTimeLine();