diff -ur vdr-1.3.11_orig/dvbosd.c vdr-1.3.11/dvbosd.c --- vdr-1.3.11_orig/dvbosd.c Tue Jul 20 17:51:59 2004 +++ vdr-1.3.11/dvbosd.c Tue Jul 20 17:52:30 2004 @@ -39,6 +39,10 @@ shown = false; if (osdDev < 0) esyslog("ERROR: illegal OSD device handle (%d)!", osdDev); + for (int i = 1 ;i <= MAXNUMWINDOWS; i++) { + Cmd(OSD_SetWindow, 0, i); + Cmd(OSD_Clear); + } } cDvbOsd::~cDvbOsd() diff -ur vdr-1.3.11_orig/dvbspu.c vdr-1.3.11/dvbspu.c --- vdr-1.3.11_orig/dvbspu.c Tue Jul 20 17:51:59 2004 +++ vdr-1.3.11/dvbspu.c Tue Jul 20 17:54:39 2004 @@ -227,6 +227,7 @@ spu = NULL; osd = NULL; spubmp = NULL; + allowedShow = false; } cDvbSpuDecoder::~cDvbSpuDecoder() @@ -236,7 +237,7 @@ delete osd; } -void cDvbSpuDecoder::processSPU(uint32_t pts, uint8_t * buf) +void cDvbSpuDecoder::processSPU(uint32_t pts, uint8_t * buf, bool AllowedShow) { setTime(pts); @@ -252,6 +253,7 @@ prev_DCSQ_offset = 0; clean = true; + allowedShow = AllowedShow; } void cDvbSpuDecoder::setScaleMode(cSpuDecoder::eScaleMode ScaleMode) @@ -503,7 +505,7 @@ } else if (!clean) state = spSHOW; - if (state == spSHOW || state == spMENU) + if ((state == spSHOW && allowedShow) || state == spMENU) Draw(); if (state == spHIDE) diff -ur vdr-1.3.11_orig/dvbspu.h vdr-1.3.11/dvbspu.h --- vdr-1.3.11_orig/dvbspu.h Tue Jul 20 17:51:59 2004 +++ vdr-1.3.11/dvbspu.h Tue Jul 20 17:54:50 2004 @@ -120,6 +120,7 @@ uint16_t prev_DCSQ_offset; cDvbSpuBitmap *spubmp; + bool allowedShow; private: int cmdOffs(void) { return ((spu[2] << 8) | spu[3]); @@ -131,7 +132,6 @@ int ScaleYcoord(int value); int ScaleYres(int value); void DrawBmp(sDvbSpuRect & size, cBitmap * bmp); - public: cDvbSpuDecoder(); ~cDvbSpuDecoder(); @@ -147,7 +147,7 @@ void Hide(void); void Draw(void); bool IsVisible(void) { return osd != NULL; } - void processSPU(uint32_t pts, uint8_t * buf); + void processSPU(uint32_t pts, uint8_t * buf, bool AllowedShow); }; // --- cDvbSpuPalette ------------------------------------------- diff -ur vdr-1.3.11_orig/spu.h vdr-1.3.11/spu.h --- vdr-1.3.11_orig/spu.h Tue Jul 20 17:51:59 2004 +++ vdr-1.3.11/spu.h Tue Jul 20 17:54:58 2004 @@ -35,7 +35,7 @@ virtual void Hide(void) = 0; virtual void Draw(void) = 0; virtual bool IsVisible(void) = 0; - virtual void processSPU(uint32_t pts, uint8_t * buf) = 0; + virtual void processSPU(uint32_t pts, uint8_t * buf, bool AllowedShow) = 0; }; #endif // __SPU_VDR_H