1
0
mirror of https://github.com/VDR4Arch/vdr.git synced 2023-10-10 13:36:52 +02:00

Reverted "Removed limitation to PAL resolution from SPU handling" because it cause nothing but trouble

This commit is contained in:
Klaus Schmidinger 2009-11-22 14:20:36 +01:00
parent 2e8f2b8557
commit 561d41c0d4
2 changed files with 22 additions and 14 deletions

View File

@ -6192,3 +6192,5 @@ Video Disk Recorder Revision History
- Added the audio id to the call of PlayAudio() in cDevice::PlayTsAudio() - Added the audio id to the call of PlayAudio() in cDevice::PlayTsAudio()
(thanks to Andreas Schaefers). (thanks to Andreas Schaefers).
- Fixed references to old *.vdr file names in MANUAL (reported by Arthur Konovalov). - Fixed references to old *.vdr file names in MANUAL (reported by Arthur Konovalov).
- Reverted "Removed limitation to PAL resolution from SPU handling" because it
cause nothing but trouble. Besides, the core VDR doesn't use this, anyway.

View File

@ -8,7 +8,7 @@
* *
* parts of this file are derived from the OMS program. * parts of this file are derived from the OMS program.
* *
* $Id: dvbspu.c 2.1 2009/05/09 16:25:59 kls Exp $ * $Id: dvbspu.c 2.2 2009/11/22 14:17:59 kls Exp $
*/ */
#include "dvbspu.h" #include "dvbspu.h"
@ -55,6 +55,9 @@ void cDvbSpuPalette::setPalette(const uint32_t * pal)
#define setMin(a, b) if (a > b) a = b #define setMin(a, b) if (a > b) a = b
#define setMax(a, b) if (a < b) a = b #define setMax(a, b) if (a < b) a = b
#define spuXres 720
#define spuYres 576
#define revRect(r1, r2) { r1.x1 = r2.x2; r1.y1 = r2.y2; r1.x2 = r2.x1; r1.y2 = r2.y1; } #define revRect(r1, r2) { r1.x1 = r2.x2; r1.y1 = r2.y2; r1.x2 = r2.x1; r1.y2 = r2.y1; }
cDvbSpuBitmap::cDvbSpuBitmap(sDvbSpuRect size, cDvbSpuBitmap::cDvbSpuBitmap(sDvbSpuRect size,
@ -63,8 +66,8 @@ cDvbSpuBitmap::cDvbSpuBitmap(sDvbSpuRect size,
{ {
size.x1 = max(size.x1, 0); size.x1 = max(size.x1, 0);
size.y1 = max(size.y1, 0); size.y1 = max(size.y1, 0);
size.x2 = min(size.x2, Setup.OSDWidth); size.x2 = min(size.x2, spuXres - 1);
size.y2 = min(size.y2, Setup.OSDHeight); size.y2 = min(size.y2, spuYres - 1);
bmpsize = size; bmpsize = size;
revRect(minsize[0], size); revRect(minsize[0], size);
@ -72,7 +75,7 @@ cDvbSpuBitmap::cDvbSpuBitmap(sDvbSpuRect size,
revRect(minsize[2], size); revRect(minsize[2], size);
revRect(minsize[3], size); revRect(minsize[3], size);
int MemSize = bmpsize.width() * bmpsize.height() * sizeof(uint8_t); int MemSize = spuXres * spuYres * sizeof(uint8_t);
bmp = new uint8_t[MemSize]; bmp = new uint8_t[MemSize];
if (bmp) if (bmp)
@ -93,10 +96,10 @@ cBitmap *cDvbSpuBitmap::getBitmap(const aDvbSpuPalDescr paldescr,
int h = size.height(); int h = size.height();
int w = size.width(); int w = size.width();
if (size.y1 + h >= bmpsize.height()) if (size.y1 + h >= spuYres)
h = bmpsize.height() - size.y1 - 1; h = spuYres - size.y1 - 1;
if (size.x1 + w >= bmpsize.width()) if (size.x1 + w >= spuXres)
w = bmpsize.width() - size.x1 - 1; w = spuXres - size.x1 - 1;
if (w & 0x03) if (w & 0x03)
w += 4 - (w & 0x03); w += 4 - (w & 0x03);
@ -111,11 +114,13 @@ cBitmap *cDvbSpuBitmap::getBitmap(const aDvbSpuPalDescr paldescr,
} }
// set the content // set the content
for (int yp = 0; yp < h; yp++) { if (bmp) {
for (int xp = 0; xp < w; xp++) { for (int yp = 0; yp < h; yp++) {
uint8_t idx = bmp[(size.y1 + yp) * bmpsize.width() + size.x1 + xp]; for (int xp = 0; xp < w; xp++) {
ret->SetIndex(xp, yp, idx); uint8_t idx = bmp[(size.y1 + yp) * spuXres + size.x1 + xp];
} ret->SetIndex(xp, yp, idx);
}
}
} }
return ret; return ret;
} }
@ -149,7 +154,8 @@ bool cDvbSpuBitmap::getMinSize(const aDvbSpuPalDescr paldescr,
void cDvbSpuBitmap::putPixel(int xp, int yp, int len, uint8_t colorid) void cDvbSpuBitmap::putPixel(int xp, int yp, int len, uint8_t colorid)
{ {
memset(bmp + bmpsize.width() * yp + xp, colorid, len); if (bmp)
memset(bmp + spuXres * yp + xp, colorid, len);
setMin(minsize[colorid].x1, xp); setMin(minsize[colorid].x1, xp);
setMin(minsize[colorid].y1, yp); setMin(minsize[colorid].y1, yp);
setMax(minsize[colorid].x2, xp + len - 1); setMax(minsize[colorid].x2, xp + len - 1);