mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Now checking available OSD memory at runtime
This commit is contained in:
parent
edc1440ed8
commit
20f6194d4f
@ -539,6 +539,7 @@ Oliver Endriss <o.endriss@gmx.de>
|
|||||||
for adding a sample setup for 'DisiCon-4 Single Cable Network' to 'diseqc.conf'
|
for adding a sample setup for 'DisiCon-4 Single Cable Network' to 'diseqc.conf'
|
||||||
for reporting a problem with the name of the remote control for which the keys are
|
for reporting a problem with the name of the remote control for which the keys are
|
||||||
being learned overwriting the date/time in the 'classic' skin
|
being learned overwriting the date/time in the 'classic' skin
|
||||||
|
for making cDvbOsd check available OSD memory at runtime
|
||||||
|
|
||||||
Reinhard Walter Buchner <rw.buchner@freenet.de>
|
Reinhard Walter Buchner <rw.buchner@freenet.de>
|
||||||
for adding some satellites to 'sources.conf'
|
for adding some satellites to 'sources.conf'
|
||||||
|
1
HISTORY
1
HISTORY
@ -3157,3 +3157,4 @@ Video Disk Recorder Revision History
|
|||||||
- Fixed a possible recursion in cControl::Shutdown() (thanks to Sascha Volkenandt).
|
- Fixed a possible recursion in cControl::Shutdown() (thanks to Sascha Volkenandt).
|
||||||
- Now setting the VPID before the APID in live mode to avoid unnecessary
|
- Now setting the VPID before the APID in live mode to avoid unnecessary
|
||||||
overhead in the firmware (thanks to Werner Fink).
|
overhead in the firmware (thanks to Werner Fink).
|
||||||
|
- Now checking available OSD memory at runtime (thanks to Oliver Endriss).
|
||||||
|
15
dvbosd.c
15
dvbosd.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: dvbosd.c 1.24 2004/07/18 10:20:05 kls Exp $
|
* $Id: dvbosd.c 1.25 2004/11/20 14:29:25 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "dvbosd.h"
|
#include "dvbosd.h"
|
||||||
@ -18,11 +18,12 @@
|
|||||||
// --- cDvbOsd ---------------------------------------------------------------
|
// --- cDvbOsd ---------------------------------------------------------------
|
||||||
|
|
||||||
#define MAXNUMWINDOWS 7 // OSD windows are counted 1...7
|
#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)
|
#define MAXOSDMEMORY 92000 // number of bytes available to the OSD (for unmodified DVB cards)
|
||||||
|
|
||||||
class cDvbOsd : public cOsd {
|
class cDvbOsd : public cOsd {
|
||||||
private:
|
private:
|
||||||
int osdDev;
|
int osdDev;
|
||||||
|
int osdMem;
|
||||||
bool shown;
|
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);
|
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:
|
public:
|
||||||
@ -40,6 +41,14 @@ cDvbOsd::cDvbOsd(int Left, int Top, int OsdDev)
|
|||||||
if (osdDev < 0)
|
if (osdDev < 0)
|
||||||
esyslog("ERROR: illegal OSD device handle (%d)!", osdDev);
|
esyslog("ERROR: illegal OSD device handle (%d)!", osdDev);
|
||||||
else {
|
else {
|
||||||
|
osdMem = MAXOSDMEMORY;
|
||||||
|
#ifdef OSD_CAP_MEMSIZE
|
||||||
|
// modified DVB cards may have more OSD memory:
|
||||||
|
osd_cap_t cap;
|
||||||
|
cap.cmd = OSD_CAP_MEMSIZE;
|
||||||
|
if (ioctl(osdDev, OSD_GET_CAPABILITY, &cap) == 0)
|
||||||
|
osdMem = cap.val;
|
||||||
|
#endif
|
||||||
// must clear all windows here to avoid flashing effects - doesn't work if done
|
// must clear all windows here to avoid flashing effects - doesn't work if done
|
||||||
// in Flush() only for the windows that are actually used...
|
// in Flush() only for the windows that are actually used...
|
||||||
for (int i = 0; i < MAXNUMWINDOWS; i++) {
|
for (int i = 0; i < MAXNUMWINDOWS; i++) {
|
||||||
@ -74,7 +83,7 @@ eOsdError cDvbOsd::CanHandleAreas(const tArea *Areas, int NumAreas)
|
|||||||
return oeWrongAlignment;
|
return oeWrongAlignment;
|
||||||
TotalMemory += Areas[i].Width() * Areas[i].Height() / (8 / Areas[i].bpp);
|
TotalMemory += Areas[i].Width() * Areas[i].Height() / (8 / Areas[i].bpp);
|
||||||
}
|
}
|
||||||
if (TotalMemory > MAXOSDMEMORY)
|
if (TotalMemory > osdMem)
|
||||||
return oeOutOfMemory;
|
return oeOutOfMemory;
|
||||||
}
|
}
|
||||||
return Result;
|
return Result;
|
||||||
|
Loading…
Reference in New Issue
Block a user