#include "imageloader.h" #include #include #include #include using namespace Magick; cImageLoader::cImageLoader() { InitializeMagick(NULL); logoExtension = "png"; } cImageLoader::~cImageLoader() { } cImage* cImageLoader::LoadLogo(const char *logo, int width, int height) { if( (width == 0) || (height==0) ) return NULL; std::string logoLower = logo; toLowerCase(logoLower); cString File = cString::sprintf("%s/%s.%s", *Config.logoPath, logoLower.c_str(), *logoExtension); #ifdef DEBUGIMAGELOADTIME dsyslog("imageloader load logo %s", *File); #endif cImage *img; uint32_t tick1 = GetMsTicks(); img = imgCache.GetImage( *File, width, height ); uint32_t tick2 = GetMsTicks(); #ifdef DEBUGIMAGELOADTIME dsyslog(" search in cache: %d ms", tick2 - tick1); #endif if( img != NULL ) return img; uint32_t tick3 = GetMsTicks(); bool success = LoadImage(File); uint32_t tick4 = GetMsTicks(); if( !success ) { dsyslog("imageloader LoadLogo: %s could not be loaded", *File); return NULL; } #ifdef DEBUGIMAGELOADTIME dsyslog(" load file from disk: %d ms", tick4 - tick3); #endif uint32_t tick5 = GetMsTicks(); img = CreateImage(width, height); uint32_t tick6 = GetMsTicks(); if( img == NULL ) return NULL; #ifdef DEBUGIMAGELOADTIME dsyslog(" scale logo: %d ms", tick6 - tick5); #endif imgCache.InsertImage(img, *File, width, height); return img; } cImage* cImageLoader::LoadIcon(const char *cIcon, int width, int height, bool preserveAspect) { if ((width == 0)||(height==0)) return NULL; cString File = cString::sprintf("%s%s/%s.%s", *Config.iconPath, Setup.OSDTheme, cIcon, *logoExtension); #ifdef DEBUGIMAGELOADTIME dsyslog("imageloader load icon %s", *File); #endif cImage *img; uint32_t tick1 = GetMsTicks(); img = imgCache.GetImage( *File, width, height ); uint32_t tick2 = GetMsTicks(); #ifdef DEBUGIMAGELOADTIME dsyslog(" search in cache: %d ms", tick2 - tick1); #endif if( img != NULL ) return img; uint32_t tick3 = GetMsTicks(); bool success = LoadImage(File); uint32_t tick4 = GetMsTicks(); #ifdef DEBUGIMAGELOADTIME dsyslog(" load file from disk: %d ms", tick4 - tick3); #endif if( !success ) { File = cString::sprintf("%s%s/%s.%s", *Config.iconPath, "default", cIcon, *logoExtension); #ifdef DEBUGIMAGELOADTIME dsyslog("imageloader load icon %s", *File); #endif uint32_t tick5 = GetMsTicks(); img = imgCache.GetImage( *File, width, height ); uint32_t tick6 = GetMsTicks(); #ifdef DEBUGIMAGELOADTIME dsyslog(" search in cache: %d ms", tick6 - tick5); #endif if( img != NULL ) return img; uint32_t tick7 = GetMsTicks(); success = LoadImage(File); uint32_t tick8 = GetMsTicks(); #ifdef DEBUGIMAGELOADTIME dsyslog(" load file from disk: %d ms", tick8 - tick7); #endif if( !success ) { dsyslog("imageloader LoadIcon: %s could not be loaded", *File); return NULL; } } uint32_t tick9 = GetMsTicks(); img = CreateImage(width, height); uint32_t tick10 = GetMsTicks(); #ifdef DEBUGIMAGELOADTIME dsyslog(" scale logo: %d ms", tick10 - tick9); #endif if( img == NULL ) return NULL; imgCache.InsertImage(img, *File, width, height); return img; } void cImageLoader::toLowerCase(std::string &str) { const int length = str.length(); for(int i=0; i < length; ++i) { str[i] = std::tolower(str[i]); } }