From 3d3a88e76c14a2c89169b83f241cff4d34158776 Mon Sep 17 00:00:00 2001 From: Johns Date: Wed, 12 Feb 2014 14:37:35 +0100 Subject: Fix OSD bugs. --- ChangeLog | 1 + softhddevice.cpp | 54 ++++++++++++++++++++++++++++++------------------------ 2 files changed, 31 insertions(+), 24 deletions(-) diff --git a/ChangeLog b/ChangeLog index c8dbed2..e599326 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,7 @@ User johns Date: + Fix OSD bugs. Add some VA-API VPP info outputs. Remove build files for old unstable VDR. diff --git a/softhddevice.cpp b/softhddevice.cpp index 126cd2d..f7b7a46 100644 --- a/softhddevice.cpp +++ b/softhddevice.cpp @@ -266,10 +266,12 @@ class cSoftOsd:public cOsd { public: static volatile char Dirty; ///< flag force redraw everything - int OsdLevel; ///< current osd level + int OsdLevel; ///< current osd level FIXME: remove cSoftOsd(int, int, uint); ///< osd constructor virtual ~ cSoftOsd(void); ///< osd destructor + /// set the sub-areas to the given areas + virtual eOsdError SetAreas(const tArea *, int); virtual void Flush(void); ///< commits all data to the hardware virtual void SetActive(bool); ///< sets OSD to be the active one }; @@ -295,11 +297,6 @@ void cSoftOsd::SetActive(bool on) } cOsd::SetActive(on); - // ignore sub-title if menu is open - if (OsdLevel >= OSD_LEVEL_SUBTITLES && IsOpen()) { - return; - } - if (on) { Dirty = 1; // only flush here if there are already bitmaps @@ -331,7 +328,6 @@ cSoftOsd::cSoftOsd(int left, int top, uint level) #endif OsdLevel = level; - SetActive(true); } /** @@ -362,6 +358,31 @@ cSoftOsd::~cSoftOsd(void) #endif } +/** ++* Set the sub-areas to the given areas +*/ +eOsdError cSoftOsd::SetAreas(const tArea * areas, int n) +{ +#ifdef OSD_DEBUG + dsyslog("[softhddev]%s: %d areas \n", __FUNCTION__, n); +#endif + + // clear old OSD, when new areas are set + if (!IsTrueColor()) { + cBitmap *bitmap; + int i; + + for (i = 0; (bitmap = GetBitmap(i)); i++) { + bitmap->Clean(); + } + } + if (Active()) { + VideoOsdClear(); + Dirty = 1; + } + return cOsd::SetAreas(areas, n); +} + /** ** Actually commits all data to the OSD hardware. */ @@ -377,10 +398,6 @@ void cSoftOsd::Flush(void) if (!Active()) { // this osd is not active return; } - // don't draw sub-title if menu is active - if (OsdLevel >= OSD_LEVEL_SUBTITLES && IsOpen()) { - return; - } #ifdef USE_YAEPG // support yaepghd, video window if (vidWin.bpp) { @@ -396,17 +413,6 @@ void cSoftOsd::Flush(void) } #endif - // - // VDR draws subtitle without clearing the old - // - if (OsdLevel >= OSD_LEVEL_SUBTITLES) { - VideoOsdClear(); - cSoftOsd::Dirty = 1; -#ifdef OSD_DEBUG - dsyslog("[softhddev]%s: subtitle clear\n", __FUNCTION__); -#endif - } - if (!IsTrueColor()) { cBitmap *bitmap; int i; @@ -483,7 +489,7 @@ void cSoftOsd::Flush(void) // FIXME: reuse argb free(argb); } - cSoftOsd::Dirty = 0; + Dirty = 0; return; } @@ -507,7 +513,7 @@ void cSoftOsd::Flush(void) delete pm; } - cSoftOsd::Dirty = 0; + Dirty = 0; } ////////////////////////////////////////////////////////////////////////////// -- cgit v1.2.3