diff options
author | Klaus Schmidinger <vdr@tvdr.de> | 2004-06-12 13:30:11 +0200 |
---|---|---|
committer | Klaus Schmidinger <vdr@tvdr.de> | 2004-06-12 13:30:11 +0200 |
commit | 8108d4587faf7c9e6d05c5ce2dd42e3a866b2dd0 (patch) | |
tree | e8541a80ded13b9dd263123d4adf1e941f902ce8 | |
parent | c3144c9ab81a02469f65bded3285d643a3111ebc (diff) | |
download | vdr-8108d4587faf7c9e6d05c5ce2dd42e3a866b2dd0.tar.gz vdr-8108d4587faf7c9e6d05c5ce2dd42e3a866b2dd0.tar.bz2 |
Some improvements in cOsd creation
-rw-r--r-- | CONTRIBUTORS | 3 | ||||
-rw-r--r-- | HISTORY | 1 | ||||
-rw-r--r-- | dvbosd.c | 16 | ||||
-rw-r--r-- | dvbosd.h | 16 | ||||
-rw-r--r-- | osd.c | 6 | ||||
-rw-r--r-- | osd.h | 6 |
6 files changed, 29 insertions, 19 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS index de4ede68..a104c177 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -1026,3 +1026,6 @@ Jürgen Schmitz <j.schmitz@web.de> Philip Lawatsch <philip@lawatsch.at> for debugging a buffer overflow in eit.c + +Jouni Karvo <kex@netlab.hut.fi> + for suggesting to make the cOsd constructor 'protected' @@ -2905,3 +2905,4 @@ Video Disk Recorder Revision History of UTF-8 at program start, and if it is, exists and tells the user to turn off UTF-8 before starting VDR. - Some changes to the SPU decoder interface (thanks to Sven Goethel). +- Some improvements in cOsd creation (thanks to some suggestions by Jouni Karvo). @@ -4,13 +4,15 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: dvbosd.c 1.22 2004/05/01 15:10:44 kls Exp $ + * $Id: dvbosd.c 1.23 2004/06/12 13:10:03 kls Exp $ */ #include "dvbosd.h" +#include <linux/dvb/osd.h> #include <signal.h> #include <sys/ioctl.h> #include <sys/unistd.h> +#include "dvbdevice.h" #include "tools.h" // --- cDvbOsd --------------------------------------------------------------- @@ -18,6 +20,18 @@ #define MAXNUMWINDOWS 7 // OSD windows are counted 1...7 #define MAXOSDMEMORY 92000 // number of bytes available to the OSD (depends on firmware version, but there is no way of determining the actual value) +class cDvbOsd : public cOsd { +private: + int osdDev; + bool shown; + void Cmd(OSD_Command cmd, int color = 0, int x0 = 0, int y0 = 0, int x1 = 0, int y1 = 0, const void *data = NULL); +public: + cDvbOsd(int Left, int Top, int OsdDev); + virtual ~cDvbOsd(); + virtual eOsdError CanHandleAreas(const tArea *Areas, int NumAreas); + virtual void Flush(void); + }; + cDvbOsd::cDvbOsd(int Left, int Top, int OsdDev) :cOsd(Left, Top) { @@ -4,28 +4,14 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: dvbosd.h 1.17 2004/04/30 13:44:16 kls Exp $ + * $Id: dvbosd.h 1.18 2004/06/12 13:09:52 kls Exp $ */ #ifndef __DVBOSD_H #define __DVBOSD_H -#include <linux/dvb/osd.h> -#include "dvbdevice.h" #include "osd.h" -class cDvbOsd : public cOsd { -private: - int osdDev; - bool shown; - void Cmd(OSD_Command cmd, int color = 0, int x0 = 0, int y0 = 0, int x1 = 0, int y1 = 0, const void *data = NULL); -public: - cDvbOsd(int Left, int Top, int OsdDev); - virtual ~cDvbOsd(); - virtual eOsdError CanHandleAreas(const tArea *Areas, int NumAreas); - virtual void Flush(void); - }; - class cDvbOsdProvider : public cOsdProvider { private: int osdDev; @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: osd.c 1.52 2004/06/05 16:52:51 kls Exp $ + * $Id: osd.c 1.53 2004/06/12 13:24:42 kls Exp $ */ #include "osd.h" @@ -713,6 +713,10 @@ cOsdProvider::~cOsdProvider() cOsd *cOsdProvider::NewOsd(int Left, int Top) { + if (cOsd::IsOpen()) { + esyslog("ERROR: attempt to open OSD while it is already open!"); + return NULL; + } if (osdProvider) return osdProvider->CreateOsd(Left, Top); esyslog("ERROR: no OSD provider available - using dummy OSD!"); @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: osd.h 1.45 2004/06/05 12:38:44 kls Exp $ + * $Id: osd.h 1.46 2004/06/12 13:14:48 kls Exp $ */ #ifndef __OSD_H @@ -208,13 +208,14 @@ struct tArea { #define MAXOSDAREAS 16 class cOsd { + friend class cOsdProvider; private: static bool isOpen; cBitmap *savedRegion; cBitmap *bitmaps[MAXOSDAREAS]; int numBitmaps; int left, top, width, height; -public: +protected: cOsd(int Left, int Top); ///< Initializes the OSD with the given coordinates. ///< By default it is assumed that the full area will be able to display @@ -231,6 +232,7 @@ public: ///< and should require only the minimum necessary color depth. This is ///< because a derived cOsd class may or may not be able to handle more ///< than one area. +public: virtual ~cOsd(); ///< Shuts down the OSD. static bool IsOpen(void) { return isOpen; } |