Face Engine SDK  5.8.0
A face detection, recognition and tracking engine.
Format.h
1 #pragma once
2 
3 #include <cassert>
4 
5 namespace fsdk
6 {
7 
11 struct Format {
12 
15  enum Type {
21  R8,
22  R16,
25  YUV_NV12
26  };
27 
34  int getChannelCount() const noexcept {
35  switch(m_type) {
36  case B8G8R8X8:
37  case R8G8B8X8:
38  case B8G8R8:
39  case R8G8B8:
40  case IR_X8X8X8:
41  case YUV_NV21:
42  case YUV_NV12:
43  return 3;
44  case R8:
45  case R16:
46  return 1;
47  default:
48  return 0;
49  }
50  }
51 
56  int getChannelStep() const noexcept {
57  switch(m_type) {
58  case B8G8R8X8:
59  case R8G8B8X8:
60  return 4;
61  case B8G8R8:
62  case R8G8B8:
63  case IR_X8X8X8:
64  return 3;
65  case R8:
66  case R16:
67  case YUV_NV21:
68  case YUV_NV12:
69  return 1;
70  default:
71  return 0;
72  }
73  }
74 
78  int getChannelSize() const noexcept {
79  switch(m_type) {
80  case B8G8R8X8:
81  case R8G8B8X8:
82  case B8G8R8:
83  case R8G8B8:
84  case IR_X8X8X8:
85  case R8:
86  return 8;
87  case R16:
88  return 16;
89  case YUV_NV21:
90  case YUV_NV12:
91  return 12;
92  default:
93  return 0;
94  }
95  }
96 
100  int getBitDepth() const noexcept {
101  return getChannelStep() * getChannelSize();
102  }
103 
107  int getByteDepth() const noexcept {
108  if(isBlock()) {
109  assert(!"Not implemented");
110  return 0;
111  }
112  else {
113  return getBitDepth() >> 3;
114  }
115  }
116 
121  int computePitch(int rowWidth) const noexcept {
122  return rowWidth * getByteDepth();
123  }
124 
127  bool isPadded() const noexcept {
128  switch(m_type) {
129  case B8G8R8X8:
130  case R8G8B8X8:
131  return true;
132  default:
133  return false;
134  }
135  }
136 
141  bool isBGR() const noexcept {
142  switch(m_type) {
143  case B8G8R8X8:
144  case B8G8R8:
145  return true;
146  default:
147  return false;
148  }
149  }
150 
153  bool isYUV() const noexcept {
154  switch(m_type) {
155  case YUV_NV21:
156  case YUV_NV12:
157  return true;
158  default:
159  return false;
160  }
161  }
162 
167  bool isBlock() const noexcept {
168  return false;
169  }
170 
174  bool isValid() const noexcept {
175  return m_type != Unknown;
176  }
177 
181  Format() noexcept : m_type(Unknown) {}
182 
186  Format(Type type) noexcept : m_type(type) {}
187 
189  operator Type () const noexcept {
190  return m_type;
191  }
192 
193 protected:
195 };
196 }
197 
198 
fsdk::Format::R16
@ R16
1 channel, 16 bit per channel format;
Definition: Format.h:22
fsdk::Format::isPadded
bool isPadded() const noexcept
Definition: Format.h:127
fsdk::Format::Unknown
@ Unknown
unknown format.
Definition: Format.h:16
fsdk
SDK namespace.
Definition: IAGSEstimator.h:8
fsdk::Format::R8G8B8X8
@ R8G8B8X8
3 channel, 8 bit per channel, R-G-B color order format with 8 bit padding before next pixel;
Definition: Format.h:18
fsdk::Format::R8
@ R8
1 channel, 8 bit per channel format;
Definition: Format.h:21
fsdk::Format::YUV_NV12
@ YUV_NV12
4:2:0 planar format with a plane of 8-bit Y samples followed by interleaved 2x2 subsampled U/V 8-bit ...
Definition: Format.h:25
fsdk::Format
Image format.
Definition: Format.h:11
fsdk::Format::getChannelSize
int getChannelSize() const noexcept
Get color channel size in bits.
Definition: Format.h:78
fsdk::Format::computePitch
int computePitch(int rowWidth) const noexcept
Compute row size in bytes.
Definition: Format.h:121
fsdk::Format::isValid
bool isValid() const noexcept
Definition: Format.h:174
fsdk::Format::isBGR
bool isBGR() const noexcept
Definition: Format.h:141
fsdk::Format::getByteDepth
int getByteDepth() const noexcept
Get number of bytes per pixel.
Definition: Format.h:107
fsdk::Format::Format
Format() noexcept
Initializes format structure.
Definition: Format.h:181
fsdk::Format::m_type
Type m_type
Format type.
Definition: Format.h:194
fsdk::Format::isYUV
bool isYUV() const noexcept
Definition: Format.h:153
fsdk::Format::Type
Type
Format type enumeration.
Definition: Format.h:15
fsdk::Format::getBitDepth
int getBitDepth() const noexcept
Get number of bits per pixel.
Definition: Format.h:100
fsdk::Format::YUV_NV21
@ YUV_NV21
4:2:0 planar format with a plane of 8-bit Y samples followed by interleaved 2x2 subsampled V/U 8-bit ...
Definition: Format.h:24
fsdk::Format::Format
Format(Type type) noexcept
Initializes format structure.
Definition: Format.h:186
fsdk::Format::getChannelStep
int getChannelStep() const noexcept
Get channel step.
Definition: Format.h:56
fsdk::Format::B8G8R8
@ B8G8R8
3 channel, 8 bit per channel, B-G-R color order format;
Definition: Format.h:19
fsdk::Format::isBlock
bool isBlock() const noexcept
Definition: Format.h:167
fsdk::Format::IR_X8X8X8
@ IR_X8X8X8
3 channel, 8 bit per channel format with InfraRed semantics;
Definition: Format.h:23
fsdk::Format::B8G8R8X8
@ B8G8R8X8
3 channel, 8 bit per channel, B-G-R color order format with 8 bit padding before next pixel;
Definition: Format.h:17
fsdk::Format::R8G8B8
@ R8G8B8
3 channel, 8 bit per channel, R-G-B color order format;
Definition: Format.h:20
fsdk::Format::getChannelCount
int getChannelCount() const noexcept
Get color channel count.
Definition: Format.h:34