added: ticket #5154 - High Definition Video Flagging in Library phase 3 part 1. thank...
[xbmc:xbmc-antiquated.git] / xbmc / Cdg.h
1 #ifndef CDG_H
2 #define CDG_H
3
4 /*
5  *      Copyright (C) 2005-2008 Team XBMC
6  *      http://www.xbmc.org
7  *
8  *  This Program is free software; you can redistribute it and/or modify
9  *  it under the terms of the GNU General Public License as published by
10  *  the Free Software Foundation; either version 2, or (at your option)
11  *  any later version.
12  *
13  *  This Program is distributed in the hope that it will be useful,
14  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  *  GNU General Public License for more details.
17  *
18  *  You should have received a copy of the GNU General Public License
19  *  along with XBMC; see the file COPYING.  If not, write to
20  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
21  *  http://www.gnu.org/copyleft/gpl.html
22  *
23  */
24
25 #define  HEIGHT 216  //CDG display size with overscan border
26 #define  WIDTH  300
27 #define  BORDERHEIGHT   12  //overscan border
28 #define  BORDERWIDTH    6
29 #define CDG_COLOR WORD  //Standard Cdg Format is A4R4G4B4
30
31 #define SC_MASK  0x3F
32 #define SC_CDG_COMMAND    0x09
33 #define CDG_MEMORYPRESET  1
34 #define CDG_BORDERPRESET  2
35 #define CDG_TILEBLOCKNORMAL 6
36 #define CDG_SCROLLPRESET  20
37 #define CDG_SCROLLCOPY  24
38 #define CDG_ALPHA  28
39 #define CDG_COLORTABLELO  30
40 #define CDG_COLORTABLEHI  31
41 #define CDG_TILEBLOCKXOR  38
42
43
44 typedef struct
45 {
46   char command;
47   char instruction;
48   char parityQ[2];
49   char data[16];
50   char parityP[4];
51 }
52 SubCode;
53 typedef struct
54 {
55   char color;    // Only lower 4 bits are used, mask with 0x0F
56   char repeat;    // Only lower 4 bits are used, mask with 0x0F
57   char filler[14];
58 }
59 CDG_MemPreset;
60 typedef struct
61 {
62   char color;    // Only lower 4 bits are used, mask with 0x0F
63   char filler[15];
64 }
65 CDG_BorderPreset;
66 typedef struct
67 {
68   char color0;    // Only lower 4 bits are used, mask with 0x0F
69   char color1;    // Only lower 4 bits are used, mask with 0x0F
70   char row;     // Only lower 5 bits are used, mask with 0x1F
71   char column;    // Only lower 6 bits are used, mask with 0x3F
72   char tilePixels[12]; // Only lower 6 bits of each byte are used
73 }
74 CDG_Tile;
75 typedef struct
76 {
77   char color;    // Only lower 4 bits are used, mask with 0x0F
78   char hScroll;   // Only lower 6 bits are used, mask with 0x3F
79   char vScroll;    // Only lower 6 bits are used, mask with 0x3F
80 }
81 CDG_Scroll;
82 typedef struct
83 {
84   WORD colorSpec[8]; // AND with 0x3F3F to clear P and Q channel
85 }
86 CDG_LoadCLUT;
87
88 class CCdg
89 {
90 public:
91   CCdg();
92   ~CCdg();
93   void ReadSubCode(SubCode* pCurSubCode);
94   BYTE GetClutOffset(UINT uiRow, UINT uiCol);
95   CDG_COLOR GetColor(BYTE offset);
96   UINT GetHOffset();
97   UINT GetVOffset();
98   UINT GetNumSubCode();
99   UINT GetCurSubCode();
100   void SetNextSubCode();
101   BYTE GetBackgroundColor();
102   BYTE GetBorderColor();
103   void ClearDisplay();
104
105 protected:
106   BYTE m_PixelMap[HEIGHT][WIDTH];
107   CDG_COLOR m_ColorTable[16];
108   UINT m_hOffset;   // Horizontal scrolling display offset
109   UINT m_vOffset;   //Vertical scrolling display offset
110   BYTE m_BgroundColor;
111   BYTE m_BorderColor;
112   SubCode m_SubCode;
113
114   void MemoryPreset();
115   void BorderPreset();
116   void SetAlpha();
117   void Scroll(bool IsLoop);
118   void ScrollLeft(BYTE* pFillColor);
119   void ScrollRight(BYTE* pFillColor);
120   void ScrollUp(BYTE* pFillColor);
121   void ScrollDown(BYTE* pFillColor);
122   void ColorTable(bool IsLo);
123   void TileBlock(bool IsXor);
124 };
125
126 #endif // CDG_H