libcvd
colourspaces.h
1 #ifndef CVD_COLOURSPACES_H
2 #define CVD_COLOURSPACES_H
3 
4 #include <cvd/internal/builtin_components.h>
5 #include <cvd/internal/name_builtin_types.h>
6 #include <cvd/internal/pixel_traits.h>
7 #include <ratio>
8 
9 namespace CVD
10 {
11 
14 struct bayer_bggr
15 {
16  unsigned char val;
17  operator unsigned char() const { return val; }
18  bayer_bggr() { }
19  bayer_bggr(unsigned char v)
20  : val(v)
21  {
22  }
23 };
24 
27 struct bayer_gbrg
28 {
29  unsigned char val;
30  operator unsigned char() const { return val; }
31  bayer_gbrg() { }
32  bayer_gbrg(unsigned char v)
33  : val(v)
34  {
35  }
36 };
37 
40 struct bayer_grbg
41 {
42  unsigned char val;
43  operator unsigned char() const { return val; }
44  bayer_grbg() { }
45  bayer_grbg(unsigned char v)
46  : val(v)
47  {
48  }
49 };
50 
53 struct bayer_rggb
54 {
55  unsigned char val;
56  operator unsigned char() const { return val; }
57  bayer_rggb() { }
58  bayer_rggb(unsigned char v)
59  : val(v)
60  {
61  }
62 };
63 
67 {
68  unsigned short val;
69  operator unsigned short() const { return val; }
70  bayer_bggr16() { }
71  bayer_bggr16(unsigned short v)
72  : val(v)
73  {
74  }
75 };
76 
80 {
81  unsigned short val;
82  operator unsigned short() const { return val; }
83  bayer_gbrg16() { }
84  bayer_gbrg16(unsigned short v)
85  : val(v)
86  {
87  }
88 };
89 
93 {
94  unsigned short val;
95  operator unsigned short() const { return val; }
96  bayer_grbg16() { }
97  bayer_grbg16(unsigned short v)
98  : val(v)
99  {
100  }
101 };
102 
106 {
107  unsigned short val;
108  operator unsigned short() const { return val; }
109  bayer_rggb16() { }
110  bayer_rggb16(unsigned char v)
111  : val(v)
112  {
113  }
114 };
115 
119 {
120  unsigned short val;
121  operator unsigned short() const { return val; }
122  bayer_bggr16be() { }
123  bayer_bggr16be(unsigned short v)
124  : val(v)
125  {
126  }
127 };
128 
132 {
133  unsigned short val;
134  operator unsigned short() const { return val; }
135  bayer_gbrg16be() { }
136  bayer_gbrg16be(unsigned short v)
137  : val(v)
138  {
139  }
140 };
141 
145 {
146  unsigned short val;
147  operator unsigned short() const { return val; }
148  bayer_grbg16be() { }
149  bayer_grbg16be(unsigned short v)
150  : val(v)
151  {
152  }
153 };
154 
158 {
159  unsigned short val;
160  operator unsigned short() const { return val; }
161  bayer_rggb16be() { }
162  bayer_rggb16be(unsigned char v)
163  : val(v)
164  {
165  }
166 };
167 
172 
176 struct yuv411
177 {
178  //Layout uyyvyy is 6 bytes for 4 pixels
179  typedef int dummy;
180  typedef std::ratio<6, 4> bytes_per_pixel;
181  //unsigned char val;
182 };
183 
185 struct MJPEG
186 {
187  typedef int dummy;
188 };
189 
192 struct yuv422
193 {
194  //yuyv is 4 bytes for 2 pixels
195  typedef int dummy;
196  typedef std::ratio<4, 2> bytes_per_pixel;
197  //unsigned short val;
198 };
199 
202 struct yuv420p
203 {
204  typedef int dummy;
205  typedef std::ratio<6, 4> bytes_per_pixel;
206  //unsigned short val;
207 };
208 
213 struct vuy422
214 {
215  typedef int dummy;
216  typedef std::ratio<4, 2> bytes_per_pixel;
217  //unsigned short val;
218 };
219 
220 namespace PNM
221 {
222  template <>
224  {
225  static std::string name() { return "bayer_bggr"; }
226  };
227  template <>
229  {
230  static std::string name() { return "bayer_gbrg"; }
231  };
232  template <>
234  {
235  static std::string name() { return "bayer_grbg"; }
236  };
237  template <>
239  {
240  static std::string name() { return "bayer_rggb"; }
241  };
242 
243  template <>
245  {
246  static std::string name() { return "bayer_bggr16"; }
247  };
248  template <>
250  {
251  static std::string name() { return "bayer_gbrg16"; }
252  };
253  template <>
255  {
256  static std::string name() { return "bayer_grbg16"; }
257  };
258  template <>
260  {
261  static std::string name() { return "bayer_rggb16"; }
262  };
263 
264  template <>
266  {
267  static std::string name() { return "bayer_bggr16be"; }
268  };
269  template <>
271  {
272  static std::string name() { return "bayer_gbrg16be"; }
273  };
274  template <>
276  {
277  static std::string name() { return "bayer_grbg16be"; }
278  };
279  template <>
281  {
282  static std::string name() { return "bayer_rggb16be"; }
283  };
284 
285  template <>
287  {
288  static std::string name() { return "yuv411"; }
289  };
290  template <>
292  {
293  static std::string name() { return "yuv422"; }
294  };
295  template <>
297  {
298  static std::string name() { return "yuv420p"; }
299  };
300  template <>
302  {
303  static std::string name() { return "vuy422"; }
304  };
305 
306  template <>
307  struct type_name<MJPEG>
308  {
309  static std::string name() { return "MJPEG"; }
310  };
311 }
312 
313 namespace Pixel
314 {
315  template <int LIFT>
316  struct traits<bayer_bggr, LIFT> : public traits<unsigned char, LIFT>
317  {
318  };
319 
320  template <int LIFT>
321  struct traits<bayer_rggb, LIFT> : public traits<unsigned char, LIFT>
322  {
323  };
324 
325  template <int LIFT>
326  struct traits<bayer_gbrg, LIFT> : public traits<unsigned char, LIFT>
327  {
328  };
329 
330  template <int LIFT>
331  struct traits<bayer_grbg, LIFT> : public traits<unsigned char, LIFT>
332  {
333  };
334 
335  template <int LIFT>
336  struct traits<bayer_bggr16, LIFT> : public traits<unsigned short, LIFT>
337  {
338  };
339 
340  template <int LIFT>
341  struct traits<bayer_rggb16, LIFT> : public traits<unsigned short, LIFT>
342  {
343  };
344 
345  template <int LIFT>
346  struct traits<bayer_gbrg16, LIFT> : public traits<unsigned short, LIFT>
347  {
348  };
349 
350  template <int LIFT>
351  struct traits<bayer_grbg16, LIFT> : public traits<unsigned short, LIFT>
352  {
353  };
354 
355  template <int LIFT>
356  struct traits<bayer_bggr16be, LIFT> : public traits<unsigned short, LIFT>
357  {
358  };
359 
360  template <int LIFT>
361  struct traits<bayer_rggb16be, LIFT> : public traits<unsigned short, LIFT>
362  {
363  };
364 
365  template <int LIFT>
366  struct traits<bayer_gbrg16be, LIFT> : public traits<unsigned short, LIFT>
367  {
368  };
369 
370  template <int LIFT>
371  struct traits<bayer_grbg16be, LIFT> : public traits<unsigned short, LIFT>
372  {
373  };
374 }
375 
376 }
377 
378 #endif
A datatype to represent yuv420p (yy...u...v) data.
Definition: colourspaces.h:202
All classes and functions are within the CVD namespace.
Definition: argb.h:6
16bit Bayer datatype representing the colour filter pattern GRBG
Definition: colourspaces.h:92
16bit big endian Bayer datatype representing the colour filter pattern RGGB
Definition: colourspaces.h:157
A datatype to represent MJPEG data.
Definition: colourspaces.h:185
16bit Bayer datatype representing the colour filter pattern GBRG
Definition: colourspaces.h:79
A datatype to represent yuv411 (uyyvyy) data, typically from firewire cameras.
Definition: colourspaces.h:176
16bit Bayer datatype representing the colour filter pattern RGGB
Definition: colourspaces.h:105
bayer_bggr bayer
typedef to support old bayer datatype
Definition: colourspaces.h:171
A datatype to represent the other yuv422 (uyvy) data.
Definition: colourspaces.h:213
16 bit Bayer datatype representing the colour filter pattern BGGR
Definition: colourspaces.h:66
Bayer datatype representing the colour filter pattern GRBG.
Definition: colourspaces.h:40
Bayer datatype representing the colour filter pattern GBRG.
Definition: colourspaces.h:27
16 bit big endian Bayer datatype representing the colour filter pattern BGGR
Definition: colourspaces.h:118
16bit big endian Bayer datatype representing the colour filter pattern GRBG
Definition: colourspaces.h:144
Definition: name_builtin_types.h:11
Bayer datatype representing the colour filter pattern BGGR.
Definition: colourspaces.h:14
A datatype to represent yuv422 (yuyv) data.
Definition: colourspaces.h:192
Bayer datatype representing the colour filter pattern RGGB.
Definition: colourspaces.h:53
16bit big endian Bayer datatype representing the colour filter pattern GBRG
Definition: colourspaces.h:131
Definition: pixel_traits.h:16