]> git.webhop.me Git - logomask.git/commitdiff
logomask: analyze zoom factor in 4:3 mode
authorGetAway <get-away@t-online.de>
Sat, 17 Mar 2018 11:23:06 +0000 (12:23 +0100)
committerGetAway <get-away@t-online.de>
Sat, 17 Mar 2018 11:23:06 +0000 (12:23 +0100)
- thx SnowHead for source code
- bump version logomask 1.2
- bump version logoset 1.2a

gfx.c
logomask.c
logoset.c
logoset.h
readme.txt [new file with mode: 0644]

diff --git a/gfx.c b/gfx.c
index 8898b144af1deb434a08432b18c2e63ad75813df..4fa1b49d33998a1b0c3ddb37cbf7779318fefcf6 100644 (file)
--- a/gfx.c
+++ b/gfx.c
@@ -19,28 +19,40 @@ void RenderBox(int sx, int sy, int ex, int ey, int mode, gpixel *pix)
                
        if (sx<0)
        {
-               printf("[gfx.c] RenderBox called with sx < 0 (%d)\n", dxx);
+//             printf("[gfx.c] RenderBox called with sx < 0 (%d)\n", dxx);
                sx=0;
        }
 
        if (sy<0)
        {
-               printf("[gfx.c] RenderBox called with sy < 0 (%d)\n", dxx);
+//             printf("[gfx.c] RenderBox called with sy < 0 (%d)\n", dxx);
                sy=0;
        }
 
        if (dxx<0) 
        {
-               printf("[gfx.c] RenderBox called with dx < 0 (%d)\n", dxx);
+//             printf("[gfx.c] RenderBox called with dx < 0 (%d)\n", dxx);
                dxx=0;
        }
 
        if (dyy<0)
        {
-               printf("[gfx.c] RenderBox called with dyy < 0 (%d)\n", dxx);
+//             printf("[gfx.c] RenderBox called with dyy < 0 (%d)\n", dyy);
                dyy=0;
        }
 
+       if ((sx+dxx)>var_screeninfo.xres)
+       {
+//             printf("[gfx.c] RenderBox called with (sx+dx) > xres (%d)\n", sx+dxx);
+               dxx=var_screeninfo.xres-sx;
+       }
+
+       if ((sy+dyy)>var_screeninfo.yres)
+       {
+//             printf("[gfx.c] RenderBox called with (sy+dy) > yres (%d)\n", sy+dyy);
+               dyy=var_screeninfo.yres-sy;
+       }
+
        if(mode==FILL)
        {
                for (count=0; count<dyy; count++)
index 6d0534ad34df3d8953dcec4933bc55deb4bfeadc..3f1e23b8872812b8e83da927b615ec94521406e0 100644 (file)
@@ -10,7 +10,7 @@ extern int FSIZE_SMALL;
 #define NCF_FILE "/var/tuxbox/config/neutrino.conf"
 #define CFG_FILE "/var/tuxbox/config/logomask.conf"
 
-#define CL_VERSION  "1.01"
+#define CL_VERSION  "1.2"
 #define MAX_MASK 16
 
 //                                     TRANSP, BLACK,  RED,    GREEN,  YELLOW, BLUE,   MAGENTA, TURQUOISE,
@@ -32,6 +32,7 @@ unsigned char
 unsigned char *lfb = 0, *lbb = 0;
 char tstr[BUFSIZE];
 int xpos=0,ypos=0,sdat=0,big=0,secs=1;
+int wxh, wyh;
 gpixel lpix;
 
 void TrimString(char *strg)
@@ -58,6 +59,7 @@ char *pt1=strg, *pt2=strg;
                strg[strlen(strg)-1]=0;
        }
 }
+
 int Read_Neutrino_Cfg(char *entry)
 {
 FILE *nfh;
@@ -86,16 +88,74 @@ int rv=-1;
        return rv;
 }
 
+void xscal(int *xp, int *xw, int sxp, int sxw, double scal)
+{
+       int xe=sxp+sxw,lxp,lxw;
+
+       lxp=sxp;
+       if(sxp<wxh)
+               lxp=wxh-(wxh-sxp)*scal;
+       else
+               lxp=wxh+(sxp-wxh)*scal;
+       if(lxp<0)
+               lxp=0;
+       if(lxp>=var_screeninfo.xres)
+               lxp=var_screeninfo.xres-1;
+       if(xe<wxh)
+               xe=wxh-(wxh-xe)*scal;
+       else
+               xe=wxh+(xe-wxh)*scal;
+       if(xe<0)
+               xe=0;
+       if(xe>=var_screeninfo.xres)
+               xe=var_screeninfo.xres-1;
+       lxw=xe-lxp;
+       if((lxp+lxw)>=var_screeninfo.xres)
+               lxw=var_screeninfo.xres-lxw-1;
+       *xp=lxp;
+       *xw=lxw;
+}
+
+void yscal(int *yp, int *yw, int syp, int syw, double scal)
+{
+       int ye=syp+syw,lyp,lyw;
+
+       lyp=syp;
+       if(syp<wyh)
+               lyp=wyh-(wyh-syp)*scal;
+       else
+               lyp=wyh+(syp-wyh)*scal;
+       if(lyp<0)
+               lyp=0;
+       if(lyp>=var_screeninfo.yres)
+               lyp=var_screeninfo.yres-1;
+       if(ye<wyh)
+               ye=wyh-(wyh-ye)*scal;
+       else
+               ye=wyh+(ye-wyh)*scal;
+       if(ye<0)
+               ye=0;
+       if(ye>=var_screeninfo.yres)
+               ye=var_screeninfo.yres-1;
+       lyw=ye-lyp;
+       if((lyp+lyw)>=var_screeninfo.yres)
+               lyw=var_screeninfo.yres-lyw-1;
+       *yp=lyp;
+       *yw=lyw;
+}
+
 /******************************************************************************
  * logomask Main
  ******************************************************************************/
 
