X-Git-Url: http://code.vuplus.com/gitweb/?a=blobdiff_plain;f=lib%2Fgdi%2Ffb.cpp;h=7ee555c1f266391aefc9dfba2b18d0acb7469df5;hb=a9984df92fc78bd4955b24502724b74b935dcc3f;hp=adf06a2c12ea2033ad640f46de06dccab30c6f3f;hpb=f4f8f9a2775fa1794de6935756f30bf4d99f33e8;p=vuplus_dvbapp diff --git a/lib/gdi/fb.cpp b/lib/gdi/fb.cpp index adf06a2..7ee555c 100644 --- a/lib/gdi/fb.cpp +++ b/lib/gdi/fb.cpp @@ -27,7 +27,7 @@ fbClass *fbClass::getInstance() fbClass::fbClass(const char *fb) { - m_manual_blit=0; + m_manual_blit=-1; instance=this; locked=0; available=0; @@ -62,6 +62,7 @@ fbClass::fbClass(const char *fb) } available=fix.smem_len; + m_phys_mem = fix.smem_start; eDebug("%dk video mem", available/1024); lfb=(unsigned char*)mmap(0, available, PROT_WRITE|PROT_READ, MAP_SHARED, fd, 0); if (!lfb) @@ -82,12 +83,12 @@ nolfb: int fbClass::showConsole(int state) { - int fd=open("/dev/vc/0", O_RDWR); + int fd=open("/dev/tty0", O_RDWR); if(fd>=0) { if(ioctl(fd, KDSETMODE, state?KD_TEXT:KD_GRAPHICS)<0) { - eDebug("setting /dev/vc/0 status failed."); + eDebug("setting /dev/tty0 status failed."); } close(fd); } @@ -102,7 +103,32 @@ int fbClass::SetMode(unsigned int nxRes, unsigned int nyRes, unsigned int nbpp) screeninfo.width=0; screeninfo.xoffset=screeninfo.yoffset=0; screeninfo.bits_per_pixel=nbpp; - + + switch (nbpp) { + case 16: + // ARGB 1555 + screeninfo.transp.offset = 15; + screeninfo.transp.length = 1; + screeninfo.red.offset = 10; + screeninfo.red.length = 5; + screeninfo.green.offset = 5; + screeninfo.green.length = 5; + screeninfo.blue.offset = 0; + screeninfo.blue.length = 5; + break; + case 32: + // ARGB 8888 + screeninfo.transp.offset = 24; + screeninfo.transp.length = 8; + screeninfo.red.offset = 16; + screeninfo.red.length = 8; + screeninfo.green.offset = 8; + screeninfo.green.length = 8; + screeninfo.blue.offset = 0; + screeninfo.blue.length = 8; + break; + } + if (ioctl(fd, FBIOPUT_VSCREENINFO, &screeninfo)<0) { // try single buffering @@ -157,7 +183,7 @@ int fbClass::waitVSync() void fbClass::blit() { - if (m_manual_blit) { + if (m_manual_blit == 1) { if (ioctl(fd, FBIO_BLIT) < 0) perror("FBIO_BLIT"); } @@ -182,7 +208,13 @@ int fbClass::lock() { if (locked) return -1; - locked=1; + if (m_manual_blit == 1) + { + locked = 2; + disableManualBlit(); + } + else + locked = 1; return fd; } @@ -190,6 +222,8 @@ void fbClass::unlock() { if (!locked) return; + if (locked == 2) // re-enable manualBlit + enableManualBlit(); locked=0; SetMode(xRes, yRes, bpp); PutCMAP();