From 7c7d5f08dd9abe1ac71370b1f2c6ff00d2da7805 Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Wed, 15 Feb 2017 20:30:52 +0100 Subject: [PATCH 01/10] fb_generic: add swidth variable, "stride in fb_pixel_t units" this should allow to use fb_pixel_t pointer arithmetics more often instead of byte pointers --- src/driver/fb_accel.cpp | 1 - src/driver/fb_accel_cs_hd1.cpp | 3 ++- src/driver/fb_accel_cs_hd2.cpp | 3 ++- src/driver/fb_accel_glfb.cpp | 3 ++- src/driver/fb_accel_sti.cpp | 1 + src/driver/fb_accel_td.cpp | 3 ++- src/driver/fb_generic.cpp | 5 ++--- src/driver/fb_generic.h | 2 +- 8 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/driver/fb_accel.cpp b/src/driver/fb_accel.cpp index d8391ab34..ba8e052ce 100644 --- a/src/driver/fb_accel.cpp +++ b/src/driver/fb_accel.cpp @@ -82,7 +82,6 @@ void CFbAccel::paintBoxRel(const int x, const int y, const int dx, const int dy, void CFbAccel::paintRect(const int x, const int y, const int dx, const int dy, const fb_pixel_t col) { int line = 0; - int swidth = stride / sizeof(fb_pixel_t); fb_pixel_t *fbp = getFrameBufferPointer() + (swidth * y); int pos; while (line < dy) diff --git a/src/driver/fb_accel_cs_hd1.cpp b/src/driver/fb_accel_cs_hd1.cpp index ca6bbb296..2672dfd58 100644 --- a/src/driver/fb_accel_cs_hd1.cpp +++ b/src/driver/fb_accel_cs_hd1.cpp @@ -346,6 +346,7 @@ int CFbAccelCSHD1::setMode(unsigned int, unsigned int, unsigned int) return -1; } stride = _fix.line_length; + swidth = stride / sizeof(fb_pixel_t); if (ioctl(fd, FBIOBLANK, FB_BLANK_UNBLANK) < 0) printf("screen unblanking failed\n"); xRes = screeninfo.xres; @@ -355,7 +356,7 @@ int CFbAccelCSHD1::setMode(unsigned int, unsigned int, unsigned int) int needmem = stride * yRes * 2; if (available >= needmem) { - backbuffer = lfb + stride / sizeof(fb_pixel_t) * yRes; + backbuffer = lfb + swidth * yRes; return 0; } fprintf(stderr, LOGTAG "not enough FB memory (have %d, need %d)\n", available, needmem); diff --git a/src/driver/fb_accel_cs_hd2.cpp b/src/driver/fb_accel_cs_hd2.cpp index 538fba927..b801a37ff 100644 --- a/src/driver/fb_accel_cs_hd2.cpp +++ b/src/driver/fb_accel_cs_hd2.cpp @@ -216,6 +216,7 @@ int CFbAccelCSHD2::setMode(unsigned int, unsigned int, unsigned int) return -1; } stride = _fix.line_length; + swidth = stride / sizeof(fb_pixel_t); if (ioctl(fd, FBIOBLANK, FB_BLANK_UNBLANK) < 0) printf("screen unblanking failed\n"); xRes = screeninfo.xres; @@ -225,7 +226,7 @@ int CFbAccelCSHD2::setMode(unsigned int, unsigned int, unsigned int) int needmem = stride * yRes * 2; if (available >= needmem) { - backbuffer = lfb + stride / sizeof(fb_pixel_t) * yRes; + backbuffer = lfb + swidth * yRes; return 0; } fprintf(stderr, LOGTAG "not enough FB memory (have %d, need %d)\n", available, needmem); diff --git a/src/driver/fb_accel_glfb.cpp b/src/driver/fb_accel_glfb.cpp index f6784c48f..cc4054258 100644 --- a/src/driver/fb_accel_glfb.cpp +++ b/src/driver/fb_accel_glfb.cpp @@ -54,6 +54,7 @@ void CFbAccelGLFB::init(const char *) } screeninfo = glfb->getScreenInfo(); stride = 4 * screeninfo.xres; + swidth = screeninfo.xres; available = glfb->getOSDBuffer()->size(); /* allocated in glfb constructor */ lbb = lfb = reinterpret_cast(glfb->getOSDBuffer()->data()); @@ -135,7 +136,7 @@ int CFbAccelGLFB::setMode(unsigned int, unsigned int, unsigned int) int needmem = stride * yRes * 2; if (available >= needmem) { - backbuffer = lfb + stride / sizeof(fb_pixel_t) * yRes; + backbuffer = lfb + swidth * yRes; return 0; } fprintf(stderr, LOGTAG " not enough FB memory (have %d, need %d)\n", available, needmem); diff --git a/src/driver/fb_accel_sti.cpp b/src/driver/fb_accel_sti.cpp index 446fc3828..dfe0ac5c3 100644 --- a/src/driver/fb_accel_sti.cpp +++ b/src/driver/fb_accel_sti.cpp @@ -512,6 +512,7 @@ int CFbAccelSTi::setMode(unsigned int, unsigned int, unsigned int) yRes = screeninfo.yres = screeninfo.yres_virtual = DEFAULT_YRES; bpp = screeninfo.bits_per_pixel = DEFAULT_BPP; stride = screeninfo.xres * screeninfo.bits_per_pixel / 8; + swidth = screeninfo.xres; return 0; } diff --git a/src/driver/fb_accel_td.cpp b/src/driver/fb_accel_td.cpp index 7033ed0bc..7ecc562c2 100644 --- a/src/driver/fb_accel_td.cpp +++ b/src/driver/fb_accel_td.cpp @@ -156,6 +156,7 @@ void CFbAccelTD::init(const char *) lbb = lfb; /* the memory area to draw to... */ available = fix.smem_len; stride = fix.line_length; + swidth = stride / sizeof(fb_pixel_t); xRes = screeninfo.xres; yRes = screeninfo.yres; bpp = screeninfo.bits_per_pixel; @@ -169,7 +170,7 @@ int CFbAccelTD::setMode(unsigned int, unsigned int, unsigned int) int needmem = stride * yRes * 2; if (available >= needmem) { - backbuffer = lfb + stride / sizeof(fb_pixel_t) * yRes; + backbuffer = lfb + swidth * yRes; return 0; } fprintf(stderr, LOGTAG " not enough FB memory (have %d, need %d)\n", available, needmem); diff --git a/src/driver/fb_generic.cpp b/src/driver/fb_generic.cpp index 7f49122b6..ef000297f 100644 --- a/src/driver/fb_generic.cpp +++ b/src/driver/fb_generic.cpp @@ -340,6 +340,7 @@ int CFrameBuffer::setMode(unsigned int /*nxRes*/, unsigned int /*nyRes*/, unsign } stride = _fix.line_length; + swidth = stride / sizeof(fb_pixel_t); printf("FB: %dx%dx%d line length %d. %s accelerator.\n", xRes, yRes, bpp, stride, "Not using graphics" ); @@ -623,7 +624,6 @@ void CFrameBuffer::paintBoxRel(const int x, const int y, const int dx, const int line++; } } else { - int swidth = stride / sizeof(fb_pixel_t); fb_pixel_t *fbp = getFrameBufferPointer() + (swidth * y); int line = 0; while (line < dy) { @@ -934,7 +934,7 @@ void CFrameBuffer::paintPixel(const int x, const int y, const fb_pixel_t col) return; fb_pixel_t * pos = getFrameBufferPointer(); - pos += (stride / sizeof(fb_pixel_t)) * y; + pos += swidth * y; pos += x; *pos = col; @@ -1680,7 +1680,6 @@ void CFrameBuffer::blitBox2FB(const fb_pixel_t* boxBuf, uint32_t width, uint32_t uint32_t xc = (width > xRes) ? (uint32_t)xRes : width; uint32_t yc = (height > yRes) ? (uint32_t)yRes : height; - uint32_t swidth = stride / sizeof(fb_pixel_t); fb_pixel_t *fbp = getFrameBufferPointer() + (swidth * yoff); fb_pixel_t* data = (fb_pixel_t*)boxBuf; diff --git a/src/driver/fb_generic.h b/src/driver/fb_generic.h index dfc13e773..44bd4f764 100644 --- a/src/driver/fb_generic.h +++ b/src/driver/fb_generic.h @@ -112,7 +112,7 @@ class CFrameBuffer : public sigc::trackable fb_pixel_t backgroundColor; std::string backgroundFilename; bool useBackgroundPaint; - unsigned int xRes, yRes, stride, bpp; + unsigned int xRes, yRes, stride, swidth, bpp; t_fb_var_screeninfo screeninfo; fb_cmap cmap; __u16 red[256], green[256], blue[256], trans[256]; From dd653288d81d7d6b370524394b8431c7400e197e Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sun, 19 Feb 2017 11:29:20 +0100 Subject: [PATCH 02/10] fb_generic: use 32bit pointers instead of 8bit --- src/driver/fb_generic.cpp | 40 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/src/driver/fb_generic.cpp b/src/driver/fb_generic.cpp index ef000297f..3370fd25c 100644 --- a/src/driver/fb_generic.cpp +++ b/src/driver/fb_generic.cpp @@ -438,7 +438,7 @@ void CFrameBuffer::paletteSet(struct fb_cmap *map) void CFrameBuffer::paintHLineRelInternal2Buf(const int& x, const int& dx, const int& y, const int& box_dx, const fb_pixel_t& col, fb_pixel_t* buf) { - uint8_t * pos = ((uint8_t *)buf) + x * sizeof(fb_pixel_t) + box_dx * sizeof(fb_pixel_t) * y; + fb_pixel_t * pos = buf + x + box_dx * y; fb_pixel_t * dest = (fb_pixel_t *)pos; for (int i = 0; i < dx; i++) *(dest++) = col; @@ -639,11 +639,11 @@ void CFrameBuffer::paintBoxRel(const int x, const int y, const int dx, const int void CFrameBuffer::paintVLineRelInternal(int x, int y, int dy, const fb_pixel_t col) { - uint8_t * pos = ((uint8_t *)getFrameBufferPointer()) + x * sizeof(fb_pixel_t) + stride * y; + fb_pixel_t *pos = getFrameBufferPointer() + x + swidth * y; for(int count=0;count Date: Sun, 19 Feb 2017 11:30:11 +0100 Subject: [PATCH 03/10] acinclude: move AC_SYS_LARGEFILE after AC_CANONICAL_* no idea why, but detection of 64bit largefile flags fails otherwise in some setups --- acinclude.m4 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/acinclude.m4 b/acinclude.m4 index f5b22cab2..5a98110b7 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -3,7 +3,6 @@ AM_CONFIG_HEADER(config.h) AM_MAINTAINER_MODE AC_GNU_SOURCE -AC_SYS_LARGEFILE AC_ARG_WITH(target, [ --with-target=TARGET target for compilation [[native,cdk]]], @@ -75,6 +74,7 @@ fi AC_CANONICAL_BUILD AC_CANONICAL_HOST +AC_SYS_LARGEFILE check_path () { return $(perl -e "if(\"$1\"=~m#^/usr/(local/)?bin#){print \"0\"}else{print \"1\";}") From 418819e261fbd7de78a18078a310e3c1f632b154 Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sun, 19 Feb 2017 11:52:37 +0100 Subject: [PATCH 04/10] libtuxtxt: remove unused fd parameter from tuxtx_main() --- lib/libtuxtxt/teletext.h | 2 +- lib/libtuxtxt/tuxtxt.cpp | 6 +++--- src/gui/movieplayer.cpp | 2 +- src/neutrino.cpp | 2 +- src/system/setting_helpers.cpp | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/libtuxtxt/teletext.h b/lib/libtuxtxt/teletext.h index 6bc3dc590..cb0037d1e 100644 --- a/lib/libtuxtxt/teletext.h +++ b/lib/libtuxtxt/teletext.h @@ -5,7 +5,7 @@ int tuxtxt_init(); void tuxtxt_close(); void tuxtxt_start(int tpid, int source = 0); // Start caching int tuxtxt_stop(); // Stop caching -int tuxtx_main(int _rc, int pid, int page = 0, int source = 0); +int tuxtx_main(int pid, int page = 0, int source = 0); void tuxtx_stop_subtitle(); int tuxtx_subtitle_running(int *pid, int *page, int *running); void tuxtx_pause_subtitle(bool pause = 1); diff --git a/lib/libtuxtxt/tuxtxt.cpp b/lib/libtuxtxt/tuxtxt.cpp index 394d8e29f..8f630f769 100644 --- a/lib/libtuxtxt/tuxtxt.cpp +++ b/lib/libtuxtxt/tuxtxt.cpp @@ -1561,7 +1561,7 @@ void tuxtx_pause_subtitle(bool pause) //printf("TuxTxt subtitle unpause, running %d pid %d page %d\n", reader_running, sub_pid, sub_page); ttx_paused = 0; if(!reader_running && sub_pid && sub_page) - tuxtx_main(0, sub_pid, sub_page); + tuxtx_main(sub_pid, sub_page); } else { if(!reader_running) @@ -1599,7 +1599,7 @@ void tuxtx_set_pid(int pid, int page, const char * cc) printf("TuxTxt subtitle set pid %d page %d lang %s (%d)\n", sub_pid, sub_page, cc, cfg_national_subset); ttx_paused = 1; if(sub_pid && sub_page) - tuxtx_main(0, sub_pid, sub_page); + tuxtx_main(sub_pid, sub_page); #endif } @@ -1620,7 +1620,7 @@ int tuxtx_subtitle_running(int *pid, int *page, int *running) return ret; } -int tuxtx_main(int /*_rc*/, int pid, int page, int source) +int tuxtx_main(int pid, int page, int source) { char cvs_revision[] = "$Revision: 1.95 $"; diff --git a/src/gui/movieplayer.cpp b/src/gui/movieplayer.cpp index 893508633..87499697e 100644 --- a/src/gui/movieplayer.cpp +++ b/src/gui/movieplayer.cpp @@ -1595,7 +1595,7 @@ void CMoviePlayerGui::PlayFileLoop(void) else { if (g_settings.cacheTXT) tuxtxt_stop(); - tuxtx_main(g_RCInput->getFileHandle(), g_RemoteControl->current_PIDs.PIDs.vtxtpid, 0, 2); + tuxtx_main(g_RemoteControl->current_PIDs.PIDs.vtxtpid, 0, 2); frameBuffer->paintBackground(); } if (restore) diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 8ab84bd88..86b8d6d34 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -2538,7 +2538,7 @@ void CNeutrinoApp::RealRun() StopSubtitles(); tuxtx_stop_subtitle(); - tuxtx_main(g_RCInput->getFileHandle(), g_RemoteControl->current_PIDs.PIDs.vtxtpid); + tuxtx_main(g_RemoteControl->current_PIDs.PIDs.vtxtpid); frameBuffer->paintBackground(); //if(!g_settings.cacheTXT) diff --git a/src/system/setting_helpers.cpp b/src/system/setting_helpers.cpp index e177a3a34..d14bae874 100644 --- a/src/system/setting_helpers.cpp +++ b/src/system/setting_helpers.cpp @@ -362,7 +362,7 @@ printf("CSubtitleChangeExec::exec: TTX, pid %x page %x lang %s\n", pid, page, pt tuxtx_stop_subtitle(); tuxtx_set_pid(pid, page, ptr); dvbsub_stop(); - tuxtx_main(g_RCInput->getFileHandle(), pid, page); + tuxtx_main(pid, page); } return menu_return::RETURN_EXIT; } From dfddc62d0c54be0834eedf99e618a88de7f8a1ad Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sun, 19 Feb 2017 12:09:03 +0100 Subject: [PATCH 05/10] tuxtxt: remove unused dmx variable --- lib/libtuxtxt/libtuxtxt.cpp | 6 ------ lib/libtuxtxt/tuxtxt_def.h | 1 - 2 files changed, 7 deletions(-) diff --git a/lib/libtuxtxt/libtuxtxt.cpp b/lib/libtuxtxt/libtuxtxt.cpp index 40af36282..2754c24b3 100644 --- a/lib/libtuxtxt/libtuxtxt.cpp +++ b/lib/libtuxtxt/libtuxtxt.cpp @@ -36,7 +36,6 @@ int tuxtxt_init() tuxtxt_cache.thread_starting = 0; tuxtxt_cache.vtxtpid = -1; tuxtxt_cache.thread_id = 0; - tuxtxt_cache.dmx = -1; /* not sure if this is correct here... */ tuxtxt_cache.page = 0x100; return 1;//tuxtxt_init_demuxer(); @@ -82,11 +81,6 @@ void tuxtxt_close() printf ("libtuxtxt: cleaning up\n"); #endif tuxtxt_stop(); -#if 0 - if (tuxtxt_cache.dmx != -1) - close(tuxtxt_cache.dmx); -#endif - tuxtxt_cache.dmx = -1; tuxtxt_clear_cache(); tuxtxt_initialized=0; } diff --git a/lib/libtuxtxt/tuxtxt_def.h b/lib/libtuxtxt/tuxtxt_def.h index 255db1f74..6d25a0bec 100644 --- a/lib/libtuxtxt/tuxtxt_def.h +++ b/lib/libtuxtxt/tuxtxt_def.h @@ -92,7 +92,6 @@ typedef struct short flofpages[0x900][FLOFSIZE]; unsigned char adip[0x900][13]; unsigned char subpagetable[0x900]; - int dmx; int vtxtpid; int cached_pages, page, subpage, pageupdate,page_receiving, current_page[9], current_subpage[9]; int receiving, thread_starting, zap_subpage_manual; From b3a79a3a33137e8c1bf86ef5b885e852f854791e Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sun, 19 Feb 2017 14:34:44 +0100 Subject: [PATCH 06/10] tuxtxt: remove old framebuffer device code --- lib/libtuxtxt/tuxtxt.cpp | 94 ---------------------------------------- lib/libtuxtxt/tuxtxt.h | 2 +- 2 files changed, 1 insertion(+), 95 deletions(-) diff --git a/lib/libtuxtxt/tuxtxt.cpp b/lib/libtuxtxt/tuxtxt.cpp index 8f630f769..2086d976c 100644 --- a/lib/libtuxtxt/tuxtxt.cpp +++ b/lib/libtuxtxt/tuxtxt.cpp @@ -47,8 +47,6 @@ static int cfg_national_subset; static int screen_x, screen_y, screen_w, screen_h; -//#define USE_FBPAN // FBIOPAN_DISPLAY seems to be working in current driver - fb_pixel_t *getFBp(int *y) { if (*y < (int)var_screeninfo.yres) @@ -1519,18 +1517,6 @@ void eval_l25() /****************************************************************************** * main loop * ******************************************************************************/ -static void cleanup_fb_pan() -{ -#ifdef USE_FBPAN - if (var_screeninfo.yoffset) - { - var_screeninfo.yoffset = 0; - if (ioctl(fb, FBIOPAN_DISPLAY, &var_screeninfo) == -1) - perror("TuxTxt "); - } -#endif -} - static void* reader_thread(void * /*arg*/) { printf("TuxTxt subtitle thread started\n"); @@ -1549,7 +1535,6 @@ static void* reader_thread(void * /*arg*/) } if(!ttx_paused) CleanUp(); - cleanup_fb_pan(); tuxtxt_close(); printf("TuxTxt subtitle thread stopped\n"); pthread_exit(NULL); @@ -1571,7 +1556,6 @@ void tuxtx_pause_subtitle(bool pause) while(!ttx_paused) usleep(10); printf("TuxTxt subtitle paused\n"); - cleanup_fb_pan(); } } @@ -1644,15 +1628,6 @@ int tuxtx_main(int pid, int page, int source) printf("TuxTxt %s\n", versioninfo); printf("for 32bpp framebuffer\n"); - fb = -1; -#ifdef USE_FBPAN - if ((fb=open("/dev/fb/0", O_RDWR)) == -1) - { - perror("TuxTxt "); - return 0; - } -#endif - CFrameBuffer *fbp = CFrameBuffer::getInstance(); lfb = fbp->getFrameBufferPointer(); lbb = fbp->getBackBufferPointer(); @@ -1664,28 +1639,12 @@ int tuxtx_main(int pid, int page, int source) else printf("[tuxtxt] using PID %x page %d\n", tuxtxt_cache.vtxtpid, tuxtxt_cache.page); -#if 0 /* just get it from the framebuffer class */ - /* get fixed screeninfo */ - if (ioctl(fb, FBIOGET_FSCREENINFO, &fix_screeninfo) == -1) - { - perror("TuxTxt "); - return 0; - } - - /* get variable screeninfo */ - if (ioctl(fb, FBIOGET_VSCREENINFO, &var_screeninfo) == -1) - { - perror("TuxTxt "); - return 0; - } -#else struct fb_var_screeninfo *var; var = fbp->getScreenInfo(); /* this is actually the length of the screen in pixels */ stride = fbp->getStride() / sizeof(fb_pixel_t); memcpy(&var_screeninfo, var, sizeof(struct fb_var_screeninfo)); fix_screeninfo.line_length = var_screeninfo.xres * sizeof(fb_pixel_t); -#endif /* set variable screeninfo for double buffering */ var_screeninfo.yoffset = 0; #if 0 @@ -1871,9 +1830,6 @@ int tuxtx_main(int pid, int page, int source) /* exit */ CleanUp(); - if (fb >= 0) - close(fb); - #if 1 if ( initialized ) tuxtxt_close(); @@ -2266,7 +2222,6 @@ void CleanUp() /* hide and close pig */ if (screenmode) SwitchScreenMode(0); /* turn off divided screen */ - //close(pig); #if TUXTXT_CFG_STANDALONE tuxtxt_stop_thread(); @@ -2278,9 +2233,6 @@ void CleanUp() //tuxtxt_stop(); #endif -#ifdef USE_FBPAN - cleanup_fb_pan(); -#endif //memset(lfb,0, var_screeninfo.yres*fix_screeninfo.line_length); //CFrameBuffer::getInstance()->paintBackground(); ClearFB(transp); @@ -3998,25 +3950,9 @@ void SwitchScreenMode(int newscreenmode) CFrameBuffer *f = CFrameBuffer::getInstance(); videoDecoder->Pig(tx, ty, tw, th, f->getScreenWidth(true), f->getScreenHeight(true)); -#if 0 - int sm = 0; - ioctl(pig, VIDIOC_OVERLAY, &sm); - sm = 1; - ioctl(pig, VIDIOC_G_FMT, &format); - format.type = V4L2_BUF_TYPE_VIDEO_OVERLAY; - format.fmt.win.w.left = tx; - format.fmt.win.w.top = ty; - format.fmt.win.w.width = tw; - format.fmt.win.w.height = th; - ioctl(pig, VIDIOC_S_FMT, &format); - ioctl(pig, VIDIOC_OVERLAY, &sm); -#endif } else /* not split */ { -#if 0 - ioctl(pig, VIDIOC_OVERLAY, &screenmode); -#endif videoDecoder->Pig(-1, -1, -1, -1); int x = screen_x; @@ -5386,14 +5322,7 @@ void showlink(int column, int linkpage) int oldfontwidth = fontwidth; int yoffset; -#ifdef USE_FBPAN - if (var_screeninfo.yoffset) - yoffset = 0; - else - yoffset = var_screeninfo.yres; -#else yoffset = var_screeninfo.yres; //NEW -#endif int abx = ((displaywidth)%(40-nofirst) == 0 ? displaywidth+1 : (displaywidth)/(((displaywidth)%(40-nofirst)))+1);// distance between 'inserted' pixels int width = displaywidth /4; @@ -5606,25 +5535,12 @@ void CopyBB2FB() /* copy backbuffer to framebuffer */ if (!zoommode) { -#ifdef USE_FBPAN - /* if yoffset != 0, we had active page 1, and activate 0 */ - /* else active was page 0, activate page 1 */ - if (var_screeninfo.yoffset) - var_screeninfo.yoffset = 0; - else - var_screeninfo.yoffset = var_screeninfo.yres; - - //FIXME check zoom mode code - if (ioctl(fb, FBIOPAN_DISPLAY, &var_screeninfo) == -1) - perror("TuxTxt "); -#else #ifdef HAVE_SPARK_HARDWARE f->blit2FB(lbb, var_screeninfo.xres, var_screeninfo.yres, 0, 0, 0, 0, true); #elif defined BOXMODEL_CS_HD2 f->fbCopyArea(var_screeninfo.xres, var_screeninfo.yres, 0, 0, 0, var_screeninfo.yres); #else memcpy(lfb, lbb, fix_screeninfo.line_length*var_screeninfo.yres); -#endif #endif /* adapt background of backbuffer if changed */ @@ -5644,16 +5560,6 @@ void CopyBB2FB() src = topsrc = lbb + StartY * stride; dst = lfb + StartY * stride; -#ifdef USE_FBPAN - #error USE_FBPAN code is not working right now. - if (var_screeninfo.yoffset) - dst += fix_screeninfo.line_length * var_screeninfo.yres; - else - { - src += fix_screeninfo.line_length * var_screeninfo.yres; - topsrc += fix_screeninfo.line_length * var_screeninfo.yres; - } -#endif /* copy line25 in normal height */ if (!pagecatching ) memmove(dst + (24 * fontheight) * stride, src + (24 * fontheight) * stride, stride * fontheight); diff --git a/lib/libtuxtxt/tuxtxt.h b/lib/libtuxtxt/tuxtxt.h index b347d6420..9c49adf03 100644 --- a/lib/libtuxtxt/tuxtxt.h +++ b/lib/libtuxtxt/tuxtxt.h @@ -593,7 +593,7 @@ char versioninfo[16]; int hotlist[10]; int maxhotlist; -int pig, fb, lcd; +int lcd; int sx, ex, sy, ey; int PosX, PosY, StartX, StartY; int lastpage; From 9385bd8bd9c704b129a3ee64e65d516376cf7207 Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sun, 19 Feb 2017 17:57:59 +0100 Subject: [PATCH 07/10] fb_accel_glfb: fix color palette setting --- src/driver/fb_accel_glfb.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/driver/fb_accel_glfb.cpp b/src/driver/fb_accel_glfb.cpp index cc4054258..2d9ba539f 100644 --- a/src/driver/fb_accel_glfb.cpp +++ b/src/driver/fb_accel_glfb.cpp @@ -37,6 +37,7 @@ extern GLFramebuffer *glfb; #include #include +#include #define LOGTAG "[fb_glfb] " @@ -62,6 +63,33 @@ void CFbAccelGLFB::init(const char *) setMode(720, 576, 8 * sizeof(fb_pixel_t)); blit_thread = false; + + /* Windows Colors */ + int tr = 0xff; + paletteSetColor(0x1, 0x010101, tr); + paletteSetColor(0x2, 0x800000, tr); + paletteSetColor(0x3, 0x008000, tr); + paletteSetColor(0x4, 0x808000, tr); + paletteSetColor(0x5, 0x000080, tr); + paletteSetColor(0x6, 0x800080, tr); + paletteSetColor(0x7, 0x008080, tr); + paletteSetColor(0x8, 0xA0A0A0, tr); + paletteSetColor(0x9, 0x505050, tr); + paletteSetColor(0xA, 0xFF0000, tr); + paletteSetColor(0xB, 0x00FF00, tr); + paletteSetColor(0xC, 0xFFFF00, tr); + paletteSetColor(0xD, 0x0000FF, tr); + paletteSetColor(0xE, 0xFF00FF, tr); + paletteSetColor(0xF, 0x00FFFF, tr); + paletteSetColor(0x10, 0xFFFFFF, tr); + paletteSetColor(0x11, 0x000000, tr); + paletteSetColor(COL_BACKGROUND, 0x000000, 0x0); + + paletteSet(); + + useBackground(false); + m_transparent = m_transparent_default; + /* start the autoblit-thread (run() function) */ OpenThreads::Thread::start(); }; From 291eaa0450908cea1f33acdde98bed3dc10ed773 Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sun, 19 Feb 2017 18:04:50 +0100 Subject: [PATCH 08/10] tuxtxt: remove old, unused input code --- lib/libtuxtxt/tuxtxt.cpp | 140 --------------------------------------- lib/libtuxtxt/tuxtxt.h | 33 --------- 2 files changed, 173 deletions(-) diff --git a/lib/libtuxtxt/tuxtxt.cpp b/lib/libtuxtxt/tuxtxt.cpp index 2086d976c..4fec1c501 100644 --- a/lib/libtuxtxt/tuxtxt.cpp +++ b/lib/libtuxtxt/tuxtxt.cpp @@ -6331,146 +6331,6 @@ int GetRCCode() return 0; } -#if 0 -#if 1 -int GetRCCode() -{ - struct input_event ev; - static __u16 rc_last_key = KEY_RESERVED; - - int val = fcntl(rc, F_GETFL); - if(!(val & O_NONBLOCK)) - printf("[tuxtxt] GetRCCode in blocking mode.\n"); - - /* get code */ - if (read(rc, &ev, sizeof(ev)) == sizeof(ev)) - { - if (ev.value) - { - if (ev.code != rc_last_key || - ev.code == KEY_DOWN || ev.code == KEY_UP || /* allow direction keys */ - ev.code == KEY_LEFT || ev.code == KEY_RIGHT) /* to autorepeat... */ - { - rc_last_key = ev.code; - switch (ev.code) - { - case KEY_UP: RCCode = RC_UP; break; - case KEY_DOWN: RCCode = RC_DOWN; break; - case KEY_LEFT: RCCode = RC_LEFT; break; - case KEY_RIGHT: RCCode = RC_RIGHT; break; - case KEY_OK: RCCode = RC_OK; break; - case KEY_0: RCCode = RC_0; break; - case KEY_1: RCCode = RC_1; break; - case KEY_2: RCCode = RC_2; break; - case KEY_3: RCCode = RC_3; break; - case KEY_4: RCCode = RC_4; break; - case KEY_5: RCCode = RC_5; break; - case KEY_6: RCCode = RC_6; break; - case KEY_7: RCCode = RC_7; break; - case KEY_8: RCCode = RC_8; break; - case KEY_9: RCCode = RC_9; break; - case KEY_RED: RCCode = RC_RED; break; - case KEY_GREEN: RCCode = RC_GREEN; break; - case KEY_YELLOW: RCCode = RC_YELLOW; break; - case KEY_BLUE: RCCode = RC_BLUE; break; - case KEY_VOLUMEUP: RCCode = RC_PLUS; break; - case KEY_VOLUMEDOWN: RCCode = RC_MINUS; break; - case KEY_MUTE: RCCode = RC_MUTE; break; -#if !HAVE_TRIPLEDRAGON - /* on CS, change transparent mode with TEXT key */ - case KEY_TEXT: RCCode = RC_TEXT; break; -#else - /* on TD, cycle split screen mode with TTX key - * - the TD has a special key for transparent mode */ - case KEY_TEXT: RCCode = RC_MINUS; break; -#endif - case KEY_TTTV: RCCode = RC_MUTE; break; - case KEY_TTZOOM: RCCode = RC_PLUS; break; - case KEY_REVEAL: RCCode = RC_HELP; break; - //case KEY_HELP: RCCode = RC_HELP; break; - case KEY_INFO: RCCode = RC_HELP; break; - case KEY_MENU: RCCode = RC_DBOX; break; - case KEY_EXIT: RCCode = RC_HOME; break; - case KEY_POWER: RCCode = RC_STANDBY; break; - } -printf("[tuxtxt] new key, code %X\n", RCCode); - return 1; - } - } - else - { - RCCode = -1; - rc_last_key = KEY_RESERVED; - } - } - - RCCode = -1; - usleep(1000000/25); - - return 0; -} -#else -/* this is obsolete and can soon be removed */ -int GetRCCode() -{ - static unsigned short LastKey = -1; - int count; - if ((count = read(rc, &RCCode, 2)) != 2) - { - RCCode = -1; - usleep(1000000/100); - return 0; - } - - fprintf(stderr, "rccode: %04x\n", RCCode); - if (RCCode == LastKey && - RCCode != 0x18 && RCCode != 0x19 && /* allow direction keys */ - RCCode != 0x1b && RCCode != 0x1c) /* to autorepeat... */ - { - RCCode = -1; - return 1; - } - - LastKey = RCCode; - if ((RCCode & 0xFF00) == 0x0000) - { - switch (RCCode) - { - case 0x18: RCCode = RC_UP; break; - case 0x1c: RCCode = RC_DOWN; break; - case 0x19: RCCode = RC_LEFT; break; - case 0x1b: RCCode = RC_RIGHT; break; - case 0x1a: RCCode = RC_OK; break; - case 0x0e: RCCode = RC_0; break; - case 0x02: RCCode = RC_1; break; - case 0x03: RCCode = RC_2; break; - case 0x04: RCCode = RC_3; break; - case 0x05: RCCode = RC_4; break; - case 0x06: RCCode = RC_5; break; - case 0x07: RCCode = RC_6; break; - case 0x09: RCCode = RC_7; break; - case 0x0a: RCCode = RC_8; break; - case 0x0b: RCCode = RC_9; break; - case 0x1f: RCCode = RC_RED; break; - case 0x20: RCCode = RC_GREEN; break; - case 0x21: RCCode = RC_YELLOW; break; - case 0x22: RCCode = RC_BLUE; break; - case 0x29: RCCode = RC_PLUS; break; // [=X=] key -> double height - case 0x27: RCCode = RC_MINUS; break; // [txt] key -> split mode - case 0x11: RCCode = RC_MUTE; break; - case 0x28: RCCode = RC_MUTE; break; // [ /=] key - case 0x14: RCCode = RC_HELP; break; - case 0x2a: RCCode = RC_HELP; break; // [==?] key - case 0x12: RCCode = RC_DBOX; break; - case 0x15: RCCode = RC_HOME; break; - case 0x01: RCCode = RC_STANDBY; break; - } - return 1; - } - return 1; -} -#endif -#endif /* Local Variables: */ /* indent-tabs-mode:t */ /* tab-width:3 */ diff --git a/lib/libtuxtxt/tuxtxt.h b/lib/libtuxtxt/tuxtxt.h index 9c49adf03..7ccc8994c 100644 --- a/lib/libtuxtxt/tuxtxt.h +++ b/lib/libtuxtxt/tuxtxt.h @@ -32,8 +32,6 @@ #include -#include - #include #include @@ -146,36 +144,6 @@ int tv_pip_y; #define hold_mosaic 0x1E #define release_mosaic 0x1F -#if 0 -/* rc codes */ -#define RC_0 0x00 -#define RC_1 0x01 -#define RC_2 0x02 -#define RC_3 0x03 -#define RC_4 0x04 -#define RC_5 0x05 -#define RC_6 0x06 -#define RC_7 0x07 -#define RC_8 0x08 -#define RC_9 0x09 -#define RC_RIGHT 0x0A -#define RC_LEFT 0x0B -#define RC_UP 0x0C -#define RC_DOWN 0x0D -#define RC_OK 0x0E -#define RC_MUTE 0x0F -#define RC_STANDBY 0x10 -#define RC_GREEN 0x11 -#define RC_YELLOW 0x12 -#define RC_RED 0x13 -#define RC_BLUE 0x14 -#define RC_PLUS 0x15 -#define RC_MINUS 0x16 -#define RC_HELP 0x17 -#define RC_DBOX 0x18 -#define RC_TEXT 0x19 -#define RC_HOME 0x1F -#else #define RC_0 CRCInput::RC_0 #define RC_1 CRCInput::RC_1 #define RC_2 CRCInput::RC_2 @@ -216,7 +184,6 @@ int tv_pip_y; #define RC_SPLIT (CRCInput::RC_MaxRC + 1) #define RC_TEXT CRCInput::RC_text #endif -#endif typedef enum /* object type */ { From cdc9935b8313780ef4314186770994f035fd133e Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sun, 19 Feb 2017 18:14:57 +0100 Subject: [PATCH 09/10] tuxtxt: remove dead code, unnecessary header includes --- lib/libtuxtxt/libtuxtxt.cpp | 4 +--- lib/libtuxtxt/tuxtxt.h | 4 ---- lib/libtuxtxt/tuxtxt_common.h | 11 ----------- 3 files changed, 1 insertion(+), 18 deletions(-) diff --git a/lib/libtuxtxt/libtuxtxt.cpp b/lib/libtuxtxt/libtuxtxt.cpp index 2754c24b3..28290ab0a 100644 --- a/lib/libtuxtxt/libtuxtxt.cpp +++ b/lib/libtuxtxt/libtuxtxt.cpp @@ -10,9 +10,7 @@ ******************************************************************************/ #define TUXTXT_DEBUG 0 - -#include -#include +#include #include "tuxtxt_def.h" #include "tuxtxt_common.h" diff --git a/lib/libtuxtxt/tuxtxt.h b/lib/libtuxtxt/tuxtxt.h index 7ccc8994c..4d8e3c452 100644 --- a/lib/libtuxtxt/tuxtxt.h +++ b/lib/libtuxtxt/tuxtxt.h @@ -21,7 +21,6 @@ #include -#include #include #include #include @@ -32,9 +31,6 @@ #include -#include -#include - #include "tuxtxt_def.h" #include diff --git a/lib/libtuxtxt/tuxtxt_common.h b/lib/libtuxtxt/tuxtxt_common.h index 0abbf87c1..52f9d419e 100644 --- a/lib/libtuxtxt/tuxtxt_common.h +++ b/lib/libtuxtxt/tuxtxt_common.h @@ -1,8 +1,6 @@ /* tuxtxt_common.h * for license info see the other tuxtxt files */ -#include -#include #include #include #include @@ -1132,15 +1130,6 @@ int tuxtxt_stop_thread() delete dmx; dmx = NULL; } -#if 0 - if (tuxtxt_cache.dmx != -1) - { - //ioctl(tuxtxt_cache.dmx, DMX_STOP); - -// close(tuxtxt_cache.dmx); - } -// tuxtxt_cache.dmx = -1; -#endif #if 1//TUXTXT_DEBUG printf("TuxTxt stopped service %x\n", tuxtxt_cache.vtxtpid); #endif From 8bee8b4c6d7531f46cbe849f9477d46566660c7d Mon Sep 17 00:00:00 2001 From: "M. Liebmann" Date: Tue, 21 Feb 2017 06:25:12 +0100 Subject: [PATCH 10/10] fb_generic: use more swidth variables in fbCopyArea() --- src/driver/fb_generic.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/driver/fb_generic.cpp b/src/driver/fb_generic.cpp index 3370fd25c..37b66ca00 100644 --- a/src/driver/fb_generic.cpp +++ b/src/driver/fb_generic.cpp @@ -1617,9 +1617,9 @@ void CFrameBuffer::fbCopyArea(uint32_t width, uint32_t height, uint32_t dst_x, u return; } - dst_p = toBuf + dst_y*stride/sizeof(fb_pixel_t); - src_p = fromBuf + src_y*stride/sizeof(fb_pixel_t); - if ((w_ == xRes) && (stride == (xRes*sizeof(fb_pixel_t)))) { /* copy full width */ + dst_p = toBuf + dst_y*swidth; + src_p = fromBuf + src_y*swidth; + if ((w_ == xRes) && (swidth == xRes)) { /* copy full width */ //printf(">>>>> [%s:%d] copy full width - dst_p: %p, src_p: %p\n", __func__, __LINE__, dst_p, src_p); memcpy(dst_p, src_p, w_*h_*sizeof(fb_pixel_t)); } @@ -1628,8 +1628,8 @@ void CFrameBuffer::fbCopyArea(uint32_t width, uint32_t height, uint32_t dst_x, u uint32_t wMem = w_*sizeof(fb_pixel_t); for (i = 0; i < h_; i++) { memcpy(dst_p+dst_x, src_p+src_x, wMem); - dst_p += stride/sizeof(fb_pixel_t); - src_p += stride/sizeof(fb_pixel_t); + dst_p += swidth; + src_p += swidth; } } }