summaryrefslogtreecommitdiff
path: root/dxr3spudecoder.h
diff options
context:
space:
mode:
Diffstat (limited to 'dxr3spudecoder.h')
-rw-r--r--dxr3spudecoder.h173
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: