From 39ad1fe179b66bedb7662ad0443633b0a085316a Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sun, 18 Jul 2004 10:20:31 +0200 Subject: [PATCH] Avoiding flashing effects in the OSD of full featured DVB cards by explicitly clearing the OSD windows before opening them --- CONTRIBUTORS | 2 ++ HISTORY | 2 ++ dvbosd.c | 10 +++++++++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 0b82353a..560c7b15 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -1032,6 +1032,8 @@ Marco Schl for pointing out that it is unnecessary to add section filters to the list of filters if they can't be opened for fixing handling error case '-1' when polling section filters + for suggesting to avoiding flashing effects in the OSD of full featured DVB cards + by explicitly clearing the OSD windows before opening them Jürgen Schmitz for reporting a bug in displaying the current channel when switching via the SVDRP diff --git a/HISTORY b/HISTORY index c60b6a8e..33d5e6e3 100644 --- a/HISTORY +++ b/HISTORY @@ -2954,3 +2954,5 @@ Video Disk Recorder Revision History - Fixed handling error case '-1' when polling CAM connections. - Making sure the OSD reports oeWrongAlignment errors before any oeAreasOverlap error (suggested by Reinhard Nissl). +- Avoiding flashing effects in the OSD of full featured DVB cards by explicitly + clearing the OSD windows before opening them (suggested by Marco Schlüßler). diff --git a/dvbosd.c b/dvbosd.c index 8056499f..39032fd7 100644 --- a/dvbosd.c +++ b/dvbosd.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: dvbosd.c 1.23 2004/06/12 13:10:03 kls Exp $ + * $Id: dvbosd.c 1.24 2004/07/18 10:20:05 kls Exp $ */ #include "dvbosd.h" @@ -39,6 +39,14 @@ cDvbOsd::cDvbOsd(int Left, int Top, int OsdDev) shown = false; if (osdDev < 0) esyslog("ERROR: illegal OSD device handle (%d)!", osdDev); + else { + // must clear all windows here to avoid flashing effects - doesn't work if done + // in Flush() only for the windows that are actually used... + for (int i = 0; i < MAXNUMWINDOWS; i++) { + Cmd(OSD_SetWindow, 0, i + 1); + Cmd(OSD_Clear); + } + } } cDvbOsd::~cDvbOsd()