+
 int main (int argc, char **argv)
 {
-       int i,j,m,found,loop=1,mask=0,test=0,pmode=0,lmode=0,mchanged=1,cchanged=2,mwait;
+       int i,j,m,found,loop=1,mask=0,test=0,pmode=0,lmode=0,pmode43=1,lmode43=1,mchanged=1,mchanged43=1,cchanged=2,mwait,tv;
        unsigned char lastchan[20]="", actchan[20]=""/*,channel[128]=""*/;
-       int xp[MAX_MASK][8],yp[MAX_MASK][8],xw[MAX_MASK][8],yw[MAX_MASK][8],valid[MAX_MASK],xxp,xxw,yyp,yyw,nmsk=0;
+       int xp[4][MAX_MASK][8],yp[4][MAX_MASK][8],xw[4][MAX_MASK][8],yw[4][MAX_MASK][8],valid[MAX_MASK],xxp,xxw,yyp,yyw,nmsk=0;
        gpixel tp, cmc, mc[MAX_MASK];
+       double sc131=1.16666666667, sc132=1.193, sc23=1.33333333333;
        FILE *fh;
        char *cpt1,*cpt2;
        
@@ -106,8 +166,9 @@ int main (int argc, char **argv)
                printf("logomask Version %s\n",CL_VERSION);
                if((mwait=Read_Neutrino_Cfg("timing.infobar"))<0)
                        mwait=6;
-               
-//             mwait-=1;
+               if((tv=Read_Neutrino_Cfg("video_Format"))<0)
+                       tv=3;
+               --tv;
 
                fb = open(FB_DEVICE, O_RDWR);
 
@@ -140,11 +201,31 @@ int main (int argc, char **argv)
                memset(lbb, 0, fix_screeninfo.line_length*var_screeninfo.yres);
 
        // if problem with config file return from plugin
+               wxh=var_screeninfo.xres>>1;
+               wyh=var_screeninfo.yres>>1;
 
                while(loop)
                {
                        sleep(1);
                        mchanged=0;
+                       if(access("/tmp/.logomask_pause",0)!=-1)
+                               continue;
+                       i=0;
+                       system("wget -Y off -q -O /tmp/logomask.stat http://localhost/control/zapto?statussectionsd");
+                       if((fh=fopen("/tmp/logomask.stat","r"))!=NULL)
+                       {
+                               if(fgets(tstr,500,fh))
+                               {
+                                       TrimString(tstr);
+                                       if(strlen(tstr))
+                                       {
+                                               sscanf(tstr,"%d",&i);
+                                       }
+                               }
+                               fclose(fh);
+                       }
+                       if(i!=1)
+                               continue;
                        system("pzapit -var > /tmp/logomaskset.stat");
                        if((fh=fopen("/tmp/logomaskset.stat","r"))!=NULL)
                        {
@@ -168,6 +249,32 @@ int main (int argc, char **argv)
                                fclose(fh);
                        }
 
+                       if(tv>1)
+                       {
+                               system("pzapit -vm43 > /tmp/logomaskset.stat");
+                               if((fh=fopen("/tmp/logomaskset.stat","r"))!=NULL)
+                               {
+                                       if(fgets(tstr,500,fh))
+                                       {
+                                               TrimString(tstr);
+                                               if(strlen(tstr))
+                                               {
+                                                       lmode43=pmode43;
+                                                       if(sscanf(tstr+strlen(tstr)-1,"%d",&i)!=1)
+                                                       {
+                                                               pmode43=0;
+                                                       }
+                                                       else
+                                                       {
+                                                               mchanged43=(pmode43!=i);
+                                                               pmode43=i;
+                                                       }
+                                               }
+                                       }
+                                       fclose(fh);
+                               }
+                       }
+
                        system("pzapit -gi > /tmp/logomask.chan");
                        if((fh=fopen("/tmp/logomask.chan","r"))!=NULL)
                        {
@@ -181,7 +288,7 @@ int main (int argc, char **argv)
                                if(strlen(tstr))
                                {
                                        strcpy(actchan,tstr);
-                                       cchanged=(cchanged==2)?3:((strcmp(actchan,lastchan)?1:0));
+                                       cchanged=(cchanged==2)?3:((mchanged43 || (strcmp(actchan,lastchan))?1:0));
                                        if(mchanged || cchanged)
                                        {
                                                found=0;
@@ -189,7 +296,7 @@ int main (int argc, char **argv)
                                                {
                                                        if(cchanged==1)
                                                        {
-                                                               sleep(mwait);
+                                                               sleep((mchanged43)?3:mwait);
                                                        }
                                                        cchanged=1;
                                                }
@@ -199,16 +306,16 @@ int main (int argc, char **argv)
                                                        {
                                                                if(valid[m])
                                                                {
-                                                                       xxp=xp[m][lmode];
-                                                                       xxw=xw[m][lmode];                               
-                                                                       yyp=yp[m][lmode];
-                                                                       yyw=yw[m][lmode];
+                                                                       xxp=xp[lmode43][m][lmode];
+                                                                       xxw=xw[lmode43][m][lmode];
+                                                                       yyp=yp[lmode43][m][lmode];
+                                                                       yyw=yw[lmode43][m][lmode];
                                                                        make_color(TRANSP, &cmc);
-                                                                       RenderBox(xxp, yyp, xxp+xxw, yyp+yyw, FILL,&cmc);
+                                                                       RenderBox(xxp, yyp, xxp+abs(xxw), yyp+yyw, FILL,&cmc);
                                                                        for(i=0;i<=yyw;i++)
                                                                        {
                                                                                j=(yyp+i)*fix_screeninfo.line_length+(xxp<<2);
-                                                                               if((j+(xxw<<2))<fix_screeninfo.line_length*var_screeninfo.yres)
+                                                                               if((j+(xxw<<2))<=fix_screeninfo.line_length*var_screeninfo.yres)
                                                                                {
                                                                                        memcpy(lfb+j, lbb+j, xxw<<2);
                                                                                }
@@ -251,10 +358,23 @@ int main (int argc, char **argv)
                                                                                                cpt1++;
                                                                                                if(sscanf(cpt1,"%d,%d,%d,%d",&xxp,&xxw,&yyp,&yyw)==4)
                                                                                                {
-                                                                                                       xp[nmsk][i]=xxp;
-                                                                                                       xw[nmsk][i]=xxw;
-                                                                                                       yp[nmsk][i]=yyp;
-                                                                                                       yw[nmsk][i]=yyw;
+                                                                                                       xp[1][nmsk][i]=xxp;
+                                                                                                       xw[1][nmsk][i]=xxw;
+                                                                                                       yp[1][nmsk][i]=yyp;
+                                                                                                       yw[1][nmsk][i]=yyw;
+                                                                                                       if(tv>1)
+                                                                                                       { // todo 14:9-Fernseher beruecksichtigen
+                                                                                                               // Pan & Scan
+                                                                                                               xscal(&(xp[0][nmsk][i]),&(xw[0][nmsk][i]),xxp,xxw,sc23);
+                                                                                                               yscal(&(yp[0][nmsk][i]),&(yw[0][nmsk][i]),yyp,yyw,sc23);
+                                                                                                               // Vollbild
+                                                                                                               xscal(&(xp[2][nmsk][i]),&(xw[2][nmsk][i]),xxp,xxw,sc23);
+                                                                                                               yp[2][nmsk][i]=yyp;
+                                                                                                               yw[2][nmsk][i]=yyw;
+                                                                                                               // Pan & Scan 14:9
+                                                                                                               xscal(&(xp[3][nmsk][i]),&(xw[3][nmsk][i]),xxp,xxw,sc131);
+                                                                                                               yscal(&(yp[3][nmsk][i]),&(yw[3][nmsk][i]),yyp,yyw,sc132);
+                                                                                                       }
                                                                                                        mc[nmsk].lpixel=cmc.lpixel;
                                                                                                        found=1;
                                                                                                        valid[nmsk]=1;
@@ -279,24 +399,29 @@ int main (int argc, char **argv)
                        }
                        if(mask)
                        {
+//printf("[logomask] pmode=%d,pmode43=%d\n",pmode,pmode43);
                                for(m=0; m<nmsk; m++)
                                {
                                        if(valid[m])
                                        {
-                                               xxp=xp[m][pmode];
-                                               xxw=xw[m][pmode];                               
-                                               yyp=yp[m][pmode];
-                                               yyw=yw[m][pmode];
-                                               cmc.lpixel=mc[m].lpixel;
-                                               RenderBox(xxp, yyp, xxp+xxw, yyp+yyw, (test)?GRID:FILL, &cmc);
-                                               for(i=0;i<=yyw;i++)
+                                               xxw=xw[pmode43][m][pmode];
+                                               if(xxw>0)
                                                {
-                                                       j=(yyp+i)*fix_screeninfo.line_length+(xxp<<2);
-                                                       if((j+(xxw<<2))<fix_screeninfo.line_length*var_screeninfo.yres)
+                                                       xxp=xp[pmode43][m][pmode];
+                                                       yyp=yp[pmode43][m][pmode];
+                                                       yyw=yw[pmode43][m][pmode];
+                                                       cmc.lpixel=mc[m].lpixel;
+                                                       RenderBox(xxp, yyp, xxp+xxw, yyp+yyw, (test)?GRID:FILL, &cmc);
+                                                       for(i=0;i<=yyw;i++)
                                                        {
-                                                               memcpy(lfb+j, lbb+j, xxw<<2);
+                                                               j=(yyp+i)*fix_screeninfo.line_length+(xxp<<2);
+                                                               if((j+(xxw<<2))<=fix_screeninfo.line_length*var_screeninfo.yres)
+                                                               {
+                                                                       memcpy(lfb+j, lbb+j, xxw<<2);
+                                                               }
                                                        }
                                                }
+//printf("[logomask]mask%d: xxp=%d, xxw=%d, yyp=%d, yyw=%d\n",m+1,xxp,xxw,yyp,yyw);
                                        }
                                }
                        }
@@ -315,15 +440,15 @@ int main (int argc, char **argv)
        {
                if(valid[m])
                {
-                       xxp=xp[m][pmode];
-                       xxw=xw[m][pmode];                               
-                       yyp=yp[m][pmode];
-                       yyw=yw[m][pmode];
-                       RenderBox(xxp, yyp, xxp+xxw, yyp+yyw, FILL, &cmc);
+                       xxp=xp[pmode43][m][pmode];
+                       xxw=xw[pmode43][m][pmode];
+                       yyp=yp[pmode43][m][pmode];
+                       yyw=yw[pmode43][m][pmode];
+                       RenderBox(xxp, yyp, xxp+abs(xxw), yyp+yyw, FILL, &cmc);
                        for(i=0;i<=yyw;i++)
                        {
                                j=(yyp+i)*fix_screeninfo.line_length+(xxp<<2);
-                               if((j+(xxw<<2))<fix_screeninfo.line_length*var_screeninfo.yres)
+                               if((j+(xxw<<2))<=fix_screeninfo.line_length*var_screeninfo.yres)
                                {
                                        memcpy(lfb+j, lbb+j, xxw<<2);
                                }
index 7b811f3c704f31e50571d5f9178fbe92888a6f90..3ff0d82081f6a02c48769ba3dfd5d932021b6d6b 100644 (file)
--- a/logoset.c
+++ b/logoset.c
@@ -1,5 +1,7 @@
 #include <string.h>
 #include <time.h>
+#include <linux/input.h>
+#include <sys/stat.h>
 #include "logoset.h"
 #include "io.h"
 #include "gfx.h"
@@ -9,11 +11,13 @@ extern int FSIZE_BIG;
 extern int FSIZE_MED;
 extern int FSIZE_SMALL;
 
-#define NCF_FILE "/var/tuxbox/config/neutrino.conf"
-#define CFG_FILE "/var/tuxbox/config/logomask.conf"
+static unsigned char NCF_FILE[]="/var/tuxbox/config/neutrino.conf";
+static unsigned char CFG_FILE[]="/var/tuxbox/config/logomask.conf";
+static unsigned char AST_FILE[]="/var/etc/init.d/S9L_logomask";
+static unsigned char AST_TEXT[]="#!/bin/sh\n(sleep 20; logomask) &\n";
 unsigned char FONT[64]= "/share/fonts/pakenham.ttf";
 
-#define CL_VERSION  "1.01"
+#define CL_VERSION  "1.2a"
 #define MAX_MASK 16
 
 //                                     TRANSP, BLACK,  RED,    GREEN,  YELLOW, BLUE,   MAGENTA, TURQUOISE,
@@ -63,18 +67,46 @@ char *pt1=strg, *pt2=strg;
        }
 }
 
+int Read_Neutrino_Cfg(char *entry)
+{
+FILE *nfh;
+char *cfptr=NULL;
+int rv=-1;
+
+       if((nfh=fopen(NCF_FILE,"r"))!=NULL)
+       {
+               tstr[0]=0;
+
+               while((!feof(nfh)) && ((strstr(tstr,entry)==NULL) || ((cfptr=strchr(tstr,'='))==NULL)))
+               {
+                       fgets(tstr,500,nfh);
+               }
+               if(!feof(nfh) && cfptr)
+               {
+                       ++cfptr;
+                       if(sscanf(cfptr,"%d",&rv)!=1)
+                       {
+                               rv=-1;
+                       }
+//                     printf("%s\n%s=%s -> %d\n",tstr,entry,cfptr,rv);
+               }
+               fclose(nfh);
+       }
+       return rv;
+}
+
 /******************************************************************************
  * logoset Main
  ******************************************************************************/
 
 int main (int argc, char **argv)
 {
-       int i,j,found=0,m,mask=1,kmode=1,pmode=0, lc=-1, changed=0, todo=1, help=1, help_changed=0, move=0;
+       int i,j,found=0,m,mask=1,kmode=1,pmode=0, lc=-1, changed=0, todo=1, help=1, help_changed=0, move=0, autost,tv,pmode43,scr=1;
        unsigned char actchan[20]=""/*,channel[128]=""*/;
        FILE *fh,*fh2;
        char *cpt1,*cpt2;
        gpixel mp, mc[MAX_MASK], tp;
-       int tsx=430, tsy=120, tdy=24, tsz=28, txw=500, tcol=TURQUOISE;
+       int tsx=430, tsy=120, tdy=24, tsz=28, txw=500, tcol=LGREEN;
        int xp[MAX_MASK][8],yp[MAX_MASK][8],xw[MAX_MASK][8],yw[MAX_MASK][8],valid[MAX_MASK],cmc[MAX_MASK],xxp,xxw,yyp,yyw,nmsk=0,amsk=0;
        double xs=1.0, ys=1.0;
        time_t t1,t2;
@@ -92,6 +124,17 @@ int main (int argc, char **argv)
                                yw[j][i]=20;
                        }       
                }
+               if((tv=Read_Neutrino_Cfg("video_Format"))<0)
+                       tv=3;
+               --tv;
+               if((i=Read_Neutrino_Cfg("screen_preset"))>=0)
+                       scr=i;
+               if(!scr)
+               {
+                       tsy=65;
+                       tdy=20;
+               }
+
                system("pzapit -var > /tmp/logomaskset.stat");
                if((fh=fopen("/tmp/logomaskset.stat","r"))!=NULL)
                {
@@ -109,6 +152,28 @@ int main (int argc, char **argv)
                        fclose(fh);
                }
        
+               if(tv>1)
+               {
+                       system("pzapit -vm43 > /tmp/logomaskset.stat");
+                       if((fh=fopen("/tmp/logomaskset.stat","r"))!=NULL)
+                       {
+                               if(fgets(tstr,500,fh))
+                               {
+                                       TrimString(tstr);
+                                       if(strlen(tstr))
+                                       {
+                                               if(sscanf(tstr+strlen(tstr)-1,"%d",&pmode43)!=1)
+                                               {
+                                                       pmode43=0;
+                                               }
+                                       }
+                               }
+                               fclose(fh);
+                       }
+                       if(pmode43!=1)
+                               system("pzapit -vm43 1");
+               }
+
                system("touch /tmp/.logomask_kill");
 
                fb = open(FB_DEVICE, O_RDWR);
@@ -183,7 +248,6 @@ int main (int argc, char **argv)
                }
 
                memset(lbb, 0, fix_screeninfo.line_length*var_screeninfo.yres);
-
                system("pzapit -gi > /tmp/logomask.chan");
                if((fh=fopen("/tmp/logomask.chan","r"))!=NULL)
                {
@@ -271,20 +335,21 @@ int main (int argc, char **argv)
                                yyp=yp[m][pmode];
                                yyw=yw[m][pmode];
                                tp.lpixel=mc[m].lpixel;
-                               RenderBox(xxp, yyp, xxp+xxw, yyp+yyw, FILL, &tp);
+                               RenderBox(xxp, yyp, xxp+abs(xxw), yyp+yyw, FILL, (xxw>0)?&tp:make_color(LRED,&tp));
                                if(m==amsk)
-                                       RenderBox(xxp, yyp, xxp+xxw, yyp+yyw, GRID, make_color(LBLUE,&tp));
+                                       RenderBox(xxp, yyp, xxp+abs(xxw), yyp+yyw, GRID, make_color((xxw>0)?LBLUE:LRED,&tp));
                                for(i=0;i<=yyw;i++)
                                {
                                        j=(yyp+i)*fix_screeninfo.line_length+(xxp<<2);
-                                       if((j+(xxw<<2))<fix_screeninfo.line_length*var_screeninfo.yres)
+                                       if((j+(abs(xxw)<<2))<=fix_screeninfo.line_length*var_screeninfo.yres)
                                        {
-                                               memcpy(lfb+j, lbb+j, xxw<<2);
+                                               memcpy(lfb+j, lbb+j, abs(xxw)<<2);
                                        }
                                }
                        }
                }
                time(&t1);
+               autost=access(AST_FILE, 1)!=-1;
                while((rc!=KEY_EXIT) && (rc!=KEY_OK))
                {
                        rc=GetRCCode();
@@ -297,41 +362,12 @@ int main (int argc, char **argv)
                                yyp=yp[amsk][pmode];
                                yyw=yw[amsk][pmode];
                                lpix.lpixel=mc[amsk].lpixel;
-                               switch(rc)
+                               if(xxw>0)
                                {
-                                       case KEY_LEFT:
-                                       if(lc==KEY_LEFT)
-                                       {
-                                               xs+=0.3;
-                                       }
-                                       else
-                                       {
-                                               xs=1.0;
-                                       }
-                                       if(kmode)
-                                       {
-                                               if(xxp>0)
-                                               {
-                                                       changed=1;
-                                                       xxp-=xs;
-                                               }
-                                       }
-                                       else
+                                       switch(rc)
                                        {
-                                               if(xxw>6)
-                                               {
-                                                       changed=1;
-                                                       xxw-=xs;
-                                               }
-                                       }
-                                       move=1;
-                                       break;
-                               
-                                       case KEY_RIGHT:
-                                       if((xxp+xxw)<(fix_screeninfo.line_length-1))
-                                       {
-                                               changed=1;
-                                               if(lc==KEY_RIGHT)
+                                       case KEY_LEFT:
+                                               if(lc==KEY_LEFT)
                                                {
                                                        xs+=0.3;
                                                }
@@ -341,49 +377,57 @@ int main (int argc, char **argv)
                                                }
                                                if(kmode)
                                                {
-                                                       xxp+=xs;
+                                                       if(xxp>0)
+                                                       {
+                                                               changed=1;
+                                                               xxp-=xs;
+                                                               if(xxp<0)
+                                                                       xxp=0;
+                                                       }
                                                }
                                                else
                                                {
-                                                       xxw+=xs;
+                                                       if(xxw>4)
+                                                       {
+                                                               changed=1;
+                                                               xxw-=xs;
+                                                               if(xxw<2)
+                                                                       xxw=2;
+                                                       }
                                                }
-                                       }
-                                       move=1;
+                                               move=1;
                                        break;
-                               
-                                       case KEY_UP:
-                                       if(lc==KEY_UP)
-                                       {
-                                               ys+=0.2;
-                                       }
-                                       else
-                                       {
-                                               ys=1.0;
-                                       }
-                                       if(kmode)
-                                       {
-                                               if(yyp>0)
-                                               {
-                                                       changed=1;
-                                                       yyp-=ys;
-                                               }
-                                       }
-                                       else
-                                       {
-                                               if(yyw>6)
+
+                                       case KEY_RIGHT:
+                                               if((xxp+xxw)<var_screeninfo.xres)
                                                {
                                                        changed=1;
-                                                       yyw-=ys;
+                                                       if(lc==KEY_RIGHT)
+                                                       {
+                                                               xs+=0.3;
+                                                       }
+                                                       else
+                                                       {
+                                                               xs=1.0;
+                                                       }
+                                                       if(kmode)
+                                                       {
+                                                               xxp+=xs;
+                                                               if((xxp+xxw)>var_screeninfo.xres)
+                                                                       xxp=var_screeninfo.xres-xxw;
+                                                       }
+                                                       else
+                                                       {
+                                                               xxw+=xs;
+                                                               if((xxp+xxw)>var_screeninfo.xres)
+                                                                       xxw=var_screeninfo.xres-xxp;
+                                                       }
                                                }
-                                       }
-                                       move=1;
+                                               move=1;
                                        break;
                                
-                                       case KEY_DOWN:
-                                       if((yyp+yyw)<(var_screeninfo.yres-1))
-                                       {
-                                               changed=1;
-                                               if(lc==KEY_DOWN)
+                                       case KEY_UP:
+                                               if(lc==KEY_UP)
                                                {
                                                        ys+=0.2;
                                                }
@@ -393,134 +437,53 @@ int main (int argc, char **argv)
                                                }
                                                if(kmode)
                                                {
-                                                       yyp+=ys;
-                                               }
-                                               else
-                                               {
-                                                       yyw+=ys;
-                                               }
-                                       }
-                                       move=1;
-                                       break;
-                               
-                                       case KEY_RED:
-                                               changed=1;
-                                               RenderBox(xxp, yyp, xxp+xxw, yyp+yyw, FILL, make_color(TRANSP,&tp));
-                                               for(i=0;i<=yyw;i++)
-                                               {
-                                                       j=(yyp+i)*fix_screeninfo.line_length+(xxp<<2);
-                                                       if(((j+(xxw<<2)))<fix_screeninfo.line_length*var_screeninfo.yres)
+                                                       if(yyp>0)
                                                        {
-                                                               memcpy(lfb+j, lbb+j, xxw<<2);
+                                                               changed=1;
+                                                               yyp-=ys;
                                                        }
-                                               }
-                                               valid[amsk]=0;
-                                               nmsk--;
-                                               kmode=1;
-                                               if(nmsk)
-                                               {
-                                                       todo=2;
-                                                       amsk=-1;
-                                                       for(m=0; m<MAX_MASK && amsk<0; m++)
-                                                       {
-                                                               if(valid[m])
-                                                               {
-                                                                       amsk=m;
-                                                                       xxp=xp[amsk][pmode];
-                                                                       xxw=xw[amsk][pmode];
-                                                                       yyp=yp[amsk][pmode];
-                                                                       yyw=yw[amsk][pmode];
-                                                                       lpix.lpixel=mc[amsk].lpixel;
-                                                               }
-                                                       }       
+                                                       if(yyp<0)
+                                                               yyp=0;
                                                }
                                                else
                                                {
-                                                       todo=mask=0;
+                                                       if(yyw>4)
+                                                       {
+                                                               changed=1;
+                                                               yyw-=ys;
+                                                       }
+                                                       if(yyw<2)
+                                                               yyw=2;
                                                }
+                                               move=1;
                                        break;
-                               
-                                       case KEY_GREEN:
-                                               if(nmsk<MAX_MASK)
+
+                                       case KEY_DOWN:
+                                               if((yyp+yyw)<var_screeninfo.yres)
                                                {
-                                                       todo=2;
                                                        changed=1;
-                                                       kmode=1;
-                                                       amsk=-1;
-                                                       for(m=0; amsk<0 && m<MAX_MASK; m++)
+                                                       if(lc==KEY_DOWN)
                                                        {
-                                                               if(!valid[m])
-                                                               {
-                                                                       amsk=m;
-                                                                       valid[amsk]=1;
-                                                                       nmsk++;
-                                                                       cmc[amsk]=BLACK;
-                                                                       make_color(BLACK, &mc[amsk]);
-                                                                       for(i=0; i<8; i++)
-                                                                       {
-                                                                               xp[amsk][i]=(1280-40)/2;
-                                                                               xw[amsk][i]=40;
-                                                                               yp[amsk][i]=(720-20)/2;
-                                                                               yw[amsk][i]=20;
-                                                                       }
-                                                                       xxp=xp[amsk][pmode];
-                                                                       xxw=xw[amsk][pmode];
-                                                                       yyp=yp[amsk][pmode];
-                                                                       yyw=yw[amsk][pmode];
-                                                                       lpix.lpixel=mc[amsk].lpixel;
-                                                               }
+                                                               ys+=0.2;
                                                        }
-                                               }       
-                                       break;
-                                       
-                                       case KEY_PAGEUP:
-                                               if(nmsk>1)
-                                               {
-                                                       m=amsk+1;
-                                                       if(m>=MAX_MASK)
+                                                       else
                                                        {
-                                                               m=0;
+                                                               ys=1.0;
                                                        }
-                                                       while(!valid[m])
+                                                       if(kmode)
                                                        {
-                                                               if(++m>=MAX_MASK)
-                                                               {
-                                                                       m=0;
-                                                               }
+                                                               yyp+=ys;
+                                                               if((yyp+yyw)>var_screeninfo.yres)
+                                                                       yyp=var_screeninfo.yres-yyw;
                                                        }
-                                                       RenderBox(xxp, yyp, xxp+xxw, yyp+yyw, FILL, &lpix);
-                                                       amsk=m;
-                                                       xxp=xp[amsk][pmode];
-                                                       xxw=xw[amsk][pmode];
-                                                       yyp=yp[amsk][pmode];
-                                                       yyw=yw[amsk][pmode];
-                                                       lpix.lpixel=mc[amsk].lpixel;
-                                               }
-                                       break;
-                               
-                                       case KEY_PAGEDOWN:
-                                               if(nmsk>1)
-                                               {
-                                                       m=amsk-1;
-                                                       if(m<0)
+                                                       else
                                                        {
-                                                               m=MAX_MASK-1;
+                                                               yyw+=ys;
+                                                               if((yyp+yyw)>var_screeninfo.yres)
+                                                                       yyw=var_screeninfo.yres-yyp;
                                                        }
-                                                       while(!valid[m])
-                                                       {
-                                                               if(--m<0)
-                                                               {
-                                                                       m=MAX_MASK;
-                                                               }
-                                                       }
-                                                       RenderBox(xxp, yyp, xxp+xxw, yyp+yyw, FILL, &lpix);
-                                                       amsk=m;
-                                                       xxp=xp[amsk][pmode];
-                                                       xxw=xw[amsk][pmode];
-                                                       yyp=yp[amsk][pmode];
-                                                       yyw=yw[amsk][pmode];
-                                                       lpix.lpixel=mc[amsk].lpixel;
                                                }
+                                               move=1;
                                        break;
 
                                        case KEY_YELLOW:
@@ -530,7 +493,7 @@ int main (int argc, char **argv)
                                        case KEY_BLUE:
                                                kmode=1;
                                        break;
-                                       
+
                                        case KEY_1:
                                                if(nmsk)
                                                {
@@ -652,6 +615,175 @@ int main (int argc, char **argv)
                                                        changed=1;
                                                }
                                        break;
+                                       }
+                               }
+                               switch(rc)
+                               {
+
+                                       case KEY_RED:
+                                               changed=1;
+                                               RenderBox(xxp, yyp, xxp+abs(xxw), yyp+yyw, FILL, make_color(TRANSP,&tp));
+                                               for(i=0;i<=yyw;i++)
+                                               {
+                                                       j=(yyp+i)*fix_screeninfo.line_length+(xxp<<2);
+                                                       if(((j+(abs(xxw)<<2)))<=fix_screeninfo.line_length*var_screeninfo.yres)
+                                                       {
+                                                               memcpy(lfb+j, lbb+j, abs(xxw)<<2);
+                                                       }
+                                               }
+                                               valid[amsk]=0;
+                                               nmsk--;
+                                               kmode=1;
+                                               if(nmsk)
+                                               {
+                                                       todo=2;
+                                                       amsk=-1;
+                                                       for(m=0; m<MAX_MASK && amsk<0; m++)
+                                                       {
+                                                               if(valid[m])
+                                                               {
+                                                                       amsk=m;
+                                                                       xxp=xp[amsk][pmode];
+                                                                       xxw=xw[amsk][pmode];
+                                                                       yyp=yp[amsk][pmode];
+                                                                       yyw=yw[amsk][pmode];
+                                                                       lpix.lpixel=mc[amsk].lpixel;
+                                                               }
+                                                       }
+                                               }
+                                               else
+                                               {
+                                                       todo=mask=0;
+                                               }
+                                       break;
+
+                                       case KEY_GREEN:
+                                               if(nmsk<MAX_MASK)
+                                               {
+                                                       todo=2;
+                                                       changed=1;
+                                                       kmode=1;
+                                                       amsk=-1;
+                                                       for(m=0; amsk<0 && m<MAX_MASK; m++)
+                                                       {
+                                                               if(!valid[m])
+                                                               {
+                                                                       amsk=m;
+                                                                       valid[amsk]=1;
+                                                                       nmsk++;
+                                                                       cmc[amsk]=BLACK;
+                                                                       make_color(BLACK, &mc[amsk]);
+                                                                       for(i=0; i<8; i++)
+                                                                       {
+                                                                               xp[amsk][i]=(1280-40)/2;
+                                                                               xw[amsk][i]=40;
+                                                                               yp[amsk][i]=(720-20)/2;
+                                                                               yw[amsk][i]=20;
+                                                                       }
+                                                                       xxp=xp[amsk][pmode];
+                                                                       xxw=xw[amsk][pmode];
+                                                                       yyp=yp[amsk][pmode];
+                                                                       yyw=yw[amsk][pmode];
+                                                                       lpix.lpixel=mc[amsk].lpixel;
+                                                               }
+                                                       }
+                                               }       
+                                       break;
+                                       
+                                       case KEY_PAGEUP:
+                                               if(nmsk>1)
+                                               {
+                                                       m=amsk+1;
+                                                       if(m>=MAX_MASK)
+                                                       {
+                                                               m=0;
+                                                       }
+                                                       while(!valid[m])
+                                                       {
+                                                               if(++m>=MAX_MASK)
+                                                               {
+                                                                       m=0;
+                                                               }
+                                                       }
+                                                       RenderBox(xxp, yyp, xxp+abs(xxw), yyp+yyw, FILL, (xxw>0)?&lpix:make_color(LRED,&tp));
+                                                       amsk=m;
+                                                       xxp=xp[amsk][pmode];
+                                                       xxw=xw[amsk][pmode];
+                                                       yyp=yp[amsk][pmode];
+                                                       yyw=yw[amsk][pmode];
+                                                       lpix.lpixel=mc[amsk].lpixel;
+                                               }
+                                       break;
+                               
+                                       case KEY_PAGEDOWN:
+                                               if(nmsk>1)
+                                               {
+                                                       m=amsk-1;
+                                                       if(m<0)
+                                                       {
+                                                               m=MAX_MASK-1;
+                                                       }
+                                                       while(!valid[m])
+                                                       {
+                                                               if(--m<0)
+                                                               {
+                                                                       m=MAX_MASK;
+                                                               }
+                                                       }
+                                                       RenderBox(xxp, yyp, xxp+abs(xxw), yyp+yyw, FILL, (xxw>0)?&lpix:make_color(LRED,&tp));
+                                                       amsk=m;
+                                                       xxp=xp[amsk][pmode];
+                                                       xxw=xw[amsk][pmode];
+                                                       yyp=yp[amsk][pmode];
+                                                       yyw=yw[amsk][pmode];
+                                                       lpix.lpixel=mc[amsk].lpixel;
+                                               }
+                                       break;
+
+                                       case KEY_FAV:
+                                               if(amsk>=0)
+                                               {
+                                                       changed=1;
+                                                       xw[amsk][pmode]=-xw[amsk][pmode];
+                                                       xxw=xw[amsk][pmode];
+                                                       printf("logoset: xxp=%d, xxw=%d, yyp=%d, yyw=%d\n",xxp,xxw,yyp,yyw);
+                                                       RenderBox(xxp, yyp, xxp+abs(xxw), yyp+yyw, FILL, (xxw>0)?&lpix:make_color(LRED, &tp));
+                                               }
+                                       break;
+
+                                       case KEY_COOL:
+                                               if(amsk>=0)
+                                               {
+                                                       for(i=0; i<MAX_MASK; i++)
+                                                               for(j=0; j<8; j++)
+                                                               {
+                                                                       xp[i][j]=xp[i][pmode];
+                                                                       xw[i][j]=xw[i][pmode];
+                                                                       yp[i][j]=yp[i][pmode];
+                                                                       yw[i][j]=yw[i][pmode];
+                                                               }
+                                                       changed=1;
+                                               }
+                                       break;
+
+                                       case KEY_0:
+                                               if(autost)
+                                               {
+                                                       remove(AST_FILE);
+                                                       autost=!autost;
+                                               }
+                                               else
+                                               {
+                                                       if((fh=fopen(AST_FILE,"w"))!=NULL)
+                                                       {
+                                                               fprintf(fh, AST_TEXT);
+                                                               fclose(fh);
+                                                               sleep(1);
+                                                               chmod(AST_FILE, S_IRWXU | S_IRWXG | S_IRWXO);
+                                                               autost=!autost;
+                                                       }
+                                               }
+                                       break;
 
                                        case KEY_HELP:
                                                help_changed=1;
@@ -661,11 +793,11 @@ int main (int argc, char **argv)
                                lpix.lpixel=mc[amsk].lpixel;
                                if(mask || todo==2)
                                {
-                                       RenderBox(xp[amsk][pmode], yp[amsk][pmode], xp[amsk][pmode]+xw[amsk][pmode], yp[amsk][pmode]+yw[amsk][pmode], FILL, make_color(TRANSP, &tp));
+                                       RenderBox(xp[amsk][pmode], yp[amsk][pmode], xp[amsk][pmode]+abs(xw[amsk][pmode]), yp[amsk][pmode]+yw[amsk][pmode], FILL, make_color(TRANSP, &tp));
                                        for(i=0;i<=yw[amsk][pmode];i++)
                                        {
                                                j=(yp[amsk][pmode]+i)*fix_screeninfo.line_length+(xp[amsk][pmode]<<2);
-                                               if((j+(xw[amsk][pmode]<<2))<fix_screeninfo.line_length*var_screeninfo.yres)
+                                               if((j+(xw[amsk][pmode]<<2))<=fix_screeninfo.line_length*var_screeninfo.yres)
                                                {
                                                        memcpy(lfb+j, lbb+j, (xw[amsk][pmode]+1)<<2);
                                                }
@@ -683,15 +815,15 @@ int main (int argc, char **argv)
                                                        yyp=yp[m][pmode];
                                                        yyw=yw[m][pmode];
                                                        tp.lpixel=mc[m].lpixel;
-                                                       RenderBox(xxp, yyp, xxp+xxw, yyp+yyw, FILL, ((m==amsk) && move)?make_color(TRANSP, &tp):&tp);
+                                                       RenderBox(xxp, yyp, xxp+abs(xxw), yyp+yyw, FILL, ((m==amsk) && move)?make_color(TRANSP, &tp):&tp);
                                                        if(m==amsk)
-                                                               RenderBox(xxp, yyp, xxp+xxw, yyp+yyw, GRID, make_color((kmode)?LBLUE:LYELLOW,&tp));
+                                                               RenderBox(xxp, yyp, xxp+abs(xxw), yyp+yyw, GRID, make_color((xxw>0)?((kmode)?LBLUE:LYELLOW):LRED,&tp));
                                                        for(i=0;i<=yyw;i++)
                                                        {
                                                                j=(yyp+i)*fix_screeninfo.line_length+(xxp<<2);
-                                                               if((j+(xxw<<2))<fix_screeninfo.line_length*var_screeninfo.yres)
+                                                               if((j+(abs(xxw)<<2))<=fix_screeninfo.line_length*var_screeninfo.yres)
                                                                {
-                                                                       memcpy(lfb+j, lbb+j, (xxw+1)<<2);
+                                                                       memcpy(lfb+j, lbb+j, (abs(xxw)+1)<<2);
                                                                }
                                                        }
                                                }
@@ -703,11 +835,11 @@ int main (int argc, char **argv)
                        {
                                xs=1.0;
                                ys=1.0;
-                               tsy=120;
+                               tsy=80;
                                if(move)
                                {
-                                       RenderBox(xp[amsk][pmode], yp[amsk][pmode], xp[amsk][pmode]+xw[amsk][pmode], yp[amsk][pmode]+yw[amsk][pmode], FILL, &mc[amsk]);
-                                       RenderBox(xp[amsk][pmode], yp[amsk][pmode], xp[amsk][pmode]+xw[amsk][pmode], yp[amsk][pmode]+yw[amsk][pmode], GRID, make_color((kmode)?LBLUE:LYELLOW,&tp));
+                                       RenderBox(xp[amsk][pmode], yp[amsk][pmode], xp[amsk][pmode]+abs(xw[amsk][pmode]), yp[amsk][pmode]+yw[amsk][pmode], FILL, &mc[amsk]);
+                                       RenderBox(xp[amsk][pmode], yp[amsk][pmode], xp[amsk][pmode]+abs(xw[amsk][pmode]), yp[amsk][pmode]+yw[amsk][pmode], GRID, make_color((xw[amsk][pmode]>0)?((kmode)?LBLUE:LYELLOW):LRED,&tp));
                                }
                                move=0;
                                if(help_changed)
@@ -716,9 +848,9 @@ int main (int argc, char **argv)
                                }
                                if(help)
                                {
-                                       RenderBox(tsx,tsy,tsx+txw,tsy+21*tdy,FILL,make_color(TRANSP, &tp));
+                                       RenderBox(tsx,tsy,tsx+abs(txw),tsy+21*tdy,FILL,make_color(TRANSP, &tp));
                                        if(nmsk)
-                                               RenderBox(xp[amsk][pmode], yp[amsk][pmode], xp[amsk][pmode]+xw[amsk][pmode], yp[amsk][pmode]+yw[amsk][pmode], GRID, make_color((kmode)?LBLUE:LYELLOW, &tp));
+                                               RenderBox(xp[amsk][pmode], yp[amsk][pmode], xp[amsk][pmode]+abs(xw[amsk][pmode]), yp[amsk][pmode]+yw[amsk][pmode], GRID, make_color((xw[amsk][pmode]>0)?((kmode)?LBLUE:LYELLOW):LRED, &tp));
                                        RenderString("Maskensteuerung", tsx, tsy+=tdy, txw, LEFT, tsz, tcol);
                                        RenderString("Blau  :  Umschalten auf Positionseinstellung", tsx, tsy+=tdy, txw, LEFT, tsz, tcol);
                                        RenderString("Gelb  :  Umschalten auf Größeneinstellung", tsx, tsy+=tdy, txw, LEFT, tsz, tcol);
@@ -726,6 +858,7 @@ int main (int argc, char **argv)
                                        RenderString("Rot    :  Maske löschen", tsx, tsy+=tdy, txw, LEFT, tsz, tcol);
                                        RenderString("PgUp :  nächste Maske auswählen", tsx, tsy+=tdy, txw, LEFT, tsz, tcol);
                                        RenderString("PgDn :  vorherige Maske auswählen", tsx, tsy+=tdy, txw, LEFT, tsz, tcol);
+                                       RenderString("Fav   :  Maske aktivieren/deaktivieren", tsx, tsy+=tdy, txw, LEFT, tsz, tcol);
                                        RenderString("Maskenfarbe", tsx, tsy+=(2*tdy), txw, LEFT, tsz, tcol);
                                        RenderString("Mute  :  Maskenfarbe aus Vorgabe auswählen", tsx, tsy+=tdy, txw, LEFT, tsz, tcol);
                                        RenderString("1,4,7   :  Farbton Rot erhöhen, auf Mitte setzen, verringern", tsx, tsy+=tdy, txw, LEFT, tsz, tcol);
@@ -734,6 +867,10 @@ int main (int argc, char **argv)
                                        RenderString("Vol +  :  Transparenz erhöhen", tsx, tsy+=tdy, txw, LEFT, tsz, tcol);
                                        RenderString("Vol -  :  Transparenz verringern", tsx, tsy+=tdy, txw, LEFT, tsz, tcol);
                                        RenderString("Allgemein", tsx, tsy+=(2*tdy), txw, LEFT, tsz, tcol);
+                                       if(autost)
+                                               RenderString("0       :  Autostart von logomask ausschalten", tsx, tsy+=tdy, txw, LEFT, tsz, tcol);
+                                       else
+                                               RenderString("0       :  Autostart von logomask einschalten", tsx, tsy+=tdy, txw, LEFT, tsz, tcol);
                                        RenderString("?        :  Hilfetext ein/ausschalten", tsx, tsy+=tdy, txw, LEFT, tsz, tcol);
                                        RenderString("Exit    :  Abbrechen", tsx, tsy+=tdy, txw, LEFT, tsz, tcol);
                                        RenderString("OK     :  Speichern und Beenden", tsx, tsy+=tdy, txw, LEFT, tsz, tcol);
@@ -742,9 +879,9 @@ int main (int argc, char **argv)
                                {
                                        if(help_changed)
                                        {
-                                               RenderBox(tsx, tsy, tsx+txw, tsy+21*tdy, FILL, make_color(TRANSP, &tp));
+                                               RenderBox(tsx, tsy, tsx+abs(txw), tsy+21*tdy, FILL, make_color(TRANSP, &tp));
                                                if(nmsk)
-                                                       RenderBox(xp[amsk][pmode], yp[amsk][pmode], xp[amsk][pmode]+xw[amsk][pmode], yp[amsk][pmode]+yw[amsk][pmode], GRID, make_color((kmode)?LBLUE:LYELLOW, &tp));
+                                                       RenderBox(xp[amsk][pmode], yp[amsk][pmode], xp[amsk][pmode]+abs(xw[amsk][pmode]), yp[amsk][pmode]+yw[amsk][pmode], GRID, make_color((xw>0)?((kmode)?LBLUE:LYELLOW):LRED, &tp));
                                        }
                                }
                                help_changed=0;
index 2a433b2799d374f19eb855b9a41b774742425c16..0afacd6e387658d57d298e600ef3eb25966ade47 100644 (file)
--- a/logoset.h
+++ b/logoset.h
@@ -10,9 +10,6 @@
 #include <string.h>
 #include <unistd.h>
 #include <linux/fb.h>
-#if HAVE_DVB_API_VERSION == 3
-#include <linux/input.h>
-#endif
 #include <sys/ioctl.h>
 #include <sys/mman.h>
 #include <sys/socket.h>
diff --git a/readme.txt b/readme.txt
new file mode 100644 (file)
index 0000000..0e0a9ae
--- /dev/null
@@ -0,0 +1,86 @@
+Was ist Logomask?
+---------------------------
+Diese Plugin dient dazu, senderspezifisch die Senderlogos oder auch Laufschrif-
+ten (z.B bei n-tv)mit einer oder mehreren schwarzen Masken abzudecken, um das
+Fernsehbild ruhiger zu gestalten. Position und Größe der Masken werden dabei für
+jeden Sender separat gespeichert und können auch für jeden einzelnen Videomodus
+des Senders (4:3, 16:9 usw.) getrennt konfiguriert werden. Zur schnellen Anpassung
+der Masken über die Fernbedienung enthält das Archiv auch das Konfigurationstool
+"logoset".
+
+Installation
+------------
+Die Speicherorte der Dateien ergeben sich aus der Archivstruktur. Das eigent-
+liche Plugin "logomask" kommt mit den Rechten 755 nach /var/plugins/. Seine
+Konfigurationsdatei "logomask.conf" legt das Plugin in /var/tuxbox/config ab.
+Im Archiv ist die Konfigurationsdatei nur als Beispiel enthalten, da sie für
+jede Box spezifisch angelegt werden muß. Das Plugin kann entweder direkt durch
+den Eintrag "/var/plugins/logomask &" in einer der Neutrino-Startdateien gestar-
+tet werden (das "&" im Eintrag ist wichtig), über den ebenfalls im Archiv be-
+findlichen Shellstarter (logomask.cfg und logomask.so kommen nach /var/tuxbox/plugins/,
+logomask.so mit den Rechten 755, logomask.sh kommt mit den Rechten 755 nach /var/plugins/),
+oder, wenn des FlexMenü im Image vorhanden ist, durch Einfügen der ebenfalls im Archiv
+enthaltenen Einträge in die shellexec.conf. Während im Flexmenü die jeweils sinn-
+vollen Einträge (Starten oder Beenden) automatisch angeboten werden, kann man
+beim Start über die blaue Taste das Plugin mit einem Aufruf starten und mit einem
+erneuten Aufruf beenden.
+Das Konfigurationsplugin "logoset" kommt mit den Rechten 755 nach /var/plugins/ und kann
+ebenfalls über Shellstarter (logoset.cfg und logoset.so nach /var/tuxbox/plugins/,
+logoset.so mit Rechten 755) oder über das FlexMenü gestartet werden.
+
+Bedienung
+---------
+Bevor das Plugin genutzt werden kann, muß es mit dem Konfigurations-Plugin auf die
+Senderlogos der gewünschten Sender eingestellt werden. Wurde ein Sender nicht kon-
+figuriert, wird auch keine Maske dargestellt. Nach dem Umschalten auf einen anderen
+Sender wartet das Plugin mit dem Löschen der alten und dem Anzeigen der neuen Masken
+so lange, bis die InfoBar im unteren Bildbereich ausgeblendet wurde, damit diese
+Information nicht gelöscht oder überschrieben wird.
+
+Will man auf einem Sender die Masken aktivieren, stellt man diesen Sender ein und
+startet das Konfigurations-Plugin. In der Mitte des Bildes wird nun ein blauer
+Rahmen angezeigt. Diesen kann man mit den Richtungstasten der Fernbedienung nun so
+auf dem Logo platzieren, daß der Rahmen mit seiner linken oberen Ecke schon auf der
+richtigen Position steht. Nun kann mit der gelben Taste auf Größenveränderung umge-
+schaltet werden (die Rahmenfarbe wechselt zu gelb). Mit den Rechts-/Links-Tasten
+kann die Maskengröße jetzt horizontal vergrößert/verkleinert und mit den Runter-/Hoch-
+tasten vertikal vergrößert/verkleinert werden. Will man die Position zwischendurch
+noch einmal ändern, kann mit der blauen Taste auch wieder in den Positionierungsmo-
+dus geschaltet werden (Rahmenfarbe wechselt wieder zu blau).
+Die Schrittweite der Verschiebung erhöht sich bei länger gedrückter Taste, um eine
+schnelle Positionierung zu ermöglichen. Wird länger als zwei Sekunden keine oder eine
+andere als die bisherige Taste gedrückt, wird die Schrittweite wieder auf den Start-
+wert gesetzt, damit eine Feinpositionierung durchgeführt werden kann. Bei längerem
+Tastendruck wird die Schrittweite jedoch wieder erhöht.
+
+Da Plasmafernseher auf die standardmäßig schwarzen Masken bei sehr langer Anzeige mit
+Einbrenneffekten reagieren, kann die Farbe jeder einzelnen Maske mit der Mute-Taste
+aus 15 Farben(Dbox) ausgewählt werden. Jeder Tastendruck schaltet zur nächsten Farbe. Em-
+pfehlenswert für Plasmas ist Grau. Die gewählte Farbe wird so lange angezeigt, bis
+wieder begonnen wird, die Maske zu bewegen.
+Aufgrund des höheren Farbraums bei neueren Boxen ist hier sogar eine Farbgestaltung
+der Masken möglich, welche keine Wünsche mehr offenlassen dürfte.
+
+Für das Hinzufügen zusätzlicher Masken wird die grüne Taste betätigt. Die neue Maske
+erscheint wieder in der Bildschirmmitte und kann, wie die vorhergende Maske konfigu-
+riert werden. Für jeden Sender können maximal 16 Masken angelegt werden. Dabei wird
+beim Konfigurieren immer die aktuelle Maske mit dem farbigen Rahmen angezeigt. Alle
+anderen Masken werden normal schwarz dargestellt. Zwischen den einzelnen Masken kann
+mittels der Lautstärke + und - Tasten weitergeschaltet werden.
+Soll eine Maske nicht mehr dargestellt werden, so ist diese Maske mit den Volume-Tas-
+ten auszuwählen und die rote Taste zu betätigen. Die selektierte Maske wird nun gelöscht
+und die erste Maske in der Reihe (wenn vorhanden) wieder aktiv geschaltet.
+Sitzen alle Masken richtig, kann die Einstellung mit der OK-Taste in die Konfigurations-
+datei übernommen werden. Das Plugin "logomask", welches währen der Einstellung ge-
+stoppt wurde, wird nun automatisch neu gestartet.
+Der Hilfetext kann mit der "?"-Taste ein- und ausgeblendet werden.
+Diese Einstellungen sind für die verschiedenen Videomodi der Box getrennt vorzunehmen.
+Schaltet die Box auf einen Videomodus, welcher noch nicht konfiguriert wurde, wird die
+Maske in der Bildmitte dargestellt und muß mit dem Konfigrations-Plugin einmalig ange-
+passt werden.
+Sollte ein Sender allerdings einen 16:9-Film im 4:3-Format senden und dabei sein Logo
+weiter nach unten schieben, kann das die Box nicht erkennen. In diesem Fall kann man
+die Maske aber auch schnell über die Fernbedienung neu positionieren.
+Die Einstellungen werden generell nur mit der "OK"-Taste übernommen. Drückt man die
+"Home"-Taste, wird die Konfiguration ohne Änderungen der Konfigurationsdatei abgebro-
+chen.