Face Engine SDK  5.25.0
A face detection, recognition and tracking engine.
include/fsdk/Types/Format.h
00001 #pragma once
00002 
00003 #include <cassert>
00004 #include <cstring>
00005 
00006 namespace fsdk {
00007 
00011     struct Format {
00012 
00015         enum Type {
00017             Unknown,
00018 
00020             B8G8R8X8,
00021 
00023             R8G8B8X8,
00024 
00026             B8G8R8,
00027 
00029             R8G8B8,
00030 
00032             R8,
00033 
00035             R16,
00036 
00038             IR_X8X8X8,
00039 
00042             YUV_NV21,
00043 
00046             YUV_NV12
00047         };
00048 
00053         const char* toString() const noexcept {
00054             switch(m_type) {
00055             case Type::B8G8R8X8:
00056                 return "B8G8R8X8";
00057             case Type::R8G8B8X8:
00058                 return "R8G8B8X8";
00059             case Type::B8G8R8:
00060                 return "B8G8R8";
00061             case Type::R8G8B8:
00062                 return "R8G8B8";
00063             case Type::R8:
00064                 return "R8";
00065             case Type::R16:
00066                 return "R16";
00067             case Type::IR_X8X8X8:
00068                 return "IR_X8X8X8";
00069             case Type::YUV_NV21:
00070                 return "YUV_NV21";
00071             case Type::YUV_NV12:
00072                 return "YUV_NV12";
00073             default:
00074                 return "Unknown";
00075             }
00076         }
00077 
00084         static Format fromString(const char* str) noexcept {
00085             if(strcmp(str, "B8G8R8X8") == 0) {
00086                 return Format{Type::B8G8R8X8};
00087             } else if(strcmp(str, "R8G8B8X8") == 0) {
00088                 return Format{Type::R8G8B8X8};
00089             } else if(strcmp(str, "B8G8R8") == 0) {
00090                 return Format{Type::B8G8R8};
00091             } else if(strcmp(str, "R8G8B8") == 0) {
00092                 return Format{Type::R8G8B8};
00093             } else if(strcmp(str, "R8") == 0) {
00094                 return Format{Type::R8};
00095             } else if(strcmp(str, "R16") == 0) {
00096                 return Format{Type::R16};
00097             } else if(strcmp(str, "IR_X8X8X8") == 0) {
00098                 return Format{Type::IR_X8X8X8};
00099             } else if(strcmp(str, "YUV_NV21") == 0) {
00100                 return Format{Type::YUV_NV21};
00101             } else if(strcmp(str, "YUV_NV12") == 0) {
00102                 return Format{Type::YUV_NV12};
00103             } else {
00104                 return Format{Type::Unknown};
00105             }
00106         }
00107 
00114         int getChannelCount() const noexcept {
00115             switch(m_type) {
00116             case B8G8R8X8:
00117             case R8G8B8X8:
00118             case B8G8R8:
00119             case R8G8B8:
00120             case IR_X8X8X8:
00121             case YUV_NV21:
00122             case YUV_NV12:
00123                 return 3;
00124             case R8:
00125             case R16:
00126                 return 1;
00127             default:
00128                 return 0;
00129             }
00130         }
00131 
00136         int getChannelStep() const noexcept {
00137             switch(m_type) {
00138             case B8G8R8X8:
00139             case R8G8B8X8:
00140                 return 4;
00141             case B8G8R8:
00142             case R8G8B8:
00143             case IR_X8X8X8:
00144                 return 3;
00145             case R8:
00146             case R16:
00147             case YUV_NV21:
00148             case YUV_NV12:
00149                 return 1;
00150             default:
00151                 return 0;
00152             }
00153         }
00154 
00158         int getChannelSize() const noexcept {
00159             switch(m_type) {
00160             case B8G8R8X8:
00161             case R8G8B8X8:
00162             case B8G8R8:
00163             case R8G8B8:
00164             case IR_X8X8X8:
00165             case R8:
00166                 return 8;
00167             case R16:
00168                 return 16;
00169             case YUV_NV21:
00170             case YUV_NV12:
00171                 return 12;
00172             default:
00173                 return 0;
00174             }
00175         }
00176 
00180         int getBitDepth() const noexcept {
00181             return getChannelStep() * getChannelSize();
00182         }
00183 
00187         int getByteDepth() const noexcept {
00188             if(isBlock()) {
00189                 assert(!"Not implemented");
00190                 return 0;
00191             } else {
00192                 return getBitDepth() >> 3;
00193             }
00194         }
00195 
00200         int computePitch(int rowWidth) const noexcept {
00201             return rowWidth * getByteDepth();
00202         }
00203 
00206         bool isPadded() const noexcept {
00207             switch(m_type) {
00208             case B8G8R8X8:
00209             case R8G8B8X8:
00210                 return true;
00211             default:
00212                 return false;
00213             }
00214         }
00215 
00220         bool isBGR() const noexcept {
00221             switch(m_type) {
00222             case B8G8R8X8:
00223             case B8G8R8:
00224                 return true;
00225             default:
00226                 return false;
00227             }
00228         }
00229 
00232         bool isYUV() const noexcept {
00233             switch(m_type) {
00234             case YUV_NV21:
00235             case YUV_NV12:
00236                 return true;
00237             default:
00238                 return false;
00239             }
00240         }
00241 
00246         bool isBlock() const noexcept {
00247             return false;
00248         }
00249 
00253         bool isValid() const noexcept {
00254             return m_type != Unknown;
00255         }
00256 
00260         Format() noexcept
00261             : m_type(Unknown) {
00262         }
00263 
00267         Format(Type type) noexcept
00268             : m_type(type) {
00269         }
00270 
00272         operator Type() const noexcept {
00273             return m_type;
00274         }
00275 
00276     protected:
00277         Type m_type; 
00278     };
00279 
00280     constexpr int format_as(Format::Type in) {
00281         return static_cast<int>(in);
00282     }
00283 } // namespace fsdk
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines