diff --git a/src/driver/fb_generic.cpp b/src/driver/fb_generic.cpp index 8ea29b060..d9d327649 100644 --- a/src/driver/fb_generic.cpp +++ b/src/driver/fb_generic.cpp @@ -38,6 +38,7 @@ #include #include #include +#include #include #include #include @@ -50,6 +51,7 @@ #include #include #include +#include #include #include #include @@ -1546,15 +1548,24 @@ void CFrameBuffer::Clear() //memset(getFrameBufferPointer(), 0, stride * yRes); } -bool CFrameBuffer::showFrame(const std::string & filename) +bool CFrameBuffer::showFrame(const std::string & filename, bool fallback) { std::string picture = getIconPath(filename, ""); - if (access(picture.c_str(), F_OK) == 0){ - videoDecoder->ShowPicture(picture.c_str()); - return true; + if (access(picture.c_str(), F_OK) == 0) + { + if (videoDecoder->ShowPicture(picture.c_str())) + return true; + else + { + if (fallback) { + return g_PicViewer->DisplayImage(picture, 0, 0, getScreenWidth(true), getScreenHeight(true), TM_NONE); + } + else + dprintf(DEBUG_NORMAL,"[CFrameBuffer]\[%s - %d], fallback is disabled, paint of image was stopped: %s\n", __func__, __LINE__, picture.c_str()); + } } else - printf("[CFrameBuffer]\[%s - %d], image not found: %s\n", __func__, __LINE__, picture.c_str()); + dprintf(DEBUG_NORMAL,"[CFrameBuffer]\[%s - %d], image not found: %s\n", __func__, __LINE__, picture.c_str()); return false; } diff --git a/src/driver/fb_generic.h b/src/driver/fb_generic.h index 2fcf287fc..0efd15b27 100644 --- a/src/driver/fb_generic.h +++ b/src/driver/fb_generic.h @@ -266,7 +266,7 @@ class CFrameBuffer : public sigc::trackable void RestoreScreen(int x, int y, int dx, int dy, fb_pixel_t * const memp); void Clear(); - bool showFrame(const std::string & filename); + bool showFrame(const std::string & filename, bool fallback = false); void stopFrame(); bool loadBackgroundPic(const std::string & filename, bool show = true); bool Lock(void); diff --git a/src/gui/screensaver.cpp b/src/gui/screensaver.cpp index db213433d..e27ec98fe 100644 --- a/src/gui/screensaver.cpp +++ b/src/gui/screensaver.cpp @@ -302,7 +302,7 @@ void CScreenSaver::paint() dprintf(DEBUG_INFO, "[CScreenSaver] %s - %d : %s\n", __func__, __LINE__, v_bg_files.at(index).c_str()); #if HAVE_ARM_HARDWARE - m_frameBuffer->showFrame(v_bg_files.at(index)); + m_frameBuffer->showFrame(v_bg_files.at(index), true); #else paintImage(v_bg_files.at(index), 0, 0, m_frameBuffer->getScreenWidth(true), m_frameBuffer->getScreenHeight(true)); #endif @@ -322,7 +322,7 @@ void CScreenSaver::paint() scr_clock->setClockFont(g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_NUMBER]); scr_clock->disableSaveBg(); scr_clock->doPaintBg(false); - m_frameBuffer->showFrame("blackscreen.jpg"); + m_frameBuffer->showFrame("blackscreen.jpg", true); } scr_clock->setTextColor(clr.i_color);