diff options
| author | Klaus Schmidinger <vdr@tvdr.de> | 2009-11-22 14:20:36 +0100 | 
|---|---|---|
| committer | Klaus Schmidinger <vdr@tvdr.de> | 2009-11-22 14:20:36 +0100 | 
| commit | 561d41c0d43712a9e28e1498b0b7a3f2e5ad7394 (patch) | |
| tree | c6bded1c5067924c639ca42241a325fb05f6d0de | |
| parent | 2e8f2b8557774eb24cdfb7790b8c8ec47f8e2e21 (diff) | |
| download | vdr-561d41c0d43712a9e28e1498b0b7a3f2e5ad7394.tar.gz vdr-561d41c0d43712a9e28e1498b0b7a3f2e5ad7394.tar.bz2 | |
Reverted "Removed limitation to PAL resolution from SPU handling" because it cause nothing but trouble
| -rw-r--r-- | HISTORY | 2 | ||||
| -rw-r--r-- | dvbspu.c | 34 | 
2 files changed, 22 insertions, 14 deletions
| @@ -6192,3 +6192,5 @@ Video Disk Recorder Revision History  - Added the audio id to the call of PlayAudio() in cDevice::PlayTsAudio()    (thanks to Andreas Schaefers).  - 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. @@ -8,7 +8,7 @@   *   * 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" @@ -55,6 +55,9 @@ void cDvbSpuPalette::setPalette(const uint32_t * pal)  #define setMin(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; }  cDvbSpuBitmap::cDvbSpuBitmap(sDvbSpuRect size, @@ -63,8 +66,8 @@ cDvbSpuBitmap::cDvbSpuBitmap(sDvbSpuRect size,  {      size.x1 = max(size.x1, 0);      size.y1 = max(size.y1, 0); -    size.x2 = min(size.x2, Setup.OSDWidth); -    size.y2 = min(size.y2, Setup.OSDHeight); +    size.x2 = min(size.x2, spuXres - 1); +    size.y2 = min(size.y2, spuYres - 1);      bmpsize = size;      revRect(minsize[0], size); @@ -72,7 +75,7 @@ cDvbSpuBitmap::cDvbSpuBitmap(sDvbSpuRect size,      revRect(minsize[2], 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];      if (bmp) @@ -93,10 +96,10 @@ cBitmap *cDvbSpuBitmap::getBitmap(const aDvbSpuPalDescr paldescr,      int h = size.height();      int w = size.width(); -    if (size.y1 + h >= bmpsize.height()) -        h = bmpsize.height() - size.y1 - 1; -    if (size.x1 + w >= bmpsize.width()) -        w = bmpsize.width() - size.x1 - 1; +    if (size.y1 + h >= spuYres) +        h = spuYres - size.y1 - 1; +    if (size.x1 + w >= spuXres) +        w = spuXres - size.x1 - 1;      if (w & 0x03)          w += 4 - (w & 0x03); @@ -111,11 +114,13 @@ cBitmap *cDvbSpuBitmap::getBitmap(const aDvbSpuPalDescr paldescr,      }      // set the content -    for (int yp = 0; yp < h; yp++) { -        for (int xp = 0; xp < w; xp++) { -            uint8_t idx = bmp[(size.y1 + yp) * bmpsize.width() + size.x1 + xp]; -            ret->SetIndex(xp, yp, idx); -        } +    if (bmp) { +       for (int yp = 0; yp < h; yp++) { +           for (int xp = 0; xp < w; xp++) { +               uint8_t idx = bmp[(size.y1 + yp) * spuXres + size.x1 + xp]; +               ret->SetIndex(xp, yp, idx); +           } +       }      }      return ret;  } @@ -149,7 +154,8 @@ bool cDvbSpuBitmap::getMinSize(const aDvbSpuPalDescr paldescr,  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].y1, yp);      setMax(minsize[colorid].x2, xp + len - 1); | 
