Merge with MPC-HC 6d1472b2f18266d92e5bc068667de348c0cd3b3b.
[xy_vsfilter.git] / src / subtitles / VobSubImage.h
blob13a990c8f166fd26b1c54f1e015304287cc8de3f
1 /*
2 * Copyright (C) 2003-2006 Gabest
3 * http://www.gabest.org
5 * This Program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2, or (at your option)
8 * any later version.
9 *
10 * This Program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with GNU Make; see the file COPYING. If not, write to
17 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
18 * http://www.gnu.org/copyleft/gpl.html
22 #pragma once
24 #include <atlcoll.h>
26 typedef struct
28 CAtlArray<CPoint> pa;
29 CAtlArray<int> da;
30 void RemoveAll() {pa.RemoveAll(); da.RemoveAll();}
31 void Add(CPoint p, int d) {pa.Add(p); da.Add(d);}
32 } COutline;
34 class CVobSubImage
36 friend class CVobSubFile;
38 private:
39 CSize org;
40 RGBQUAD* lpTemp1;
41 RGBQUAD* lpTemp2;
43 WORD nOffset[2], nPlane;
44 bool fCustomPal;
45 char fAligned; // we are also using this for calculations, that's why it is char instead of bool...
46 int tridx;
47 RGBQUAD* orgpal /*[16]*/,* cuspal /*[4]*/;
49 bool Alloc(int w, int h);
50 void Free();
52 BYTE GetNibble(BYTE* lpData);
53 void DrawPixels(CPoint p, int length, int colorid);
54 void TrimSubImage();
56 public:
57 int iLang, iIdx;
58 bool fForced;
59 __int64 start, delay;
60 CRect rect;
61 typedef struct {BYTE pal:4, tr:4;} SubPal;
62 SubPal pal[4];
63 RGBQUAD* lpPixels;
65 CVobSubImage();
66 virtual ~CVobSubImage();
68 void Invalidate() {iLang = iIdx = -1;}
70 void GetPacketInfo(BYTE* lpData, int packetsize, int datasize);
71 bool Decode(BYTE* lpData, int packetsize, int datasize,
72 bool fCustomPal,
73 int tridx,
74 RGBQUAD* orgpal /*[16]*/, RGBQUAD* cuspal /*[4]*/,
75 bool fTrim);
77 /////////
79 private:
80 CAutoPtrList<COutline>* GetOutlineList(CPoint& topleft);
81 int GrabSegment(int start, COutline& o, COutline& ret);
82 void SplitOutline(COutline& o, COutline& o1, COutline& o2);
83 void AddSegment(COutline& o, CAtlArray<BYTE>& pathTypes, CAtlArray<CPoint>& pathPoints);
85 public:
86 bool Polygonize(CAtlArray<BYTE>& pathTypes, CAtlArray<CPoint>& pathPoints, bool fSmooth, int scale);
87 bool Polygonize(CStringW& assstr, bool fSmooth = true, int scale = 3);
89 void Scale2x();