diff options
Diffstat (limited to 'dxr3spudecoder.h')
-rw-r--r-- | dxr3spudecoder.h | 158 |
1 files changed, 27 insertions, 131 deletions
diff --git a/dxr3spudecoder.h b/dxr3spudecoder.h index 5b510d6..b05540d 100644 --- a/dxr3spudecoder.h +++ b/dxr3spudecoder.h @@ -3,9 +3,6 @@ * * Copyright (C) 2004 Christian Gmeiner * - * Orginal: - * Copyright (C) 2001.2002 Andreas Schultz <aschultz@warp10.net> - * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2.1 @@ -24,140 +21,39 @@ #ifndef _DXR3SPUDECODER_H_ #define _DXR3SPUDECODER_H_ - + #include "dxr3vdrincludes.h" -#include <inttypes.h> - -// ================================== -typedef struct sDxr3SpuPalDescr -{ - uint8_t index; - uint8_t trans; - - bool operator != (const sDxr3SpuPalDescr pd) const { - return index != pd.index && trans != pd.trans; - }; -} aDxr3SpuPalDescr[4]; - -// ================================== -//! describes a rectal -struct sDxr3SpuRect -{ - int x1, y1; - int x2, y2; - - int width() - { - return x2 - x1 + 1; - }; - - int height() - { - return y2 - y1 + 1; - }; - - bool operator != (const sDxr3SpuRect r) const - { - return r.x1 != x1 || r.y1 != y1 || r.x2 != x2 || r.y2 != y2; - }; -}; - -// ================================== -class cDxr3SpuPalette -{ -private: - uint32_t palette[16]; - -public: - void setPalette(const uint32_t * pal); - uint32_t getColor(uint8_t idx, uint8_t trans) const; -}; - -// ================================== -class cDxr3SpuBitmap -{ -private: - sDxr3SpuRect bmpsize; - sDxr3SpuRect minsize[4]; - uint8_t *bmp; - - void putPixel(int xp, int yp, int len, uint8_t colorid); - void putFieldData(int field, uint8_t * data, uint8_t * endp); - -public: - cDxr3SpuBitmap(sDxr3SpuRect size, uint8_t * fodd, uint8_t * eodd, uint8_t * feven, uint8_t * eeven); - ~cDxr3SpuBitmap(); - - bool getMinSize(const aDxr3SpuPalDescr paldescr, sDxr3SpuRect & size) const; - cBitmap *getBitmap(const aDxr3SpuPalDescr paldescr, const cDxr3SpuPalette & pal, sDxr3SpuRect & size) const; -}; +#include "dxr3interface.h" // ================================== -class cDxr3SpuDecoder : public cSpuDecoder +//! spu decoder +/*! + cDxr3SpuDecoder is used to show DVD + navigation and subtitles. + We make here use of the DVD-Functions + of the dxr3 driver/card. +*/ +class cDxr3SpuDecoder : public cSpuDecoder { public: - cDxr3SpuDecoder(); - ~cDxr3SpuDecoder(); - - int setTime(uint32_t pts); - - void setScaleMode(cSpuDecoder::eScaleMode ScaleMode); - void setPalette(uint32_t * pal); - void setHighlight(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, uint32_t palette); - void clearHighlight(); - void Empty(); - void processSPU(uint32_t pts, uint8_t * buf); - - #if VDRVERSNUM >= 10311 - void Hide(); - void Draw(); - bool IsVisible() { return osd != NULL; } - #endif - -private: - cOsd * osd; - - // processing state - uint8_t *spu; - uint32_t spupts; - bool clean; - bool ready; - - enum spFlag { spNONE, spHIDE, spSHOW, spMENU }; - spFlag state; + cDxr3SpuDecoder(); + ~cDxr3SpuDecoder() {} - cSpuDecoder::eScaleMode scaleMode; + int setTime(uint32_t pts); - // highligh area - bool highlight; - sDxr3SpuRect hlpsize; - aDxr3SpuPalDescr hlpDescr; - - // palette - cDxr3SpuPalette palette; - - // spu info's - sDxr3SpuRect size; - aDxr3SpuPalDescr palDescr; - - uint16_t DCSQ_offset; - uint16_t prev_DCSQ_offset; - - cDxr3SpuBitmap *spubmp; - - int cmdOffs() { return ((spu[2] << 8) | spu[3]); } - int spuSize() { return ((spu[0] << 8) | spu[1]); } - - int ScaleYcoord(int value); - int ScaleYres(int value); - void DrawBmp(sDxr3SpuRect & size, cBitmap * bmp); -}; - -// ================================== -inline uint32_t cDxr3SpuPalette::getColor(uint8_t idx, uint8_t trans) const -{ - uint8_t t = trans == 0x0f ? 0xff : trans << 4; - return palette[idx] | (t << 24); -} + void setScaleMode(cSpuDecoder::eScaleMode ScaleMode); + void setPalette(uint32_t * pal); + void setHighlight(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, uint32_t palette); + void clearHighlight(); + void Empty(); + void Hide(); + void Draw(); + bool IsVisible() { return m_visible; } + void processSPU(uint32_t pts, uint8_t * buf); +private: + cDxr3Interface& m_Interface; ///< interface to dxr3 driver + bool m_visible; ///< is anything visible (nav, osd, subtilte) +}; + #endif /*_DXR3SPUDECODER_H_*/ |