From 419964cd6d85419684918774f4ddc420714f616a Mon Sep 17 00:00:00 2001 From: Marten Richter Date: Wed, 3 Oct 2012 22:05:15 +0200 Subject: [PATCH] Switch to OpenVG based OSD, note Teletext and Subtitle rendering not working and little bugs in implementation --- GNUmakefile | 10 +- boxx.cc | 41 +- boxx.h | 3 +- defines.h | 2 +- fonts/{licence.txt => licensehelv.txt} | 0 fonts/licensesourcesans.txt | 93 +++ fonts/sourcesans.ttf | Bin 0 -> 119080 bytes glosdshader.cc | 0 glosdshader.h | 0 glshader.h | 0 log.h | 0 main.cc | 10 +- osdmvp.h | 2 +- osdopengl.cc | 2 +- osdopenvg.cc | 942 +++++++++++++++++++++++++ osdopenvg.h | 152 ++++ osdvector.cc | 336 +++++++++ osdvector.h | 201 ++++++ other/licence.txt | 4 + other/vdrhires.jpg | Bin 0 -> 40462 bytes other/wallpaper720p.jpg | Bin 0 -> 128495 bytes surface.cc | 12 +- surface.h | 5 +- surfacedirectfb.h | 2 +- surfacemvp.h | 2 +- surfacevector.cc | 278 ++++++++ surfacevector.h | 93 +++ teletextdecodervbiebu.h | 3 + vchannellist.cc | 2 +- vepg.cc | 19 +- videoomx.cc | 3 +- vscreensaver.cc | 4 +- wsymbol.h | 1 + wtabbar.h | 2 +- 34 files changed, 2174 insertions(+), 50 deletions(-) rename fonts/{licence.txt => licensehelv.txt} (100%) create mode 100644 fonts/licensesourcesans.txt create mode 100644 fonts/sourcesans.ttf mode change 100755 => 100644 glosdshader.cc mode change 100755 => 100644 glosdshader.h mode change 100755 => 100644 glshader.h mode change 100755 => 100644 log.h create mode 100644 osdopenvg.cc create mode 100644 osdopenvg.h create mode 100644 osdvector.cc create mode 100644 osdvector.h create mode 100644 other/vdrhires.jpg create mode 100644 other/wallpaper720p.jpg create mode 100644 surfacevector.cc create mode 100644 surfacevector.h diff --git a/GNUmakefile b/GNUmakefile index 81931d1..5b124af 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -55,13 +55,13 @@ endif ifeq ($(vomp_platform),raspberry) $(info Raspberry pi flags) -LDFLAGS = -Wall -LIBS = -L/opt/vc/lib -lpthread -lrt -lEGL -lGLESv2 -lopenmaxil -lbcm_host -lavformat -lavcodec -lavutil +LDFLAGS = -Wall -Wl,--format=binary -Wl,fonts/sourcesans.ttf -Wl,other/vdrhires.jpg -Wl,other/wallpaper720p.jpg -Wl,--format=default +LIBS = -L/opt/vc/lib -lpthread -lrt -lEGL -lOpenVG -lopenmaxil -lbcm_host -lavformat -lavcodec -lavutil -OBJECTS += main.o threadp.o osdopengl.o surfaceopengl.o ledraspberry.o mtdraspberry.o videoomx.o audioomx.o wjpegsimple.o remotelinux.o glshader.o glosdshader.o -LIBS+= -ljpeg +OBJECTS += main.o threadp.o osdvector.o surfacevector.o osdopenvg.o ledraspberry.o mtdraspberry.o videoomx.o audioomx.o wjpegsimple.o remotelinux.o +LIBS+= -lfreetype -lMagick++ -lMagickCore CROSSLIBS = -INCLUDES = -DVOMP_PLATTFORM_RASPBERRY -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads +INCLUDES = -DVOMP_PLATTFORM_RASPBERRY -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I/usr/include/freetype2 -I/usr/include/ImageMagick CXXFLAGS_DEV += -D__STDC_CONSTANT_MACROS CXXFLAGS_REL += -D__STDC_CONSTANT_MACROS diff --git a/boxx.cc b/boxx.cc index 1e0935f..4645d60 100644 --- a/boxx.cc +++ b/boxx.cc @@ -244,8 +244,8 @@ void Boxx::drawPara(const char* text, int x, int y, const DrawStyle& colour) char line[256]; int lineHeight = getFontHeight() + paraVSpace; - int lineWidth; - int thisCharWidth; + float lineWidth; + float thisCharWidth; int textPos; int linePos; int ypos; @@ -261,42 +261,44 @@ void Boxx::drawPara(const char* text, int x, int y, const DrawStyle& colour) while(1) { printLine = 0; + unsigned int cur_length=1; + wchar_t cur_char=getWChar(text+textPos,&cur_length); - if (text[textPos] == '\0') break; + if (cur_char == '\0') break; - if (text[textPos] == '\n') + if (cur_char == '\n') { - textPos++; // ignore the \n + textPos+=cur_length; // ignore the \n printLine = 1; break; } - - thisCharWidth = charWidth(text[textPos]); + thisCharWidth = charWidth(cur_char); if ((lineWidth + thisCharWidth) > (int)(area.w - (2 * paraMargin))) { // this character would break the right margin - if (text[textPos] == ' ') + if (cur_char == ' ') { // this char is a space, ignore and break - textPos++; + textPos+=cur_length; break; } else { // Need to go back to the last space in the line - while ((text[textPos] != ' ') && (linePos >= 0)) + while ((cur_char != ' ') && (linePos >= 0)) { - textPos--; + textPos-=cur_length; + cur_char=getWChar(text+textPos,&cur_length); linePos--; } // Now take the space we just found - textPos++; + textPos+=cur_length; break; } } - line[linePos++] = text[textPos]; + for (int n=0;ncharWidth(c); else if (surface) return surface->getCharWidth(c); - else return 10; //? + else return 16.; //? +} + +wchar_t Boxx::getWChar(const char* str, unsigned int *length) +{ + if (parent) return parent->getWChar(str,length); + else if (surface) return surface->getWChar(str,length); + else return '?'; //? } Surface * Boxx::getSurface() { diff --git a/boxx.h b/boxx.h index a97c895..887d03d 100644 --- a/boxx.h +++ b/boxx.h @@ -117,7 +117,8 @@ class Boxx void startFastDraw(); void endFastDraw(); - int charWidth(char c); + float charWidth(wchar_t c); + wchar_t getWChar(const char* str, unsigned int *length); void add(Boxx*); // a boxx has a set of child boxxs void remove(Boxx*); diff --git a/defines.h b/defines.h index fc4f354..5358246 100644 --- a/defines.h +++ b/defines.h @@ -90,7 +90,7 @@ long long getTimeMS(); //lirc? #define Mtd_TYPE MtdRaspberry //this is device dependent #define Led_TYPE LedRaspberry //this is device dependent - #define Osd_TYPE OsdOpenGL // This OpenGL ES 2.0, in the moment only for raspberry, but might be splitted for other devices + #define Osd_TYPE OsdOpenVG // This OpenGL ES 2.0, in the moment only for raspberry, but might be splitted for other devices #define OsdStartDev "" #define Audio_TYPE AudioOMX // This is Audio based on OpenMax and libav for decoding #define Video_TYPE VideoOMX // This is Video based on OpenMax diff --git a/fonts/licence.txt b/fonts/licensehelv.txt similarity index 100% rename from fonts/licence.txt rename to fonts/licensehelv.txt diff --git a/fonts/licensesourcesans.txt b/fonts/licensesourcesans.txt new file mode 100644 index 0000000..d154618 --- /dev/null +++ b/fonts/licensesourcesans.txt @@ -0,0 +1,93 @@ +Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. + +This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/fonts/sourcesans.ttf b/fonts/sourcesans.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ffe27865aaa6eaf96fefe0800afe02a3be71cb2f GIT binary patch literal 119080 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 #else success = led->init(-1); -#endif +#endif if (success) { logger->log("Core", Log::INFO, "LED module initialised"); diff --git a/osdmvp.h b/osdmvp.h index 5cdad84..5c23c63 100644 --- a/osdmvp.h +++ b/osdmvp.h @@ -35,7 +35,7 @@ class OsdMVP : public Osd { public: OsdMVP(); - ~OsdMVP(); + virtual ~OsdMVP(); int init(void* device); int shutdown(); diff --git a/osdopengl.cc b/osdopengl.cc index 3abbaf7..a62a2bd 100644 --- a/osdopengl.cc +++ b/osdopengl.cc @@ -443,7 +443,7 @@ void OsdOpenGL::EndPainting() { void OsdOpenGL::Blank() { BeginPainting(); - glClearColor(0.15f, 0.25f, 0.35f, 1.0f); // change this to black after testing + glClearColor(0.15f, 1.f, 0.35f, 1.0f); // change this to black after testing glClear( GL_COLOR_BUFFER_BIT ); glClear( GL_DEPTH_BUFFER_BIT ); EndPainting(); diff --git a/osdopenvg.cc b/osdopenvg.cc new file mode 100644 index 0000000..46bc4a1 --- /dev/null +++ b/osdopenvg.cc @@ -0,0 +1,942 @@ +/* + Copyright 2004-2005 Chris Tallon, 2006,2011-2012 Marten Richter + + This file is part of VOMP. + + VOMP is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + VOMP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with VOMP; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + + +#include "osdopenvg.h" +#include "mtd.h" +#include "videoomx.h" +#include + +#include "message.h" +#include "command.h" + +#include +#include +#include + +using namespace Magick; + +extern uint8_t font_data[] asm("_binary_fonts_sourcesans_ttf_start"); +extern uint8_t font_data_end[] asm("_binary_fonts_sourcesans_ttf_end"); +extern uint8_t vdr_data[] asm("_binary_other_vdrhires_jpg_start"); +extern uint8_t vdr_data_end[] asm("_binary_other_vdrhires_jpg_end"); +extern uint8_t wallpaper_data[] asm("_binary_other_wallpaper720p_jpg_start"); +extern uint8_t wallpaper_data_end[] asm("_binary_other_wallpaper720p_jpg_end"); + + +#define BACKBUFFER_WIDTH 1280 +#define BACKBUFFER_HEIGHT 720 + + +OsdOpenVG::OsdOpenVG() +{ + vgmutex.Lock(); + taskmutex.Lock(); + lastrendertime=getTimeMS(); + display_height=0; + display_width=0; + mode=0; + aspect_correction=1.; + + wait_id=1; + +} + +OsdOpenVG::~OsdOpenVG() +{ + + if (initted) + { + shutdown(); + } + + + vgmutex.Unlock(); + taskmutex.Unlock(); +} + + + +int OsdOpenVG::init(void* device) +{ + if (initted) return 0; + Video* video = Video::getInstance(); + //window=*((HWND*)device); + + // May be this device specific part should go to a device specific child class + + //init broadcom chipset (Move to video?) + + + //First get connection to egl + egl_display=eglGetDisplay(EGL_DEFAULT_DISPLAY); + + if (egl_display==EGL_NO_DISPLAY) { + Log::getInstance()->log("OSD", Log::WARN, "Could not get egl display! %x",eglGetError()); + vgmutex.Unlock(); + return 0; + } + + + + if (eglInitialize(egl_display, NULL, NULL)==EGL_FALSE) { + Log::getInstance()->log("OSD", Log::WARN, "Initialising display failed! %x",eglGetError()); + vgmutex.Unlock(); + return 0; + } + + + const char *query_str=eglQueryString(egl_display,EGL_CLIENT_APIS); + if (query_str) Log::getInstance()->logLongString("OSD", Log::NOTICE, query_str); + else Log::getInstance()->log("OSD", Log::WARN, "Could not query display %x",eglGetError()); + query_str=eglQueryString(egl_display,EGL_EXTENSIONS); + if (query_str) Log::getInstance()->logLongString("OSD", Log::NOTICE, query_str); + else Log::getInstance()->log("OSD", Log::WARN, "Could not query display %x",eglGetError()); + + if (eglBindAPI(EGL_OPENVG_API)==EGL_FALSE) { + Log::getInstance()->log("OSD", Log::WARN, "Binding openvg api failed! %x",eglGetError()); + vgmutex.Unlock(); + return 0; + } + + const EGLint attributs[]={ + EGL_RED_SIZE,8,EGL_GREEN_SIZE, 8,EGL_BLUE_SIZE, 8,EGL_ALPHA_SIZE, 8, + EGL_SURFACE_TYPE, EGL_WINDOW_BIT|EGL_PBUFFER_BIT, + EGL_CONFORMANT, EGL_OPENVG_BIT, + EGL_NONE + }; // Here, we might have to select the resolution! + + + EGLint number; + + if (eglChooseConfig(egl_display, attributs, &egl_ourconfig, 1, &number)==EGL_FALSE) { + Log::getInstance()->log("OSD", Log::WARN, "Choosing egl config failed! %x",eglGetError()); + vgmutex.Unlock(); + return 0; + } + + + + egl_context=eglCreateContext(egl_display,egl_ourconfig,NULL,NULL); + if (egl_context==EGL_NO_CONTEXT) { + Log::getInstance()->log("OSD", Log::WARN, "Creating egl context failed! %x",eglGetError()); + vgmutex.Unlock(); + return 0; + } + + // warning broadcom specific, get display size! + display_width=display_height=0; + if (graphics_get_display_size(0, &display_width, &display_height)<0) { + Log::getInstance()->log("OSD", Log::WARN, "Getting display size failed! (BCM API) "); + vgmutex.Unlock(); + return 0; + } + Log::getInstance()->log("OSD", Log::NOTICE, "Displaysize is %d x %d ",display_width, display_height); + VC_RECT_T dst_rect ={0,0,display_width,display_height}; + VC_RECT_T src_rect={0,0,BACKBUFFER_WIDTH <<16,BACKBUFFER_HEIGHT<<16}; + VC_RECT_T src_rect_bg={0,0,1<<16,1<<16}; + VC_RECT_T src_rect_im={0,0,1,1}; + + uint32_t back_image_ptr; + bcm_backres=vc_dispmanx_resource_create(VC_IMAGE_RGB888,1,1,&back_image_ptr); + unsigned int color=0x00FF0000; + vc_dispmanx_resource_write_data(bcm_backres,VC_IMAGE_RGB888,4,&color,&src_rect_im); + + DISPMANX_UPDATE_HANDLE_T bcm_update; + bcm_display=vc_dispmanx_display_open(0); + bcm_update=vc_dispmanx_update_start(0); + bcm_element=vc_dispmanx_element_add(bcm_update,bcm_display, + 2,&dst_rect, 0, + &src_rect,DISPMANX_PROTECTION_NONE,0, 0, (DISPMANX_TRANSFORM_T) 0); + + + bcm_background=vc_dispmanx_element_add(bcm_update,bcm_display, + 0,&dst_rect,bcm_backres , + &src_rect_bg,DISPMANX_PROTECTION_NONE,0, 0, (DISPMANX_TRANSFORM_T) 0); + + vc_dispmanx_update_submit_sync(bcm_update); + + + + static EGL_DISPMANX_WINDOW_T nativewindow; + nativewindow.element=bcm_element; + nativewindow.height=BACKBUFFER_HEIGHT; + nativewindow.width=BACKBUFFER_WIDTH; + + egl_surface = eglCreateWindowSurface(egl_display,egl_ourconfig, &nativewindow,NULL ); + if (egl_surface==EGL_NO_SURFACE) { + Log::getInstance()->log("OSD", Log::WARN, "Creating egl window surface failed!"); + vgmutex.Unlock(); + return 0; + } + Log::getInstance()->log("OSD", Log::DEBUG, "Making egl current in1%d",syscall(SYS_gettid)); + if (eglMakeCurrent(egl_display, egl_surface, egl_surface, egl_context)== EGL_FALSE) { + Log::getInstance()->log("OSD", Log::WARN, "Making egl Current failed"); + vgmutex.Unlock(); + return 0; + } + // Test stuff + + query_str=(const char*)vgGetString(VG_VERSION) ; + if (query_str) Log::getInstance()->logLongString("OSD", Log::NOTICE, query_str); + else Log::getInstance()->log("OSD", Log::WARN, "Could not query display %x",vgGetError()); + + query_str=(const char*)vgGetString(VG_VENDOR) ; + if (query_str) Log::getInstance()->logLongString("OSD", Log::NOTICE, query_str); + else Log::getInstance()->log("OSD", Log::WARN, "Could not query display %x",vgGetError()); + + query_str=(const char*)vgGetString(VG_RENDERER) ; + if (query_str) Log::getInstance()->logLongString("OSD", Log::NOTICE, query_str); + else Log::getInstance()->log("OSD", Log::WARN, "Could not query display %x",vgGetError()); + + query_str=(const char*)vgGetString(VG_EXTENSIONS) ; + if (query_str) Log::getInstance()->logLongString("OSD", Log::NOTICE, query_str); + else Log::getInstance()->log("OSD", Log::WARN, "Could not query display %x",vgGetError()); + + + + + + + + + + aspect_correction= ((float)BACKBUFFER_HEIGHT)/576.f/(((float)BACKBUFFER_WIDTH)/720.f); + initPaths(); + if (!loadFont()) { + return 0; + } + + eglSwapInterval(egl_display, 1 ); + + Log::getInstance()->log("OSD", Log::DEBUG, "Making egl current out 1%d",syscall(SYS_gettid)); + eglMakeCurrent(egl_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT ); + //Now we will create the Screen + initted = 1; // must set this here or create surface won't work + + + if (((VideoOMX*)Video::getInstance())->initUsingOSDObjects()!=1) { //call Video for init stuff + return 0; + } + InitializeMagick(""); + + pthread_cond_init(&vgtaskCond, NULL); + pthread_mutex_init(&vgtaskCondMutex, NULL); + + threadStart(); + taskmutex.Unlock(); + vgmutex.Unlock(); + + + return 1; +} + + +void OsdOpenVG::initPaths() +{ + + + VGPath current; + current=vgCreatePath(VG_PATH_FORMAT_STANDARD, + VG_PATH_DATATYPE_F,1.f,0.f, + 0,0,VG_PATH_CAPABILITY_ALL); + + vguLine(current,0.f,0.f,1.f,0.f); + // HorzLine + std_paths[HorzLine]=current; + + current=vgCreatePath(VG_PATH_FORMAT_STANDARD, + VG_PATH_DATATYPE_F,1.f,0.f, + 0,0,VG_PATH_CAPABILITY_ALL); + vguLine(current,0.f,0.f,0.f,1.f); + // VertLine + std_paths[VertLine]=current; + + current=vgCreatePath(VG_PATH_FORMAT_STANDARD, + VG_PATH_DATATYPE_F,1.f,0.f, + 0,0,VG_PATH_CAPABILITY_ALL); + //vguRect(current,0.f,0.f,1.f,1.f); + vguRect(current,0.f,0.f,1.f,1.f); + // Rectabgle + std_paths[Rectangle]=current; + + current=vgCreatePath(VG_PATH_FORMAT_STANDARD, + VG_PATH_DATATYPE_F,1.f,0.f, + 0,0,0); + vguEllipse(current,0.f,0.f,1.f,1.f); + // Point + std_paths[Point]=current; + +} + +void OsdOpenVG::destroyPaths() +{ + vgDestroyPath(std_paths[HorzLine]); + vgDestroyPath(std_paths[VertLine]); + vgDestroyPath(std_paths[Rectangle]); + vgDestroyPath(std_paths[Point]); + +} + + +int OsdOpenVG::shutdown() +{ + if (!initted) return 0; + + initted = 0; + Log::getInstance()->log("OSD", Log::DEBUG, "shutdown mark1"); + threadStop(); + Log::getInstance()->log("OSD", Log::DEBUG, "shutdown mark2"); + processTasks(); + Log::getInstance()->log("OSD", Log::DEBUG, "shutdown mark3"); + + taskmutex.Lock(); + vgmutex.Lock(); + (((VideoOMX*)Video::getInstance())->shutdownUsingOSDObjects()); + + FT_Done_Face(ft_face); + vgDestroyFont(vgfont); + destroyPaths(); + vgClear(0,0,BACKBUFFER_WIDTH,BACKBUFFER_HEIGHT); + eglSwapBuffers(egl_display, egl_surface); + Log::getInstance()->log("OSD", Log::DEBUG, "Making egl current out final"); + eglMakeCurrent(egl_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT ); + eglDestroySurface(egl_display,egl_surface); + eglDestroyContext(egl_display,egl_context); + eglTerminate(egl_display ); + + DISPMANX_UPDATE_HANDLE_T bcm_update; + bcm_update=vc_dispmanx_update_start(0); + + vc_dispmanx_element_remove(bcm_update,bcm_element); + vc_dispmanx_element_remove(bcm_update,bcm_background); + vc_dispmanx_update_submit_sync(bcm_update); + vc_dispmanx_resource_delete(bcm_backres); + vc_dispmanx_display_close(bcm_display); + + + + return 1; +} + + +void OsdOpenVG::threadMethod() +{ + // We have to claim the egl context for this thread + + if (eglMakeCurrent(egl_display, egl_surface, egl_surface, egl_context)== EGL_FALSE) { + Log::getInstance()->log("OSD", Log::WARN, "Making egl Current failed in thread %x",eglGetError()); + return; + } + int ts=0; + while (true) + { + ts=1; + unsigned int waittime=1; + + if (initted) { + + long long time1 = getTimeMS(); + if ((time1 - lastrendertime) > 200) {//5 fps for OSD updates are enough, avoids tearing + InternalRendering(); + lastrendertime = getTimeMS(); + + } + if (processTasks()) ts=0; + } + threadCheckExit(); + if (ts!=0) { + struct timespec target_time; + clock_gettime(CLOCK_REALTIME,&target_time); + target_time.tv_nsec+=1000000LL*ts; + if (target_time.tv_nsec>999999999) { + target_time.tv_nsec-=1000000000L; + target_time.tv_sec+=1; + } + threadLock(); + threadWaitForSignalTimed(&target_time); + threadUnlock(); + } + //Sleep(1); + } + //eglMakeCurrent(egl_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT ); +} + + +void OsdOpenVG::threadPostStopCleanup() +{ + //Doing nothing + //goo; +} + + + + + + +void OsdOpenVG::InternalRendering(){ + vgmutex.Lock(); + float colclear[]={1.f,1.0f,1.f,1.f}; + vgSetfv(VG_CLEAR_COLOR,4,colclear); + vgClear(0,0,BACKBUFFER_WIDTH,BACKBUFFER_HEIGHT); + vgSeti(VG_BLEND_MODE, VG_BLEND_SRC); + + + drawSurfaces(); //iterate through and draws all commands + + //Show it to the user! + eglSwapBuffers(egl_display, egl_surface); + vgmutex.Unlock(); + +} + +/*font stuff*/ + +float OsdOpenVG::getFontHeight() +{ + return font_height; //dummy +} +float OsdOpenVG::getCharWidth(wchar_t c) +{ + unsigned int glyph_index=FT_Get_Char_Index(ft_face,c); + return font_exp_x[glyph_index]; +} + +int OsdOpenVG::loadFont() +{ + int error=FT_Init_FreeType(&ft_library); + float font_size=16.f; + if (error) + { + Log::getInstance()->log("OSD", Log::WARN, "Could not load freetype %x",error); + return 0; + } + + error=FT_New_Memory_Face(ft_library,font_data,font_data_end-font_data,0,&ft_face ); + if (error) { + Log::getInstance()->log("OSD", Log::WARN, "Could not load font face %x",error); + return 0; + } + error=FT_Set_Char_Size(ft_face,0,font_size*64,0,0 /*dpi*/); + if (error) { + FT_Done_Face(ft_face); + Log::getInstance()->log("OSD", Log::WARN, "Could not set face size %x",error); + return 0; + } + vgfont=vgCreateFont(0); + FT_ULong cur_char; + FT_UInt glyph; + font_height=ft_face->size->metrics.height/64.f; + cur_char = FT_Get_First_Char(ft_face,&glyph); + vector segments; + vector coord; + segments.reserve(256); + coord.reserve(1024); + //Log::getInstance()->log("OSD", Log::DEBUG, "Create Glyph test %d %x %x %d",cur_char,font_data_end,font_data,glyph); + while (glyph !=0) + { + error=FT_Load_Glyph(ft_face,glyph,FT_LOAD_DEFAULT); + if (error){ + FT_Done_Face(ft_face); + Log::getInstance()->log("OSD", Log::WARN, "Could not load glyph %x",error); + return 0; + } + VGPath path; + FT_Outline ot=ft_face->glyph->outline; + segments.clear(); + coord.clear(); + + if (ot.n_contours ==0) { + path=VG_INVALID_HANDLE; + } else { + path=vgCreatePath(VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F, + 1.0f,0.f,0,0,VG_PATH_CAPABILITY_ALL); + + /* convert glyph */ + FT_Vector *pt=ot.points; + const char *tags=ot.tags; + const short* cont=ot.contours; + short n_cont=ot.n_contours; + short n_point=ot.n_points; + short last_cont=0; + for (short point=0;n_cont!=0;cont++,n_cont--) { + short next_cont=*cont+1; + bool first=true; + char last_tag=0; + short first_point=point; + //Log::getInstance()->log("OSD", Log::DEBUG, "runs %d",*cont); + for (;pointlog("OSD", Log::DEBUG, "tag %d point %d %d: %d %d",tag,fpoint.x,fpoint.y,point,n_point); + if (first) { + segments.push_back(VG_MOVE_TO); + first=false; + } else if (tag &0x1) { //on curve + if (last_tag &0x1) { + segments.push_back(VG_LINE_TO); + } else if (last_tag &0x2){ + segments.push_back(VG_CUBIC_TO); + } else { + segments.push_back(VG_QUAD_TO); + } + + } else { + if (!(tag &0x2)){ + if (!(last_tag &0x1)) { + segments.push_back(VG_QUAD_TO); + int coord_size=coord.size(); + VGfloat x=(coord[coord_size-2]+ ((float)fpoint.x)/64.f)*0.5f*aspect_correction; + VGfloat y=(coord[coord_size-1]+(font_size- ((float)fpoint.y)/64.f))*0.5f; + coord.push_back(x); + coord.push_back(y); + } + } + + + } + last_tag=tag; + coord.push_back(((float)fpoint.x)*aspect_correction/64.); + coord.push_back(font_size-((float)fpoint.y)/64.); + //Log::getInstance()->log("OSD", Log::DEBUG, "Create APD Glyph coord %d %d %g %g",fpoint.x,fpoint.y,coord[coord.size()-2],coord[coord.size()-1]); + } + if (!(last_tag &0x1)) { + if (last_tag &0x2) { + segments.push_back(VG_CUBIC_TO); + } else { + segments.push_back(VG_QUAD_TO); + } + coord.push_back(((float)pt[first_point].x)*aspect_correction/64.); + coord.push_back(font_size-((float)pt[first_point].y)/64.); + } + //segments.push_back(VG_CLOSE_PATH); + + + } + vgAppendPathData(path,segments.size(),&segments[0],&coord[0]); + int n=0; + /* for (int m=0;mlog("OSD", Log::DEBUG, "Move To %g %g",coord[n],coord[n+1]);n+=2; break; + case VG_LINE_TO: + Log::getInstance()->log("OSD", Log::DEBUG, "Line To %g %g",coord[n],coord[n+1]);n+=2; break; + case VG_CUBIC_TO: + Log::getInstance()->log("OSD", Log::DEBUG, "Cubic To %g %g %g %g %g %g",coord[n],coord[n+1],coord[n+2],coord[n+3],coord[n+4],coord[n+5]);n+=6; break; + case VG_QUAD_TO: + Log::getInstance()->log("OSD", Log::DEBUG, "Quad To %g %g %g %g",coord[n],coord[n+1],coord[n+2],coord[n+3]);n+=4; break; + case VG_CLOSE_PATH: + Log::getInstance()->log("OSD", Log::DEBUG, "Close Path"); break; + } + + }*/ + //vguRect(path,0.f,0.f,1.f,1.f); + //Log::getInstance()->log("OSD", Log::DEBUG, "Create APD Glyph %d %x",segments.size(),vgGetError()); + } + VGfloat ori[]={0.f,0.f}; + VGfloat esp[]={ft_face->glyph->advance.x/64.f*aspect_correction,ft_face->glyph->advance.y/64.f}; + font_exp_x[glyph]=ft_face->glyph->advance.x/64.f*aspect_correction; //recalculate + + vgSetGlyphToPath(vgfont,glyph,path,VG_FALSE,ori,esp); + //Log::getInstance()->log("OSD", Log::DEBUG, "Create Glyph %d %d %x",path,glyph,vgGetError()); + if (path!=VG_INVALID_HANDLE) { + vgDestroyPath(path); + } + cur_char = FT_Get_Next_Char(ft_face,cur_char,&glyph); + } + return 1; +} + + +void OsdOpenVG::drawSetTrans(SurfaceCommands & sc) +{ + vgSeti(VG_MATRIX_MODE, VG_MATRIX_PATH_USER_TO_SURFACE); + vgLoadIdentity(); + vgScale(((float)BACKBUFFER_WIDTH)/720.f, -((float)BACKBUFFER_HEIGHT)/576.f); + vgTranslate(0.f+sc.x,-576.f+sc.y); + + vgSeti(VG_MATRIX_MODE, VG_MATRIX_GLYPH_USER_TO_SURFACE); + vgLoadIdentity(); + vgScale(((float)BACKBUFFER_WIDTH)/720.f, -((float)BACKBUFFER_HEIGHT)/576.f); + vgTranslate(0.f+sc.x,-576.f+sc.y); + + vgSeti(VG_MATRIX_MODE, VG_MATRIX_IMAGE_USER_TO_SURFACE); + vgLoadIdentity(); + vgScale(((float)BACKBUFFER_WIDTH)/720.f, -((float)BACKBUFFER_HEIGHT)/576.f); + vgTranslate(0.f+sc.x,-576.f+sc.y); + + + + //vgTranslate(0.f+sc.x,576.f-sc.y); + //Log::getInstance()->log("OSD", Log::DEBUG, "Draw Translate %g %g",sc.x,sc.y); + +} +void OsdOpenVG::executeDrawCommand(SVGCommand & command) +{ + + VGfloat save_matrix[9]; + switch (command.instr) { + case DrawPath: { + vgSeti(VG_MATRIX_MODE, VG_MATRIX_PATH_USER_TO_SURFACE); + // VGuint rgba; + // rgba = vgGetColor((VGPaint) command.reference); + //Log::getInstance()->log("OSD", Log::DEBUG, "Draw Path %d %x %g %g %g %g",command.reference,command.target.path_index,command.x,command.y,command.w,command.h); + //vgSeti(VG_FILL_RULE,); + + vgGetMatrix(save_matrix); + vgSetPaint((VGPaint) command.reference,VG_FILL_PATH); + vgSetPaint((VGPaint) command.reference,VG_STROKE_PATH); + vgTranslate(command.x,command.y); + vgScale(command.w,command.h); + vgDrawPath(std_paths[command.target.path_index],VG_FILL_PATH); + vgLoadMatrix(save_matrix); + } break; + case DrawImage: { + vgSeti(VG_MATRIX_MODE, VG_MATRIX_IMAGE_USER_TO_SURFACE); + vgGetMatrix(save_matrix); + vgTranslate(command.x,command.y); + //vgScale(command.w,command.h); + if (command.reference) { //special behaviout for bw images they act as a mask on the current paint + vgSetPaint((VGPaint) command.reference,VG_FILL_PATH); + vgSetPaint((VGPaint) command.reference,VG_STROKE_PATH); + vgSeti(VG_IMAGE_MODE,VG_DRAW_IMAGE_STENCIL); + vgSeti(VG_BLEND_MODE, VG_BLEND_SRC_OVER); + vgScale(aspect_correction,1.f); + } else { + //vgScale(720.f/((float)BACKBUFFER_WIDTH), 576.f/((float)BACKBUFFER_HEIGHT)); + vgScale(aspect_correction,1.f); + vgSeti(VG_IMAGE_MODE,VG_DRAW_IMAGE_NORMAL); + } + + + //vgLoadIdentity(); + //vgTranslate(200.f,500.f); + //vgScale(100.f,100.f); + + vgDrawImage((VGImage) command.target.image); + //Log::getInstance()->log("OSD", Log::DEBUG, "Draw Image %d %x %g %g %g %g %x",command.reference,command.target.image,command.x,command.y,command.w,command.h, + // vgGetError()); + if (command.reference) { + vgSeti(VG_IMAGE_MODE,VG_DRAW_IMAGE_NORMAL); + vgSeti(VG_BLEND_MODE, VG_BLEND_SRC); + } + vgLoadMatrix(save_matrix); + } break; + case DrawGlyph: { + vgSeti(VG_MATRIX_MODE, VG_MATRIX_GLYPH_USER_TO_SURFACE); + vgGetMatrix(save_matrix); + vgSetPaint((VGPaint) command.reference,VG_FILL_PATH); + vgSetPaint((VGPaint) command.reference,VG_STROKE_PATH); + vgTranslate(command.x,command.y); + // vgLoadIdentity(); + // vgTranslate(500.,500.); + //vgScale(18.f,18.f); + VGfloat gori[]={0.,0.}; + vgSetfv(VG_GLYPH_ORIGIN,2,gori); + + unsigned int glyph_index=FT_Get_Char_Index(ft_face,command.target.textchar); + vgDrawGlyph(vgfont,glyph_index,VG_FILL_PATH,VG_FALSE); + //vgDrawPath(std_paths[Rectangle],VG_FILL_PATH); + /* Log::getInstance()->log("OSD", Log::DEBUG, "Draw Glyph %d %c %d %g %g %x",command.reference,command.target.textchar,glyph_index,command.x,command.y, + vgGetError());*/ + vgLoadMatrix(save_matrix); + vgSeti(VG_MATRIX_MODE, VG_MATRIX_PATH_USER_TO_SURFACE); + } break; + case DrawTTchar:{ + + }break; + } +} + +unsigned int OsdOpenVG::handleTask(OpenVGCommand& command) +{ + switch (command.task){ + case OVGdestroyImageRef: { + vgDestroyImage((VGImage)command.param1); + return 0; + } break; + case OVGdestroyPaint: { + Log::getInstance()->log("OSD", Log::DEBUG, "Draw Paint Destroy %d ",command.param1); + vgDestroyPaint((VGPaint)command.param1); + return 0; + } break; + case OVGcreateImageRGBA: { + return vgCreateImage(VG_sRGBA_8888,command.param1, command.param2, + VG_IMAGE_QUALITY_NONANTIALIASED| + VG_IMAGE_QUALITY_FASTER|VG_IMAGE_QUALITY_BETTER); + } break; + case OVGcreateMonoBitmap: { + VGImage handle=vgCreateImage(VG_A_1,command.param1, command.param2, + VG_IMAGE_QUALITY_NONANTIALIASED| + VG_IMAGE_QUALITY_FASTER|VG_IMAGE_QUALITY_BETTER); + //Log::getInstance()->log("OSD", Log::DEBUG, "Draw create mono %d %d %x %d",command.param1,command.param2,vgGetError(),handle); + unsigned int buffer_len=(command.param1*command.param2)>>3; + unsigned char * buffer=(unsigned char*)malloc(buffer_len); + unsigned char * r_buffer1=buffer; + const unsigned char * r_buffer2=(const unsigned char *)command.data; + unsigned char *buffer_end=buffer+buffer_len; + while (r_buffer1!=buffer_end) { + unsigned char byte=*r_buffer2; + *r_buffer1=((byte * 0x0802LU & 0x22110LU) | (byte * 0x8020LU & 0x88440LU)) * 0x10101LU >> 16; + r_buffer1++;r_buffer2++; + } + + + vgImageSubData(handle,buffer,command.param1>>3, + VG_A_1,0,0,command.param1, command.param2); + free(buffer); + // Log::getInstance()->log("OSD", Log::DEBUG, "Draw create mono2 %d %d %x %d",command.param1,command.param2,vgGetError(),handle); + return handle; + } break; + case OVGcreateImageFile: { + VGImage handle; + try{ + Image *imagefile=(Image*)command.data; + Blob imageblob; + imagefile->write(&imageblob,"RGBA"); + + + handle=vgCreateImage(VG_sXBGR_8888,imagefile->columns(),imagefile->rows(), + VG_IMAGE_QUALITY_NONANTIALIASED| + VG_IMAGE_QUALITY_FASTER|VG_IMAGE_QUALITY_BETTER); + // Log::getInstance()->log("OSD", Log::DEBUG, "Draw create image details %d %d %x mark1",imagefile->columns(),imagefile->rows(),*(unsigned int*)imageblob.data()); + vgImageSubData(handle,imageblob.data(),imagefile->columns()*4, + VG_sXBGR_8888,0,0,imagefile->columns(),imagefile->rows()); + // Log::getInstance()->log("OSD", Log::DEBUG, "Draw create image details %d %d %x mark2",imagefile->columns(),imagefile->rows(),*(unsigned int*)imageblob.data()); + delete imagefile; + }catch( Exception &error_ ) + { + Log::getInstance()->log("OSD", Log::DEBUG, "Libmagick hT: %s",error_.what()); + + return 0; + } + + //Log::getInstance()->log("OSD", Log::DEBUG, "Draw create file %d %d %x %d",command.param1,command.param2,vgGetError(),handle); + return handle; + } break; + case OVGcreateColorRef :{ + VGPaint handle; + handle=vgCreatePaint(); + vgSetParameteri(handle, VG_PAINT_TYPE, VG_PAINT_TYPE_COLOR); + vgSetColor(handle,command.param1); + VGuint rgba; + rgba = vgGetColor((VGPaint)handle); + Log::getInstance()->log("OSD", Log::DEBUG, "Draw Paint %d %x %x",handle,command.param1,rgba); + return handle; + } break; + case OVGimageUploadLine: { + vgImageSubData((VGImage)command.param1,command.data,0,VG_sARGB_8888,0,command.param2,command.param3,1); + return 0; + } break; + + } +} + +bool OsdOpenVG::processTasks() +{ + bool worked=false; + taskmutex.Lock(); + vgmutex.Lock(); + while (vgcommands.size()>0) + { + OpenVGCommand &comm=vgcommands.front(); + OpenVGResponse resp; + resp.result=handleTask(comm); + resp.id=comm.id; + if (comm.id) { + vgresponses.push_back(resp); + } + vgcommands.pop_front(); + taskmutex.Unlock(); + vgmutex.Unlock(); + //threadCheckExit(); + pthread_mutex_lock(&vgtaskCondMutex); + pthread_cond_signal(&vgtaskCond); + pthread_mutex_unlock(&vgtaskCondMutex); + taskmutex.Lock(); + vgmutex.Lock(); + worked=true; + } + taskmutex.Unlock(); + vgmutex.Unlock(); + + return worked; +} + +bool OsdOpenVG::haveOpenVGResponse(unsigned int id,unsigned int * resp) +{ + taskmutex.Lock(); + if (vgresponses.size()>0) + { + deque::iterator itty=vgresponses.begin(); + while (itty!=vgresponses.end()) + { + if ((*itty).id==id) { + *resp=(*itty).result; + taskmutex.Unlock(); + return true; + } + itty++; + } + } + taskmutex.Unlock(); + return false; +} + + +unsigned int OsdOpenVG::putOpenVGCommand(OpenVGCommand& comm,bool wait) +{ + taskmutex.Lock(); + if (wait){ + comm.id=wait_id; + wait_id++; + } else { + comm.id=0; // we are not waiting + } + vgcommands.push_back(comm); + taskmutex.Unlock(); + threadSignal(); + while (wait) { + unsigned int resp; + if (!haveOpenVGResponse(comm.id,&resp)) { + struct timespec target_time; + clock_gettime(CLOCK_REALTIME,&target_time); + target_time.tv_nsec+=1000000LL*100; + if (target_time.tv_nsec>999999999) { + target_time.tv_nsec-=1000000000L; + target_time.tv_sec+=1; + } + pthread_mutex_lock(&vgtaskCondMutex); + pthread_cond_timedwait(&vgtaskCond, &vgtaskCondMutex,&target_time); + pthread_mutex_unlock(&vgtaskCondMutex); + } else { + return resp; + } + } + return 0; +} + +void OsdOpenVG::imageUploadLine(ImageIndex index,unsigned int j,unsigned int width,void *data) +{ + vgImageSubData((VGImage)index,data,0,VG_sARGB_8888,0,j,width,1); + + struct OpenVGCommand comm; + comm.task=OVGimageUploadLine; + comm.param1=index; + comm.param2=j; + comm.param3=width; + comm.data=data; + putOpenVGCommand(comm,true); +} + +void OsdOpenVG::destroyImageRef(ImageIndex index) +{ + struct OpenVGCommand comm; + comm.task=OVGdestroyImageRef; + comm.param1=index; + putOpenVGCommand(comm,false); +} + +ImageIndex OsdOpenVG::createJpeg(const char* fileName, int *width,int *height) +{ + Image* magicimage=NULL; + bool mem=false; + struct OpenVGCommand comm; + comm.task=OVGcreateImageFile; + + try{ + // Now figure out, if it is a special case + if (strcmp(fileName,"/vdr.jpg")==0) { + magicimage=new Image(Blob(vdr_data,vdr_data_end-vdr_data)); + *height=100; // this is faked so that the system does use the old coordinate system + *width=ceil(190.f*aspect_correction); + Log::getInstance()->log("OSD", Log::DEBUG, "LoadIm vdr.jpg"); + } else if (strcmp(fileName,"/wallpaperPAL.jpg")==0) { + magicimage=new Image(Blob(wallpaper_data,wallpaper_data_end-wallpaper_data)); + *width=720; // this is faked so that the system does use the old coordinate system + *height=576; + Log::getInstance()->log("OSD", Log::DEBUG, "LoadIm wallpaperPAL.jpg"); + } else { + magicimage=new Image(); + magicimage->read(fileName); + Log::getInstance()->log("OSD", Log::DEBUG, "LoadIm file: %s",fileName); + *width=ceil(magicimage->baseColumns()*aspect_correction); // this is faked so that the system does use the old coordinate system + *height=magicimage->baseRows(); + } + + }catch( Exception &error_ ) + { + Log::getInstance()->log("OSD", Log::DEBUG, "Libmagick: %s",error_.what()); + + return 0; + } + comm.data=magicimage; + return putOpenVGCommand(comm,true); +} + +ImageIndex OsdOpenVG::createMonoBitmap(void *base,int width,int height) +{ + struct OpenVGCommand comm; + comm.task=OVGcreateMonoBitmap; + comm.param1=width; + comm.param2=height; + comm.data=base; + return putOpenVGCommand(comm,true); +} + +ImageIndex OsdOpenVG::createImageRGBA(int width,int height) +{ + struct OpenVGCommand comm; + comm.task=OVGcreateImageRGBA; + comm.param1=width; + comm.param2=height; + return putOpenVGCommand(comm,true); +} + +void OsdOpenVG::destroyStyleRef(unsigned int index) +{ + struct OpenVGCommand comm; + comm.task=OVGdestroyPaint; + comm.param1=index; + putOpenVGCommand(comm,false); +} + +unsigned int OsdOpenVG::createStyleRef(const DrawStyle &c) +{ + unsigned int col=c.rgba(); + struct OpenVGCommand comm; + comm.task=OVGcreateColorRef; + comm.param1=col<<8 | (col &0xff000000)>>24; + comm.data=&c; + return putOpenVGCommand(comm,true); +} + +unsigned int OsdOpenVG::createColorRef(const Colour &c) +{ + unsigned int col=c.rgba(); + struct OpenVGCommand comm; + comm.task=OVGcreateColorRef; + comm.param1=col<<8 | (col &0xff000000)>>24; + comm.data=&c; + return putOpenVGCommand(comm,true); +} + + diff --git a/osdopenvg.h b/osdopenvg.h new file mode 100644 index 0000000..3d4e5f4 --- /dev/null +++ b/osdopenvg.h @@ -0,0 +1,152 @@ +/* + Copyright 2004-2005 Chris Tallon, 2006,2011-2012 Marten Richter + + This file is part of VOMP. + + VOMP is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + VOMP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with VOMP; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#ifndef OSDOPENVG_H +#define OSDOPENVG_H + +#include + + +#include +#include +#include +#include + + + +#include "osdvector.h" +#include "defines.h" +#include "log.h" +#include "threadp.h" +#include "mutex.h" +#include "videoomx.h" + +#include + +#include +#include FT_FREETYPE_H + +enum OpenVGTask { + OVGdestroyImageRef, + OVGdestroyPaint, + OVGcreateImageRGBA, + OVGcreateMonoBitmap, + OVGcreateColorRef, + OVGimageUploadLine, + OVGcreateImageFile +}; + +struct OpenVGCommand +{ + enum OpenVGTask task; + const void *data; + unsigned int param1,param2,param3; + unsigned int id; //only set an id if you are waiting +}; + +struct OpenVGResponse{ + unsigned int id; + unsigned int result; +}; + + +class OsdOpenVG : public OsdVector, public Thread_TYPE +{ + public: + OsdOpenVG(); + virtual ~OsdOpenVG(); + + int init(void* device); + int shutdown(); + + + float getFontHeight(); + float getCharWidth(wchar_t c); + void imageUploadLine(ImageIndex index,unsigned int j,unsigned int width,void *data); + + +protected: + /*osd vector implementation*/ + void destroyImageRef(ImageIndex index); + ImageIndex createJpeg(const char* fileName, int *width,int *height); + ImageIndex createMonoBitmap(void *base,int width,int height); + ImageIndex createImageRGBA(int width,int height); + void destroyStyleRef(unsigned int index); + unsigned int createStyleRef(const DrawStyle &c); + unsigned int createColorRef(const Colour &c); + + void drawSetTrans(SurfaceCommands & sc); + void executeDrawCommand(SVGCommand & command); + + void initPaths(); + void destroyPaths(); + VGPath std_paths[Point+1]; + long long lastrendertime; + void InternalRendering(); + + + + Mutex vgmutex; + Mutex taskmutex; + pthread_cond_t vgtaskCond; + pthread_mutex_t vgtaskCondMutex; + deque vgcommands; + deque vgresponses; + bool processTasks(); + bool haveOpenVGResponse(unsigned int id,unsigned int * resp); + unsigned int putOpenVGCommand(OpenVGCommand& comm,bool wait); + unsigned int handleTask(OpenVGCommand& command); + unsigned int wait_id; + + FT_Library ft_library; + FT_Face ft_face; + VGFont vgfont; + int loadFont(); + map font_exp_x; + + + + void threadMethod(); + void threadPostStopCleanup(); + + + /* BCM specific */ + + uint32_t display_height; + uint32_t display_width; + DISPMANX_DISPLAY_HANDLE_T bcm_display; + DISPMANX_ELEMENT_HANDLE_T bcm_element; + DISPMANX_ELEMENT_HANDLE_T bcm_background; + DISPMANX_RESOURCE_HANDLE_T bcm_backres; + + uint32_t mode; + + + EGLDisplay egl_display; + EGLSurface egl_surface; + EGLContext egl_context; + EGLConfig egl_ourconfig; + float font_height; + float aspect_correction; + + +}; + +#endif diff --git a/osdvector.cc b/osdvector.cc new file mode 100644 index 0000000..5663fa9 --- /dev/null +++ b/osdvector.cc @@ -0,0 +1,336 @@ +/* + Copyright 2012 Marten Richter + + This file is part of VOMP. + + VOMP is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + VOMP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with VOMP; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#include "osdvector.h" +#include "surfacevector.h" + +OsdVector::OsdVector() +{ + setlocale(LC_CTYPE,"C.UTF-8"); +} + +OsdVector::~OsdVector() +{ + +} + + +int OsdVector::getFD() +{ + return 0; +} + +void OsdVector::screenShot(const char* fileName) +{ + //Do nothing, +} + +Surface * OsdVector::createNewSurface() +{ + return new SurfaceVector(this); +} + +void OsdVector::BeginPainting() +{ + surfaces_mutex.Lock(); +} +void OsdVector::EndPainting() +{ + surfaces_mutex.Unlock(); +} + +void OsdVector::Blank() +{ + // do nothing? remove this one? +} + +void OsdVector::drawSurfaces() +{ + surfaces_mutex.Lock(); + list todraw; //First figure out if a surfaces is below another surface + list::iterator itty1=scommands.begin(); + while (itty1!=scommands.end()) { + list::iterator itty2=itty1; + itty2++; + bool hidden=false; + while (itty2!=scommands.end()) { + SurfaceCommands & ref1=*itty1; + SurfaceCommands & ref2=*itty2; + if (ref1.x>=ref2.x && ref1.y>=ref2.y + && (ref1.x+ref1.w) <= (ref2.x+ref2.w) + && (ref1.y+ref1.h) <= (ref2.y+ref2.h) ) { + hidden=true; + break; + } + itty2++; + } + if (!hidden) { // we are not hidden, perfect + todraw.push_back(&(*itty1)); + } + itty1++; + } + //Now go through all surfaces and draw them + list::iterator curdraw=todraw.begin(); + while (curdraw!=todraw.end()) { + drawSetTrans(*(*curdraw)); + list::iterator commands=(*(*curdraw)).commands.begin(); + list::iterator end=(*(*curdraw)).commands.end(); + while (commands!=end) { + executeDrawCommand(*commands); + commands++; + } + curdraw++; + } + + surfaces_mutex.Unlock(); +} + + +void OsdVector::updateOrAddSurface(const SurfaceVector *surf,float x,float y,float height,float width, + list& commands) +{ + surfaces_mutex.Lock(); + //First determine it is already in our system + list::iterator itty=scommands.begin(); + while (itty!=scommands.end()) { + if ((*itty).surf==surf) { + //decrease the references + dereferenceSVGCommand((*itty).commands); + break; + } + itty++; + } + // if not insert it + if (itty==scommands.end()) { + SurfaceCommands new_sc; + new_sc.surf=surf; + new_sc.x=x; + new_sc.y=y; + new_sc.w=width; + new_sc.h=height; + itty=scommands.insert(itty,new_sc); + } + // then clear and copy + (*itty).commands.clear(); + (*itty).commands=commands; + //increase the references + list::iterator sitty=(*itty).commands.begin(); + while (sitty!=(*itty).commands.end()) + { + incStyleRef((*sitty).getRef()); + ImageIndex ii=(*sitty).getImageIndex(); + if (ii) incImageRef(ii); + sitty++; + } + cleanupOrphanedRefs(); + + surfaces_mutex.Unlock(); +} + +void OsdVector::removeSurface(const SurfaceVector *surf) +{ + surfaces_mutex.Lock(); + //First determine it is already in our system + list::iterator itty=scommands.begin(); + while (itty!=scommands.end()) { + if ((*itty).surf==surf) { + dereferenceSVGCommand((*itty).commands); + (*itty).commands.clear(); + scommands.erase(itty); + break; + } + itty++; + } + surfaces_mutex.Unlock(); + +} + +void OsdVector::dereferenceSVGCommand(list& commands ) +{ + + list::iterator sitty = commands.begin(); + while (sitty != commands.end()) { + removeStyleRef((*sitty).getRef()); + ImageIndex ii = (*sitty).getImageIndex(); + if (ii) removeImageRef(ii); + sitty++; + } +} + +void OsdVector::referenceSVGCommand(list& commands ) +{ + list::iterator sitty=commands.begin(); + while (sitty!=commands.end()) + { + incStyleRef((*sitty).getRef()); + ImageIndex ii=(*sitty).getImageIndex(); + if (ii) incImageRef(ii); + sitty++; + } +} + +void OsdVector::incImageRef(ImageIndex index) +{ + if (images_ref.find(index)==images_ref.end()) { + images_ref[index]=1; + } else { + images_ref[index]++; + } +} + +void OsdVector::removeImageRef(const ImageIndex ref) +{ + images_ref[ref]--; +} + +void OsdVector::cleanupOrphanedRefs() +{ // Do some garbage collection + map::iterator iitty=images_ref.begin(); + while (iitty!=images_ref.end()) { + int count=(*iitty).second; + if (count==0) { + ImageIndex ref=(*iitty).first; + images_ref.erase(iitty++); + destroyImageRef(ref); + } else ++iitty; + } + map::iterator sitty=styles_ref.begin(); + while (sitty!=styles_ref.end()) { + int count=(*sitty).second; + if (count==0) { + unsigned int ref=(*sitty).first; + styles_ref.erase(sitty++); + destroyStyleRef(ref); + } else ++sitty; + + } +} + + +unsigned int OsdVector::getImageRef(ImageIndex index) +{ + if (images_ref.find(index)==images_ref.end()) { + return -1; + } else { + return images_ref[index]; + } +} + +void OsdVector::incStyleRef(unsigned int index) +{ + if (styles_ref.find(index)==styles_ref.end()) { + styles_ref[index]=1; + } else { + styles_ref[index]++; + } +} + +void OsdVector::removeStyleRef(unsigned int index) +{ + styles_ref[index]--; +} + +unsigned int OsdVector::getStyleRef(const DrawStyle &c) +{ + unsigned int style_handle=0; + if (styles.find(pair((Colour*)&c,c.rgba()))==styles.end()) + { + style_handle=styles[pair((Colour*)&c,c.rgba())]=createStyleRef(c); + } else { + style_handle=styles[pair((Colour*)&c,c.rgba())]; + //Now check if the handle is valid + if (styles_ref.find(style_handle)==styles_ref.end()) { + //invalid handle recreate + style_handle=styles[pair((Colour*)&c,c.rgba())]=createStyleRef(c); + } + } + incStyleRef(style_handle); + return style_handle; +} + +unsigned int OsdVector::getColorRef(const Colour &c) +{ + unsigned int style_handle=0; + if (styles.find(pair((Colour*)&c,c.rgba()))==styles.end()) + { + style_handle=styles[pair((Colour*)&c,c.rgba())]=createColorRef(c); + } else { + style_handle=styles[pair((Colour*)&c,c.rgba())]; + if (styles_ref.find(style_handle)==styles_ref.end()) { + //invalid handle recreate + style_handle=styles[pair((Colour*)&c,c.rgba())]=createColorRef(c); + } + } + incStyleRef(style_handle); + return style_handle; +} + +unsigned int OsdVector::getStyleRef(unsigned int index) +{ + if (styles_ref.find(index)==styles_ref.end()) { + return -1; + } else { + return styles_ref[index]; + } +} + +ImageIndex OsdVector::getJpegRef(const char* fileName, int *width,int *height) +{ + ImageIndex image_handle=0; + if (jpegs.find(fileName)==jpegs.end()) + { + image_handle=jpegs[fileName]=createJpeg(fileName,width,height); + } else { + image_handle=jpegs[fileName]; + *width=0; + *height=0; + if (images_ref.find(image_handle)==images_ref.end()) { + //invalid handle recreate + image_handle=jpegs[fileName]=createJpeg(fileName,width,height); + } + } + incImageRef(image_handle); + return image_handle; +} + +ImageIndex OsdVector::getMonoBitmapRef(void *base,int width,int height) +{ + ImageIndex image_handle; + if (monobitmaps.find(base)==monobitmaps.end()) + { + image_handle=monobitmaps[base]=createMonoBitmap(base,width,height); + } else { + image_handle=monobitmaps[base]; + if (images_ref.find(image_handle)==images_ref.end()) { + //invalid handle recreate + image_handle=monobitmaps[base]=createMonoBitmap(base,width,height); + } + } + incImageRef(image_handle); + return image_handle; +} + +ImageIndex OsdVector::getImageRGBA(int width,int height) +{ + ImageIndex image_handle; + image_handle=createImageRGBA(width,height); + incImageRef(image_handle); + return image_handle; +} diff --git a/osdvector.h b/osdvector.h new file mode 100644 index 0000000..13b49c4 --- /dev/null +++ b/osdvector.h @@ -0,0 +1,201 @@ +/* + Copyright 2004-2005 Chris Tallon, 2006,2011-2012 Marten Richter + + This file is part of VOMP. + + VOMP is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + VOMP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with VOMP; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#ifndef OSDVECTOR_H +#define OSDVECTOR_H +#include "osd.h" +#include "mutex.h" +#include "colour.h" +#include +#include +#include + +#include "teletextdecodervbiebu.h" + +enum SVGCommandInstr { + DrawPath, + DrawGlyph, + DrawImage, + DrawTTchar +}; +enum PathIndex { + HorzLine, + VertLine, + Rectangle, + Point +}; + +typedef unsigned int ImageIndex; + +class SVGCommand +{ +public: + SVGCommand(float ix, float iy,float iw,float ih,PathIndex path,unsigned int ref) + { + instr=DrawPath; + x=ix; + y=iy; + w=iw; + h=ih; + target.path_index=path; + reference=ref; + }; + SVGCommand(float ix, float iy,float iw,float ih,ImageIndex image_in,unsigned int ref) + { + instr=DrawImage; + x=ix; + y=iy; + w=iw; + h=ih; + target.image=image_in; + reference=ref; + }; + SVGCommand(float ix, float iy,float iw,float ih,unsigned int ttchar_in) + { + instr=DrawTTchar; + x=ix; + y=iy; + w=iw; + h=ih; + reference=0; + target.ttchar=ttchar_in; + }; + SVGCommand(float ix, float iy,wchar_t char_in,unsigned int ref) + { + instr=DrawGlyph; + x=ix; + y=iy; + w=0; + h=0; + reference=ref; + target.textchar=char_in; + }; + + bool Test(float tx,float ty,float tw, float th) + { + return (x>=tx) && (y>=ty) && ((x+w)<=(tx+tw)) && ((y+h)<=(ty+th)); + } + unsigned int getRef(){return reference;}; + ImageIndex getImageIndex() { + if (instr!=DrawImage) return 0; + else return target.image; + }; + SVGCommandInstr instr; + float x,y,w,h; + unsigned int reference; + union { + PathIndex path_index; //path_index + wchar_t textchar; + ImageIndex image; + unsigned int ttchar; + } target; +}; + +class SurfaceVector; + +struct SurfaceCommands{ + const SurfaceVector* surf; + list commands; + float x,y,w,h; +}; + + +class OsdVector : public Osd +{ + public: + OsdVector(); + virtual ~OsdVector(); + + + int getFD(); + + void screenShot(const char* fileName); + + Surface * createNewSurface(); + void BeginPainting(); + void EndPainting(); + + void Blank(); + + void updateOrAddSurface(const SurfaceVector *surf,float x,float y,float height,float width, + list& commands); + void removeSurface(const SurfaceVector *surf); + + virtual float getFontHeight()=0; + virtual float getCharWidth(wchar_t c)=0; + + virtual ImageIndex getJpegRef(const char* fileName, int *width,int *height); + virtual ImageIndex getMonoBitmapRef(void *base,int width,int height); + virtual ImageIndex getImageRGBA(int width,int height); + virtual void imageUploadLine(ImageIndex index,unsigned int j,unsigned int width,void *data)=0; + void removeImageRef(const ImageIndex ref); + unsigned int getColorRef(const Colour &c); //internally this is the same as getStyleRef + unsigned int getStyleRef(const DrawStyle &c); + virtual void removeStyleRef(unsigned int ref); + + + int charSet() {return 2;}; //UTF-8 + + + +protected: + + void incImageRef(ImageIndex index); + unsigned int getImageRef(ImageIndex index); + virtual void destroyImageRef(ImageIndex index)=0; + virtual ImageIndex createJpeg(const char* fileName, int *width,int *height)=0; + virtual ImageIndex createMonoBitmap(void *base,int width,int height)=0; + virtual ImageIndex createImageRGBA(int width,int height)=0; + + map images_ref; + map monobitmaps; + map jpegs; + + void incStyleRef(unsigned int index); + unsigned int getStyleRef(ImageIndex index); + virtual void destroyStyleRef(unsigned int index)=0; + map,unsigned int> styles; + map styles_ref; + virtual unsigned int createStyleRef(const DrawStyle &c)=0; + virtual unsigned int createColorRef(const Colour &c)=0; + + void dereferenceSVGCommand(list& commands ); + void referenceSVGCommand(list& commands ); + void cleanupOrphanedRefs(); + + + + virtual void drawSetTrans(SurfaceCommands & sc)=0; + virtual void executeDrawCommand(SVGCommand & command)=0; + + + + + list scommands; + + Mutex surfaces_mutex; + + void drawSurfaces(); +}; + + + + +#endif diff --git a/other/licence.txt b/other/licence.txt index f780226..7c3b49e 100644 --- a/other/licence.txt +++ b/other/licence.txt @@ -3,6 +3,10 @@ vdr.jpg is lifted from VDR's home page which states: Any information posted on these pages is freely available to anybody. All source code published here is protected by the GNU general public licence." +Note: +VDR Logo (c) by Jan Grell +Licensed under Creative Commons Licence. + ------------------------------------------------------------------ wallpaper.jpg is actually blue-bend.jpg from the KDE wallpapers. diff --git a/other/vdrhires.jpg b/other/vdrhires.jpg new file mode 100644 index 0000000000000000000000000000000000000000..03145c31417795ccb80cd3094e33e9361d5997c1 GIT binary patch literal 40462 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
  • (JD2b+M~V^E{|#!GE3 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 J5c%KC{{vhCWkCP{ literal 0 HcmV?d00001 diff --git a/other/wallpaper720p.jpg b/other/wallpaper720p.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4f6eb56a1b38e77c7c180bb00bbaf397a72f9976 GIT binary patch literal 128495 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

    s*EuGMk5TD^0NB>3;P0odJr?^VTaBVx6s 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[(unsigned char) c]; + return (float)font->width[(unsigned char) c]; } int Surface::getFontHeight() @@ -176,6 +176,12 @@ int Surface::getFontHeight() return font->spacing; } + wchar_t Surface::getWChar(const char* str, unsigned int *length) + { + *length=1; + return *str; + } + //Moved from Teletext view in order to allow device depend optimizations Colour Surface::enumTeletextColorToCoulour(enumTeletextColor ttcol) @@ -313,7 +319,7 @@ void Surface::drawMonoBitmap(UCHAR* base, int dx, int dy, unsigned int height, endFastDraw(); } -void Surface::drawPoint(int x, int y, Colour& c, bool fastdraw) +void Surface::drawPoint(int x, int y, DrawStyle& c, bool fastdraw) { drawPixel(x,y,c,fastdraw); } diff --git a/surface.h b/surface.h index 294f6a6..5777d9c 100644 --- a/surface.h +++ b/surface.h @@ -56,7 +56,8 @@ class Surface static Surface* getScreen(); virtual int getFontHeight(); - virtual int getCharWidth(char c); + virtual float getCharWidth(wchar_t c); + virtual wchar_t getWChar(const char* str, unsigned int *length); virtual int drawText(const char* text, int x, int y, const DrawStyle& c); virtual int drawText(const char* text, int x, int y, int width, const DrawStyle& c); @@ -72,7 +73,7 @@ class Surface virtual void drawHorzLine(int x1, int x2, int y, const DrawStyle& c)=0; virtual void drawVertLine(int x, int y1, int y2, const DrawStyle& c)=0; virtual void drawBitmap(int x, int y, const Bitmap& bm)=0; - virtual void drawPoint(int x, int y, Colour& c, bool fastdraw=false); // This draws a point, must not be a pixel + virtual void drawPoint(int x, int y, DrawStyle& c, bool fastdraw=false); // This draws a point, must not be a pixel virtual void drawMonoBitmap(UCHAR* base, int dx, int dy, unsigned int height,unsigned int width, Colour& nextColour); virtual int updateToScreen(int sx, int sy, int w, int h, int dx, int dy)=0; virtual void readPixel(int x, int y, unsigned char* r, unsigned char* g, unsigned char* b)=0; diff --git a/surfacedirectfb.h b/surfacedirectfb.h index 9fc9b79..e1870ea 100644 --- a/surfacedirectfb.h +++ b/surfacedirectfb.h @@ -44,7 +44,7 @@ class SurfaceDirectFB : public Surface { public: SurfaceDirectFB(int id = 0); - ~SurfaceDirectFB(); + virtual ~SurfaceDirectFB(); int create(UINT width, UINT height); void display(); diff --git a/surfacemvp.h b/surfacemvp.h index 1bcb37d..02db48b 100644 --- a/surfacemvp.h +++ b/surfacemvp.h @@ -154,7 +154,7 @@ class SurfaceMVP : public Surface { public: SurfaceMVP(int id = 0); - ~SurfaceMVP(); + virtual ~SurfaceMVP(); int create(UINT width, UINT height); void display(); diff --git a/surfacevector.cc b/surfacevector.cc new file mode 100644 index 0000000..6637aa4 --- /dev/null +++ b/surfacevector.cc @@ -0,0 +1,278 @@ +/* + Copyright 2012 Marten Richter + + This file is part of VOMP. + + VOMP is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + VOMP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with VOMP; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#include "surfacevector.h" +#include "bitmap.h" +#include +#include + +SurfaceVector::SurfaceVector(OsdVector* vosd) +{ + + osd=vosd; +} + +SurfaceVector::~SurfaceVector() +{ + osd->removeSurface(this); + list::iterator itty=commands.begin(); + while (itty!=commands.end()) + { + osd->removeStyleRef((*itty).getRef()); // We remove the Style reference, so that osd can free stuff + ImageIndex ii=(*itty).getImageIndex(); + if (ii) osd->removeImageRef(ii); + itty++; + } +} + + +int SurfaceVector::getFontHeight() +{ + return osd->getFontHeight(); +} + +float SurfaceVector::getCharWidth(wchar_t c) +{ + return osd->getCharWidth(c); +} + +wchar_t SurfaceVector::getWChar(const char* str, unsigned int *length) +{ + int mlength=0; + int max_length=4; + wchar_t tempo[1]; + size_t num_bytes=1; + if (str[0]=='\0') { + *length=1; + return '\0'; + } else if (str[1]=='\0'){ + max_length=2; + } else if (str[2]=='\0'){ + max_length=3; + } + mbstate_t state; + memset((void*)&state,0,sizeof(state)); + num_bytes=mbrtowc(tempo, str, max_length, &state); + if (num_bytes!=((size_t) -1) && num_bytes!=((size_t) -2)) + { + *length=num_bytes; + return *tempo; + } + *length=1; + return '?'; +} + + +int SurfaceVector::drawText(const char* text, int x, int y, const DrawStyle& c){ + return drawText(text, x, y, 0, c); +} + +int SurfaceVector::drawText(const char* text, int x, int y, int width, const DrawStyle& c) +{ + float shift=0.; + const char *run=text; + mbstate_t state; + wchar_t tempo[1]; + size_t num_bytes=1; + size_t length=strlen(text); + memset((void*)&state,0,sizeof(state)); + command_mutex.Lock(); + num_bytes=mbrtowc(tempo, run, length, &state); + while (num_bytes!=((size_t) -1) && num_bytes!=((size_t) -2) && length>0) + { + unsigned int ref=osd->getStyleRef(c); + commands.push_back(SVGCommand(x+shift,y,*tempo,ref)); + shift+=osd->getCharWidth(*tempo); + length -= num_bytes; + run += num_bytes; + if (shift>width && width >0) { + command_mutex.Unlock(); + return 1; + } + num_bytes=mbrtowc(tempo, run, length, &state); + } + command_mutex.Unlock(); + return 1; + +} +int SurfaceVector::drawTextRJ(const char* text, int x, int y, const DrawStyle& c) +{ + float shift=0.; + const char *run=text; + mbstate_t state; + wchar_t tempo[1]; + size_t num_bytes=1; + size_t length=strlen(text); + memset((void*)&state,0,sizeof(state)); + + num_bytes=mbrtowc(tempo, run, length, &state); + while (num_bytes!=((size_t) -1) && num_bytes!=((size_t) -2) && length>0) + { + shift+=osd->getCharWidth(*tempo); + length -= num_bytes; + run += num_bytes; + num_bytes=mbrtowc(tempo, run, length, &state); + } + return drawText(text, x-shift, y, c); +} + +int SurfaceVector::drawTextCentre(const char* text, int x, int y, const DrawStyle& c) +{ + float shift=0; + const char *run=text; + mbstate_t state; + wchar_t tempo[1]; + size_t num_bytes=1; + size_t length=strlen(text); + memset((void*)&state,0,sizeof(state)); + + num_bytes=mbrtowc(tempo, run, length, &state); + while (num_bytes!=((size_t) -1) && num_bytes!=((size_t) -2) && length>0) + { + shift+=osd->getCharWidth(*tempo); + length -= num_bytes; + run += num_bytes; + num_bytes=mbrtowc(tempo, run, length, &state); + } + return drawText(text, x-shift/2., y, c); +} + +void SurfaceVector::drawJpeg(const char *fileName,int x, int y,int *width, int *height) +{ + command_mutex.Lock(); + ImageIndex image=osd->getJpegRef(fileName,width,height); + commands.push_back(SVGCommand(x,y,*height,*width,image,0)); + command_mutex.Unlock(); +} + +int SurfaceVector::create(UINT width, UINT height) +{ + sheight=height; + swidth=width; + return 1; +} +void SurfaceVector::display() +{ + //nothing this is really mvp specific +} + +int SurfaceVector::fillblt(int x, int y, int width, int height, const DrawStyle& c) +{ + command_mutex.Lock(); + removeCommands(x,y,width,height); // remove commands below the box + unsigned int ref=osd->getStyleRef(c); + commands.push_back(SVGCommand(x,y,width,height,Rectangle,ref)); + command_mutex.Unlock(); + return 1; + +} +void SurfaceVector::drawHorzLine(int x1, int x2, int y, const DrawStyle& c) +{ + command_mutex.Lock(); + unsigned int ref=osd->getStyleRef(c); + commands.push_back(SVGCommand(x1,y,x2-x1,1,HorzLine,ref)); + command_mutex.Unlock(); +} + +void SurfaceVector::drawVertLine(int x, int y1, int y2, const DrawStyle& c){ + command_mutex.Lock(); + unsigned int ref=osd->getStyleRef(c); + commands.push_back(SVGCommand(x,y1,1,y2-y1,VertLine,ref)); + command_mutex.Unlock(); +} + +void SurfaceVector::drawBitmap(int x, int y, const Bitmap& bm) +{ + //this is complicated + command_mutex.Lock(); + ImageIndex image=osd->getImageRGBA(bm.getWidth(),bm.getHeight()); + unsigned int * data=(unsigned int*)malloc(sizeof(unsigned int)*bm.getWidth()); + for (UINT j = 0; j < bm.getHeight(); ++j){ + for (UINT i = 0; i < bm.getWidth(); ++i) + { + data[i]=bm.getColour(i,j); + } + osd->imageUploadLine(image,j,bm.getWidth(),data); + } + free(data); + commands.push_back(SVGCommand(x,y,bm.getHeight(),bm.getWidth(),image,0)); + command_mutex.Unlock(); +} + +void SurfaceVector::drawPoint(int x, int y, DrawStyle& c, bool fastdraw){ + if (!fastdraw) command_mutex.Lock(); + unsigned int ref=osd->getStyleRef(c); + commands.push_back(SVGCommand(x,y,1,1,Point,ref)); + if (!fastdraw) command_mutex.Unlock(); +} +void SurfaceVector::drawMonoBitmap(UCHAR* base, int dx, int dy, unsigned int height,unsigned int width, Colour& nextColour) +{ + command_mutex.Lock(); + ImageIndex image=osd->getMonoBitmapRef(base,width,height); + unsigned int ref=osd->getColorRef(nextColour); + commands.push_back(SVGCommand(dx,dy,height,width,image,ref)); + command_mutex.Unlock(); +} + + +int SurfaceVector::removeCommands(float x,float y,float width,float height) +{ + // we iterate through all old commands in order to remove commands hidden by this rectangle + list::iterator itty=commands.begin(); + while (itty!=commands.end()) + { + if ((*itty).Test(x,y,width,height) ) { + osd->removeStyleRef((*itty).getRef()); // We remove the Style reference, so that osd can free stuff + ImageIndex ii=(*itty).getImageIndex(); + if (ii) osd->removeImageRef(ii); + itty=commands.erase(itty); + } else { + itty++; + } + } + return 1; + +} + +int SurfaceVector::updateToScreen(int sx, int sy, int w, int h, int dx, int dy) +{ + // ok this method really works in a pixel oriented way + command_mutex.Lock(); + osd->updateOrAddSurface(this,dx-sx,dy-sy,swidth,sheight,commands); + command_mutex.Unlock(); + return 1; +} + + +/* This is for systems which need a locking of the drawing surface to speed up drawing */ +void SurfaceVector::startFastDraw() { + command_mutex.Lock(); +} +void SurfaceVector::endFastDraw() { + command_mutex.Unlock(); +} + + +void SurfaceVector::drawTTChar(int ox, int oy,int x, int y, cTeletextChar c) +{ + command_mutex.Lock(); + commands.push_back(SVGCommand(ox,oy,x,y,c.getInternal())); + command_mutex.Unlock(); +} diff --git a/surfacevector.h b/surfacevector.h new file mode 100644 index 0000000..9a78174 --- /dev/null +++ b/surfacevector.h @@ -0,0 +1,93 @@ +/* + Copyright 2012 Marten Richter + + This file is part of VOMP. + + VOMP is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + VOMP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with VOMP; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#ifndef SURFACEVECTOR_H +#define SURFACEVECTOR_H + +#include "surface.h" +#include "osdvector.h" + +#include + + +class SurfaceVector : public Surface +{ + public: + SurfaceVector(OsdVector* vosd); + virtual ~SurfaceVector(); + + int getFontHeight(); + float getCharWidth(wchar_t c); + wchar_t getWChar(const char* str, unsigned int *length); + + int drawText(const char* text, int x, int y, const DrawStyle& c); + int drawText(const char* text, int x, int y, int width, const DrawStyle& c); + int drawTextRJ(const char* text, int x, int y, const DrawStyle& c); + int drawTextCentre(const char* text, int x, int y, const DrawStyle& c); + + void drawJpeg(const char *fileName,int x, int y,int *width, int *height); + + int create(UINT width, UINT height); + void display(); + + int fillblt(int x, int y, int width, int height, const DrawStyle& c); + void drawHorzLine(int x1, int x2, int y, const DrawStyle& c); + void drawVertLine(int x, int y1, int y2, const DrawStyle& c); + void drawBitmap(int x, int y, const Bitmap& bm); + void drawPoint(int x, int y, DrawStyle& c, bool fastdraw=false); // This draws a point, must not be a pixel + void drawMonoBitmap(UCHAR* base, int dx, int dy, unsigned int height,unsigned int width, Colour& nextColour); + int updateToScreen(int sx, int sy, int w, int h, int dx, int dy); + + + /* This is for system which need a locking of the drawing surface to speed up drawing */ + void startFastDraw(); + void endFastDraw() ; + + + void drawTTChar(int ox, int oy,int x, int y, cTeletextChar c); + + void readPixel(int x, int y, unsigned char* r, unsigned char* g, unsigned char* b){}; + void screenShot(const char* fileName){}; + + protected: + + + int removeCommands(float x,float y,float width,float height); + + list commands; + int swidth, sheight; + Mutex command_mutex; + OsdVector* osd; + + void drawPixel(int x, int y, unsigned int c, bool fastdraw){}; // these are not supported! + void drawPixel(int x, int y, Colour& c, bool fastdraw){}; + + +}; + + + + + + + + + +#endif diff --git a/teletextdecodervbiebu.h b/teletextdecodervbiebu.h index 123486b..124ba83 100644 --- a/teletextdecodervbiebu.h +++ b/teletextdecodervbiebu.h @@ -234,6 +234,9 @@ public: { c=(Blink)?(c|BLINK):(c&~BLINK); } inline cTeletextChar ToBlink(bool Blink) { return cTeletextChar((Blink)?(c|BLINK):(c&~BLINK)); } + + inline void setInternal(unsigned int cc) {c=cc;}; + inline unsigned int getInternal() {return c;}; bool operator==(cTeletextChar &chr) { return c==chr.c; } bool operator!=(cTeletextChar &chr) { return c!=chr.c; } diff --git a/vchannellist.cc b/vchannellist.cc index d49955c..65a4859 100644 --- a/vchannellist.cc +++ b/vchannellist.cc @@ -149,7 +149,7 @@ void VChannelList::doShowingBar() char showing[200]; sprintf(showing, tr("%i to %i of %i"), topOption, sl.getBottomOption(), sl.getNumOptions()); - rectangle(220, 385, 220+160, 385+25, DrawStyle::VIEWBACKGROUND); + rectangle(220, 385,160, 25, DrawStyle::VIEWBACKGROUND); drawText(showing, 220, 385, DrawStyle::LIGHTTEXT); } diff --git a/vepg.cc b/vepg.cc index a8c79b2..c60f1cf 100644 --- a/vepg.cc +++ b/vepg.cc @@ -709,22 +709,25 @@ void VEpg::paintCell(Event* event, int yOffset, const DrawStyle& bg, const DrawS rectangle(x, y, w, h, bg); char* tt = new char[strlen(event->title) + 1]; strcpy (tt, event->title); - int textWidth = 0; - for (UINT textPos = 0; textPos < strlen(tt); textPos++) + float textWidth = 0; + unsigned int cur_length=1; + unsigned int text_max=strlen(tt); + UINT textPos; + for (textPos = 0; textPos w) // text will not fit in cell { - textWidth = textPos; break; } textWidth += thisCharWidth; } - char* tT = new char[textWidth]; - if(textWidth > 1) + char* tT = new char[textPos+1]; + if(textPos > 0) { - strncpy(tT, tt, textWidth - 1); - tT[textWidth - 1] = '\0'; + strncpy(tT, tt, textPos ); + tT[textPos ] = '\0'; surface->drawText(tT, x+2, y, fg); } delete tT; diff --git a/videoomx.cc b/videoomx.cc index 13704f6..3a219e9 100644 --- a/videoomx.cc +++ b/videoomx.cc @@ -22,9 +22,10 @@ #include "audioomx.h" #include "mtdraspberry.h" #include "demuxer.h" -#include "osdopengl.h" #include "vdr.h" #include "woptionpane.h" +#include "osdopenvg.h" + // temp #include "log.h" diff --git a/vscreensaver.cc b/vscreensaver.cc index 91e8543..fd5d4ea 100644 --- a/vscreensaver.cc +++ b/vscreensaver.cc @@ -83,8 +83,8 @@ void VScreensaver::threadMethod() fx = x[0] = 50; fy = y[0] = 50; - Colour black=(Colour)DrawStyle::BLACK; - Colour light=(Colour)DrawStyle::SELECTHIGHLIGHT; + DrawStyle &black=DrawStyle::BLACK; + DrawStyle &light=DrawStyle::SELECTHIGHLIGHT; while(1) { diff --git a/wsymbol.h b/wsymbol.h index 4cb59c9..026627d 100644 --- a/wsymbol.h +++ b/wsymbol.h @@ -29,6 +29,7 @@ class WSymbol : public Boxx public: WSymbol(); + //TODO add vector based Symbols void draw(); UCHAR nextSymbol; Colour nextColour; diff --git a/wtabbar.h b/wtabbar.h index 6b49f5a..db70ccd 100644 --- a/wtabbar.h +++ b/wtabbar.h @@ -40,7 +40,7 @@ class WTabBar : public Boxx { public: WTabBar(); - ~WTabBar(); + virtual ~WTabBar(); void addTab(const char* name, Boxx* boxx); int handleCommand(int command); bool mouseMove(int x, int y) ; -- 2.39.5