diff options
Diffstat (limited to 'dxr3spudecoder.h')
-rw-r--r-- | dxr3spudecoder.h | 173 |
1 files changed, 29 insertions, 144 deletions
diff --git a/dxr3spudecoder.h b/dxr3spudecoder.h index 9f5adb1..9b3e752 100644 --- a/dxr3spudecoder.h +++ b/dxr3spudecoder.h @@ -1,7 +1,7 @@ /* * dxr3spudecoder.h * - * Copyright (C) 2004 Christian Gmeiner + * Copyright (C) 2005 Christian Gmeiner * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -23,163 +23,48 @@ #define _DXR3SPUDECODER_H_ #include "dxr3vdrincludes.h" +#include "dxr3interface.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]; - -// ================================== -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; -}; - -// ================================== +//! 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); - - cSpuDecoder::eScaleMode getScaleMode(void); - 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(); + virtual ~cDxr3SpuDecoder() {} + + // lower level stuffer + virtual int setTime(uint32_t pts); + virtual eScaleMode getScaleMode() { return m_ScaleMode; } + virtual void setScaleMode(eScaleMode ScaleMode) { m_ScaleMode = ScaleMode; } + virtual void setPalette(uint32_t * pal); + virtual void setHighlight(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, uint32_t palette); + virtual void clearHighlight(); + + // higher level stuff + virtual void Empty(); + virtual void Hide() { m_Visible = false; } + virtual void Draw() { m_Visible = true; } + virtual bool IsVisible() { return m_Visible; } #if VDRVERSNUM >= 10318 - void processSPU(uint32_t pts, uint8_t * buf, bool AllowedShow); + virtual void processSPU(uint32_t pts, uint8_t * buf, bool AllowedShow); #else - void processSPU(uint32_t pts, uint8_t * buf); + virtual void processSPU(uint32_t pts, uint8_t * buf); #endif - void Hide(); - void Draw(); - bool IsVisible() - { - return osd != NULL; - } - private: - cOsd * osd; - - // processing state - uint8_t *spu; - uint32_t spupts; - bool clean; - bool ready; - bool allowedShow; - - enum spFlag - { - spNONE, - spHIDE, - spSHOW, - spMENU - }; - spFlag state; - - cSpuDecoder::eScaleMode scaleMode; - - // 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); + bool m_Visible; ///< is anything visible (nav, osd, subtitles) + eScaleMode m_ScaleMode; + cDxr3Interface& m_Interface; ///< interface to dxr3 driver }; -// ================================== -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); -} - #endif /*_DXR3SPUDECODER_H_*/ // Local variables: |