diff --git a/src/driver/fade.cpp b/src/driver/fade.cpp index 92a5fbe40..ae0fffd58 100644 --- a/src/driver/fade.cpp +++ b/src/driver/fade.cpp @@ -28,7 +28,7 @@ #include #include -#ifdef HAVE_COOL_HARDWARE +#if HAVE_COOL_HARDWARE #include #endif @@ -61,6 +61,9 @@ void COSDFader::StartFadeIn() #endif frameBuffer->setBlendLevel(fadeValue); +#if HAVE_SPARK_HARDWARE || HAVE_DUCKBOX_HARDWARE || (HAVE_COOL_HARDWARE && defined(BOXMODEL_APOLLO)) + usleep(60000); +#endif fadeTimer = g_RCInput->addTimer( FADE_TIME, false ); } @@ -90,10 +93,12 @@ void COSDFader::StopFade() if ( fadeIn || fadeOut ) { g_RCInput->killTimer(fadeTimer); #ifdef BOXMODEL_APOLLO - usleep(40000); frameBuffer->setBlendMode(CNXTFB_BLEND_MODE_PER_PIXEL); // Global alpha multiplied with pixel alpha #else frameBuffer->setBlendMode(1); // Global alpha multiplied with pixel alpha +#if HAVE_SPARK_HARDWARE || HAVE_DUCKBOX_HARDWARE || (HAVE_COOL_HARDWARE && defined(BOXMODEL_APOLLO)) + usleep(60000); +#endif #endif fadeIn = fadeOut = false; } @@ -122,6 +127,9 @@ bool COSDFader::FadeDone() frameBuffer->setBlendMode(CNXTFB_BLEND_MODE_PER_PIXEL); // Global alpha multiplied with pixel alpha #else frameBuffer->setBlendMode(1); // Global alpha multiplied with pixel alpha +#if HAVE_SPARK_HARDWARE || HAVE_DUCKBOX_HARDWARE || (HAVE_COOL_HARDWARE && defined(BOXMODEL_APOLLO)) + usleep(60000); +#endif #endif } else frameBuffer->setBlendLevel(fadeValue); diff --git a/src/gui/streaminfo2.cpp b/src/gui/streaminfo2.cpp index c748d906f..654602593 100644 --- a/src/gui/streaminfo2.cpp +++ b/src/gui/streaminfo2.cpp @@ -33,6 +33,7 @@ #include #include +#include #include #include #include @@ -55,7 +56,7 @@ extern cAudio * audioDecoder; extern CRemoteControl *g_RemoteControl; /* neutrino.cpp */ -CStreamInfo2::CStreamInfo2 () +CStreamInfo2::CStreamInfo2() : fader(g_settings.theme.menu_Content_alpha) { frameBuffer = CFrameBuffer::getInstance (); pip = NULL; @@ -121,9 +122,11 @@ int CStreamInfo2::exec (CMenuTarget * parent, const std::string &) frontend = CFEManager::getInstance()->getLiveFE(); + fader.StartFadeIn(); paint (paint_mode); int res = doSignalStrengthLoop (); hide (); + fader.StopFade(); return res; } @@ -133,7 +136,9 @@ int CStreamInfo2::doSignalStrengthLoop () #define BAR_HEIGHT 12 int res = menu_return::RETURN_REPAINT; + bool fadeout = false; neutrino_msg_t msg; + neutrino_msg_t postmsg = 0; uint64_t maxb, minb, lastb, tmp_rate; unsigned int current_pmt_version= pmt_version; int cnt = 0; @@ -151,6 +156,27 @@ int CStreamInfo2::doSignalStrengthLoop () uint64_t timeoutEnd = CRCInput::calcTimeoutEnd_MS (100); g_RCInput->getMsgAbsoluteTimeout (&msg, &data, &timeoutEnd); + if ((msg == NeutrinoMessages::EVT_TIMER) && (data == fader.GetFadeTimer())) + { + if (fader.FadeDone()) + { + break; + } + continue; + } + if (fadeout && msg == CRCInput::RC_timeout) + { + if (fader.StartFadeOut()) + { + msg = 0; + continue; + } + else + { + break; + } + } + if (!mp) { signal.sig = frontend->getSignalStrength() & 0xFFFF; signal.snr = frontend->getSignalNoiseRatio() & 0xFFFF; @@ -237,12 +263,12 @@ int CStreamInfo2::doSignalStrengthLoop () } else if(msg == CRCInput::RC_setup) { res = menu_return::RETURN_EXIT_ALL; - break; + fadeout = true; } else if(CNeutrinoApp::getInstance()->listModeKey(msg)) { - g_RCInput->postMsg (msg, 0); + postmsg = msg; res = menu_return::RETURN_EXIT_ALL; - break; + fadeout = true; } else if (msg == (neutrino_msg_t) g_settings.key_screenshot) { CNeutrinoApp::getInstance ()->handleMsg (msg, data); @@ -251,7 +277,7 @@ int CStreamInfo2::doSignalStrengthLoop () // -- any key --> abort if (msg <= CRCInput::RC_MaxRC) - break; + fadeout = true; // -- push other events if (msg > CRCInput::RC_MaxRC && msg != CRCInput::RC_timeout) @@ -260,6 +286,12 @@ int CStreamInfo2::doSignalStrengthLoop () delete signalbox; signalbox = NULL; ts_close (); + + if (postmsg) + { + g_RCInput->postMsg(postmsg, 0); + } + return res; } diff --git a/src/gui/streaminfo2.h b/src/gui/streaminfo2.h index f0808e9d1..ca7019659 100644 --- a/src/gui/streaminfo2.h +++ b/src/gui/streaminfo2.h @@ -31,6 +31,7 @@ #include +class COSDFader; class CStreamInfo2 : public CMenuTarget { private: @@ -39,6 +40,7 @@ class CStreamInfo2 : public CMenuTarget CFrontend *frontend; CComponentsPIP * pip; CMoviePlayerGui *mp; + COSDFader fader; int x; int y; int width;