From c87ebf94563f5132cb27473dd186174f1420f7d1 Mon Sep 17 00:00:00 2001 From: Markham Date: Sat, 30 Sep 2017 21:19:38 +0200 Subject: [PATCH] patched for FULLHD mode and compatibility --- jpeg.cpp | 4 +-- logoview.cpp | 78 ++++++++++++++++++++++++++++++++++++++++------------ logoview.h | 2 +- 3 files changed, 63 insertions(+), 21 deletions(-) diff --git a/jpeg.cpp b/jpeg.cpp index 8ab5193..7ddaeb8 100644 --- a/jpeg.cpp +++ b/jpeg.cpp @@ -133,7 +133,7 @@ int jpeg_getsize(const char *filename,int *x,int *y, int wanted_width, int wante struct jpeg_decompress_struct *ciptr; struct r_jpeg_error_mgr emgr; - int px,py,c; + int px,py/*,c*/; FILE *fh; ciptr=&cinfo; if(!(fh=fopen(filename,"rb"))) return(FH_ERROR_FILE); @@ -168,7 +168,7 @@ int jpeg_getsize(const char *filename,int *x,int *y, int wanted_width, int wante jpeg_start_decompress(ciptr); px=ciptr->output_width; py=ciptr->output_height; - c=ciptr->output_components; +// c=ciptr->output_components; *x=px; *y=py; // jpeg_finish_decompress(ciptr); diff --git a/logoview.cpp b/logoview.cpp index 7980560..82eb1ec 100644 --- a/logoview.cpp +++ b/logoview.cpp @@ -48,11 +48,12 @@ #include "logoview.h" #include "jpeg.h" -#define LV_VERSION "1.01" +#define LV_VERSION "1.01c" #define VERSIONSTR "\n\ - ------------------------------------------------------------\n\ + -------------------------------------------------------------\n\ -- logoview v" LV_VERSION " * (C)2011-2012, M. Liebmann (micha-bbg) --\n\ - ------------------------------------------------------------\n\n" + -- patched for Keywelt by Markham --\n\ + -------------------------------------------------------------\n\n" #define FLAG_FILE "/tmp/.logoview" #define NEUTRINO_CONF "/var/tuxbox/config/neutrino.conf" #define FB_DEVICE "/dev/fb/0" @@ -73,6 +74,7 @@ CLogoView::CLogoView() screen_EndX = 0; screen_EndY = 0; screen_preset = 0; + osd_resolution = -1; lfb = 0; PicBuf = 0; TmpBuf = 0; @@ -113,16 +115,16 @@ TIMER_STOP("[logoview] SetScreenBuf "); void CLogoView::ClearThis(bool ClearDisplay/*=true*/) { unlink(FLAG_FILE); - if (lfb > 0) { + if (lfb) { if (ClearDisplay) SetScreenBuf(lfb, 0x00, 0x00, 0x00, 0x00); // clear screen munmap(lfb, fix_screeninfo.smem_len); } - if (PicBuf > 0) + if (PicBuf) free(PicBuf); - if (TmpBuf > 0) + if (TmpBuf) free(TmpBuf); - if (ScBuf > 0) + if (ScBuf) free(ScBuf); if (fb > 0) close(fb); @@ -149,31 +151,53 @@ bool CLogoView::ReadConfig() { char buf1[512] = ""; char buf2[512] = ""; - FILE *fv = fopen(NEUTRINO_CONF, "r"); + FILE *fv; - screen_StartX=5; - screen_StartY=5; - screen_EndX=1275; - screen_EndY=715; + if (var_screeninfo.xres == 1920) { + screen_StartX = 22; + screen_StartY = 22; + screen_EndX = 1898; + screen_EndY = 1058; + } + else { + screen_StartX = 15; + screen_StartY = 15; + screen_EndX = 1265; + screen_EndY = 705; + } - if(!noconf && fv) { + if(!noconf && (fv = fopen(NEUTRINO_CONF,"r")) != NULL) { while(fgets(buf1, sizeof(buf1), fv) != NULL) { sscanf(buf1, "screen_preset=%2d", &screen_preset); + sscanf(buf1, "osd_resolution=%2d", &osd_resolution); } fclose(fv); ScreenMode = (screen_preset) ? "lcd" : "crt"; fv = fopen(NEUTRINO_CONF, "r"); if(fv) { while(fgets(buf1, sizeof(buf1), fv) != NULL) { - sprintf(buf2, "screen_StartX_%s=%%4d", ScreenMode.c_str()); + if (osd_resolution == -1) + sprintf(buf2,"screen_StartX_%s", ScreenMode.c_str()); + else + sprintf(buf2,"screen_StartX_%s_%d=%%4d", ScreenMode.c_str(), osd_resolution); sscanf(buf1, buf2, &screen_StartX); - sprintf(buf2, "screen_StartY_%s=%%4d", ScreenMode.c_str()); + if (osd_resolution == -1) + sprintf(buf2,"screen_StartY_%s", ScreenMode.c_str()); + else + sprintf(buf2,"screen_StartY_%s_%d=%%4d", ScreenMode.c_str(), osd_resolution); sscanf(buf1, buf2, &screen_StartY); - sprintf(buf2, "screen_EndX_%s=%%4d", ScreenMode.c_str()); + if (osd_resolution == -1) + sprintf(buf2,"screen_EndX_%s", ScreenMode.c_str()); + else + sprintf(buf2,"screen_EndX_%s_%d=%%4d", ScreenMode.c_str(), osd_resolution); sscanf(buf1, buf2, &screen_EndX); - sprintf(buf2, "screen_EndY_%s=%%4d", ScreenMode.c_str()); + if (osd_resolution == -1) + sprintf(buf2,"screen_EndY_%s", ScreenMode.c_str()); + else + sprintf(buf2,"screen_EndY_%s_%d=%%4d", ScreenMode.c_str(), osd_resolution); sscanf(buf1, buf2, &screen_EndY); } +// printf("\n##### [%s] screen_StartX: %d, screen_StartY: %d, screen_EndX: %d, screen_EndY: %d\n \n", __FUNCTION__, screen_StartX, screen_StartY, screen_EndX, screen_EndY); fclose(fv); } } @@ -202,6 +226,7 @@ void CLogoView::PrintHelp() --------\n\ -l | --logo Path to logofile (jpg only)\n\ -b | --background Run in background\n\ + -n | --noconf Without config\n\ -t | --timeout Timeout in sec. (default 0 = no timeout)\n\ -c | --clearscreen Clear screen when timeout (default = no)\n\ -h | --help This help\n\ @@ -269,12 +294,29 @@ int CLogoView::run(int argc, char* argv[]) default: return 0; } } - +#if 1 + fb = -1; + int count = 0; + // waiting for framebuffer device + while (fb == -1) { + fb = open(FB_DEVICE, O_RDWR); + if (fb != -1) break; + if (count >= 80) { // 8 sec + perror("[logoview] "); + exit(1); + } + count++; + usleep(100000); + } + if (count > 0) + printf("[logoview] , waiting: %.1f sec\n", count/10.0); +#else fb = open(FB_DEVICE, O_RDWR); if(fb == -1) { perror("[logoview] "); exit(1); } +#endif if(ioctl(fb, FBIOGET_FSCREENINFO, &fix_screeninfo) == -1) { perror("[logoview] \n"); ClearThis(); diff --git a/logoview.h b/logoview.h index 0f7cb11..b6c5edb 100644 --- a/logoview.h +++ b/logoview.h @@ -80,7 +80,7 @@ class CLogoView struct fb_var_screeninfo var_screeninfo; std::string nomem, start_logo, ScreenMode; unsigned int screen_StartX, screen_StartY, screen_EndX, screen_EndY; - int screen_preset, fb; + int screen_preset, fb, osd_resolution; time_t timeout; bool clearScreen, background, noconf; -- 2.39.5