]> git.webhop.me Git - logoview.git/commitdiff
patched for FULLHD mode and compatibility
authorMarkham <markham001@gmx.de>
Sat, 30 Sep 2017 19:19:38 +0000 (21:19 +0200)
committerMarkham <markham001@gmx.de>
Sat, 30 Sep 2017 19:19:38 +0000 (21:19 +0200)
jpeg.cpp
logoview.cpp
logoview.h

index 8ab5193826c326b0f7e5c6bbe4da37240cbab6ee..7ddaeb8c5423c36e295528b6717f7a2e92816ab5 100644 (file)
--- 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);
index 79805609b43795119fd86d9d9894a5a83be9a95f..82eb1ec9690e07557f6c26f1d7c88c77ad7e6202 100644 (file)
 #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] <timeout open framebuffer device>");
+                       exit(1);
+               }
+               count++;
+               usleep(100000);
+       }
+       if (count > 0)
+               printf("[logoview] <open framebuffer device OK>, waiting: %.1f sec\n", count/10.0);
+#else
        fb = open(FB_DEVICE, O_RDWR);
        if(fb == -1) {
                perror("[logoview] <open framebuffer device>");
                exit(1);
        }
+#endif
        if(ioctl(fb, FBIOGET_FSCREENINFO, &fix_screeninfo) == -1) {
                perror("[logoview] <FBIOGET_FSCREENINFO>\n");
                ClearThis();
index 0f7cb1160cb41fd0e8cda286895936cd5c7587bb..b6c5edbcbdd1682833637061313b2ad8cd76b2b9 100644 (file)
@@ -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;