[cosmetics] update date in GPL header
[vuplus_xbmc] / xbmc / cores / dvdplayer / DVDDemuxSPU.h
1 #pragma once
2
3 /*
4  *      Copyright (C) 2005-2013 Team XBMC
5  *      http://www.xbmc.org
6  *
7  *  This Program is free software; you can redistribute it and/or modify
8  *  it under the terms of the GNU General Public License as published by
9  *  the Free Software Foundation; either version 2, or (at your option)
10  *  any later version.
11  *
12  *  This Program is distributed in the hope that it will be useful,
13  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  *  GNU General Public License for more details.
16  *
17  *  You should have received a copy of the GNU General Public License
18  *  along with XBMC; see the file COPYING.  If not, see
19  *  <http://www.gnu.org/licenses/>.
20  *
21  */
22
23 #include "DVDCodecs/Video/DVDVideoCodec.h"
24 #include "DVDCodecs/Overlay/DVDOverlaySpu.h"
25 struct AVPicture;
26
27 typedef struct SPUData
28 {
29   BYTE* data;
30   unsigned int iSize; // current data size
31   unsigned int iNeededSize; // wanted packet size
32   unsigned int iAllocatedSize;
33   double pts;
34 }
35 SPUData;
36
37 // upto 32 streams can exist
38 #define DVD_MAX_SPUSTREAMS 32
39
40 class CDVDDemuxSPU
41 {
42 public:
43   CDVDDemuxSPU();
44   virtual ~CDVDDemuxSPU();
45
46   CDVDOverlaySpu* AddData(BYTE* data, int iSize, double pts); // returns a packet from ParsePacket if possible
47
48   CDVDOverlaySpu* ParseRLE(CDVDOverlaySpu* pSPU, BYTE* pUnparsedData);
49   void FindSubtitleColor(int last_color, int stats[4], CDVDOverlaySpu* pSPU);
50   bool CanDisplayWithAlphas(int a[4], int stats[4]);
51
52   void Reset();
53   void FlushCurrentPacket(); // flushes current unparsed data
54
55   // m_clut set by libdvdnav once in a time
56   // color lokup table is representing 16 different yuv colors
57   // [][0] = Y, [][1] = Cr, [][2] = Cb
58   BYTE m_clut[16][3];
59   bool m_bHasClut;
60
61 protected:
62   CDVDOverlaySpu* ParsePacket(SPUData* pSPUData);
63
64   SPUData m_spuData;
65 };