Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cFourCC.h
Go to the documentation of this file.
1 //
4 //
5 #ifndef _INC_cFourCC_H
6 #define _INC_cFourCC_H
7 #ifndef NO_PRAGMA_ONCE
8 #pragma once
9 #endif
10 
11 #include "../GrayLibBase.h"
15 
16 #ifdef _WIN32
17 typedef DWORD FOURCC;
18 #else
19 typedef UINT32 FOURCC;
20 #endif
21 
22 #ifndef MAKEFOURCC // code from _WIN32 mmsystem.h
23 // Keep string order as a 32 bit int. Use DWORD Same as MMSYSTEM mmioFOURCC()
24 #define MAKEFOURCC(ch0, ch1, ch2, ch3) \
25  ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \
26  ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
27 #endif
28 
29 namespace GrayLib
30 {
32 
34  {
38  FOURCC_0 = 0,
39 
40 #ifndef FOURCC_RIFF // from mmsystem.h
41  FOURCC_RIFF = MAKEFOURCC('R','I','F','F'),
42  FOURCC_LIST = MAKEFOURCC('L','I','S','T'),
43 #endif
44  FOURCC_FORM = MAKEFOURCC('F', 'O', 'R', 'M'),
45 
46  FOURCC_WAVE = MAKEFOURCC('W', 'A', 'V', 'E'),
47  FOURCC_fmt = MAKEFOURCC('f', 'm', 't', ' '),
48  FOURCC_fact = MAKEFOURCC('f', 'a', 'c', 't'),
49  FOURCC_data = MAKEFOURCC('d', 'a', 't', 'a'),
50 
51  FOURCC_INFO = MAKEFOURCC('I', 'N', 'F', 'O'),
52  FOURCC_odsp = MAKEFOURCC('o', 'd', 's', 'p'),
53 
54  FOURCC_PROP = MAKEFOURCC('P', 'R', 'O', 'P'),
55  FOURCC_MDPR = MAKEFOURCC('M', 'D', 'P', 'R'),
56  FOURCC_CONT = MAKEFOURCC('C', 'O', 'N', 'T'),
57  FOURCC_DISP = MAKEFOURCC('D', 'I', 'S', 'P'),
58  FOURCC_TEXT = MAKEFOURCC('T', 'E', 'X', 'T'),
59 
60  FOURCC_IART = MAKEFOURCC('I', 'A', 'R', 'T'),
61  FOURCC_ICMT = MAKEFOURCC('I', 'C', 'M', 'T'),
62  FOURCC_ICOP = MAKEFOURCC('I', 'C', 'O', 'P'), //
63  FOURCC_ICRD = MAKEFOURCC('I', 'C', 'R', 'D'),
64  FOURCC_IENG = MAKEFOURCC('I', 'E', 'N', 'G'), //
65  FOURCC_INAM = MAKEFOURCC('I', 'N', 'A', 'M'), //
66  FOURCC_ISBJ = MAKEFOURCC('I', 'S', 'B', 'J'),
67  FOURCC_ISFT = MAKEFOURCC('I', 'S', 'F', 'T'), //
68  FOURCC_DATE = MAKEFOURCC('D', 'A', 'T', 'E'), //
69  FOURCC_MARC = MAKEFOURCC('M', 'A', 'R', 'C'), // ??
70 
71  FOURCC_UART = MAKEFOURCC('U', 'A', 'R', 'T'),
72  FOURCC_UCMT = MAKEFOURCC('U', 'C', 'M', 'T'), //
73  FOURCC_UCOP = MAKEFOURCC('U', 'C', 'O', 'P'), //
74  FOURCC_UNAM = MAKEFOURCC('U', 'N', 'A', 'M'), //
75  FOURCC_USBJ = MAKEFOURCC('U', 'S', 'B', 'J'), //
76 
77  FOURCC_JUNK = MAKEFOURCC('J', 'U', 'N', 'K'),
78 
79  FOURCC_AVI = MAKEFOURCC('A', 'V', 'I', ' '),
80  FOURCC_idx1 = MAKEFOURCC('i', 'd', 'x', '1'),
81  FOURCC_movi = MAKEFOURCC('m', 'o', 'v', 'i'),
82 
83  FOURCC_hdrl = MAKEFOURCC('h', 'd', 'r', 'l'),
84  FOURCC_avih = MAKEFOURCC('a', 'v', 'i', 'h'),
85  FOURCC_strl = MAKEFOURCC('s', 't', 'r', 'l'),
86  FOURCC_strh = MAKEFOURCC('s', 't', 'r', 'h'),
87  FOURCC_strf = MAKEFOURCC('s', 't', 'r', 'f'),
88  FOURCC_strd = MAKEFOURCC('s', 't', 'r', 'd'),
89  FOURCC_strn = MAKEFOURCC('s', 't', 'r', 'n'),
90  FOURCC_rec = MAKEFOURCC('r', 'e', 'c', ' '),
91  };
92 
93 #pragma pack(push,1)
94 
96  {
104 
105  public:
107 
108  public:
109  cFourCC() noexcept
110  {
111  m_u.u_dw = FOURCC_0;
112  }
113  cFourCC(FOURCC dwVal) noexcept
114  {
115  m_u.u_dw = dwVal;
116  }
117  cFourCC(BYTE ch0, BYTE ch1, BYTE ch2, BYTE ch3) noexcept
118  {
119  SetChars(ch0, ch1, ch2, ch3);
120  }
121  cFourCC(const char* s)
122  {
124  SetChars(s[0], s[1], s[2], s[3]);
125  }
126 
127  static bool GRAYCALL IsValidChar(wchar_t ch);
128 
129  bool isValid() const noexcept
130  {
131  return m_u.u_dw != FOURCC_0;
132  }
133  FOURCC get_FOURCC() const noexcept
134  {
135  return m_u.u_dw;
136  }
137  operator FOURCC() const noexcept
138  {
139  return m_u.u_dw;
140  }
141  bool isListType() const noexcept
142  {
144  switch (m_u.u_dw)
145  {
146  case FOURCC_RIFF:
147  case FOURCC_LIST:
148  return true;
149  case FOURCC_FORM: // For AIFF
150  return true;
151  }
152  return false;
153  }
154 
155  void SetChars(BYTE ch0, BYTE ch1, BYTE ch2, BYTE ch3) noexcept
156  {
157  m_u.u_c[0] = ch0; m_u.u_c[1] = ch1; m_u.u_c[2] = ch2; m_u.u_c[3] = ch3;
158  }
159  void SetChar(int i, BYTE ch)
160  {
161  m_u.u_c[i] = ch;
162  }
163  StrLen_t GetStrA(char* pszOut, StrLen_t iSizeMax = 5) const;
164  const char* get_StrA() const;
165 
167  };
168 
169 #pragma pack(pop)
170 };
171 
172 #endif
#define GRAYCALL
declare calling convention for static functions so everyone knows the arg passing scheme....
Definition: GrayCore.h:36
#define CATTR_PACKED
Definition: GrayCore.h:87
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
UINT32 FOURCC
32 bit code. Also defined in _MMSYSTEM_H
Definition: cFourCC.h:19
#define MAKEFOURCC(ch0, ch1, ch2, ch3)
Definition: cFourCC.h:24
Definition: cFourCC.h:96
void SetChar(int i, BYTE ch)
Definition: cFourCC.h:159
cFourCC(BYTE ch0, BYTE ch1, BYTE ch2, BYTE ch3) noexcept
Definition: cFourCC.h:117
bool isListType() const noexcept
Definition: cFourCC.h:141
cFourCC(const char *s)
Definition: cFourCC.h:121
UNITTEST2_PREDEF(cFourCC)
cFourCC() noexcept
Definition: cFourCC.h:109
cUnion32 m_u
e.g. "RIFF" is 0 to 3 u_c order.
Definition: cFourCC.h:106
cFourCC(FOURCC dwVal) noexcept
Definition: cFourCC.h:113
bool isValid() const noexcept
Definition: cFourCC.h:129
FOURCC get_FOURCC() const noexcept
Definition: cFourCC.h:133
void SetChars(BYTE ch0, BYTE ch1, BYTE ch2, BYTE ch3) noexcept
Definition: cFourCC.h:155
Definition: cMesh.h:22
FOURCC_TYPE
Definition: cFourCC.h:34
@ FOURCC_data
The audio data.
Definition: cFourCC.h:49
@ FOURCC_INFO
Info FOURCC_LIST type.
Definition: cFourCC.h:51
@ FOURCC_UCOP
Definition: cFourCC.h:73
@ FOURCC_TEXT
static text? maybe
Definition: cFourCC.h:58
@ FOURCC_INAM
Definition: cFourCC.h:65
@ FOURCC_fmt
Wave Format info.
Definition: cFourCC.h:47
@ FOURCC_MARC
Definition: cFourCC.h:69
@ FOURCC_ICOP
Definition: cFourCC.h:62
@ FOURCC_JUNK
AVI (ckidAVIPADDING)
Definition: cFourCC.h:77
@ FOURCC_strl
AVI (listtypeSTREAMHEADER)
Definition: cFourCC.h:85
@ FOURCC_IART
static text.
Definition: cFourCC.h:60
@ FOURCC_strn
AVI (ckidSTREAMNAME)
Definition: cFourCC.h:89
@ FOURCC_movi
AVI LIST type (listtypeAVIMOVIE)
Definition: cFourCC.h:81
@ FOURCC_DISP
clip board stuff. Bitmap rep.
Definition: cFourCC.h:57
@ FOURCC_LIST
Definition: cFourCC.h:42
@ FOURCC_odsp
MY OLE display link.
Definition: cFourCC.h:52
@ FOURCC_rec
AVI (listtypeAVIRECORD)
Definition: cFourCC.h:90
@ FOURCC_RIFF
Definition: cFourCC.h:41
@ FOURCC_DATE
Definition: cFourCC.h:68
@ FOURCC_ISFT
Definition: cFourCC.h:67
@ FOURCC_UART
UNICODE static text.
Definition: cFourCC.h:71
@ FOURCC_MDPR
static text.
Definition: cFourCC.h:55
@ FOURCC_PROP
static text.
Definition: cFourCC.h:54
@ FOURCC_idx1
AVI (ckidAVINEWINDEX)
Definition: cFourCC.h:80
@ FOURCC_ISBJ
Subject text.
Definition: cFourCC.h:66
@ FOURCC_FORM
FOURCC_LIST type for AIFF.
Definition: cFourCC.h:44
@ FOURCC_USBJ
Definition: cFourCC.h:75
@ FOURCC_AVI
AVI FOURCC_RIFF type (formtypeAVI)
Definition: cFourCC.h:79
@ FOURCC_ICMT
static text.
Definition: cFourCC.h:61
@ FOURCC_fact
Time length for non-PCM.
Definition: cFourCC.h:48
@ FOURCC_UNAM
Definition: cFourCC.h:74
@ FOURCC_IENG
Definition: cFourCC.h:64
@ FOURCC_hdrl
AVI (listtypeAVIHEADER)
Definition: cFourCC.h:83
@ FOURCC_0
junk FOURCC
Definition: cFourCC.h:38
@ FOURCC_UCMT
Definition: cFourCC.h:72
@ FOURCC_strd
AVI (ckidSTREAMHANDLERDATA)
Definition: cFourCC.h:88
@ FOURCC_avih
AVI (ckidAVIMAINHDR)
Definition: cFourCC.h:84
@ FOURCC_strh
AVI (ckidSTREAMHEADER)
Definition: cFourCC.h:86
@ FOURCC_ICRD
Create date. text.
Definition: cFourCC.h:63
@ FOURCC_strf
AVI (ckidSTREAMFORMAT)
Definition: cFourCC.h:87
@ FOURCC_CONT
static text.
Definition: cFourCC.h:56
@ FOURCC_WAVE
wave/audio FOURCC_RIFF type
Definition: cFourCC.h:46
UNITTEST2_PREDEF(cQuadtree)
int StrLen_t
the length of a string in chars (bytes for UTF8, wchar_t for UNICODE). or offset in characters....
Definition: StrConst.h:32
Definition: cTypes.h:66
char u_c[4]
Definition: cTypes.h:74
UINT32 u_dw
32 bit unsigned
Definition: cTypes.h:78