3#if defined __GNUC__ && !defined CVB_SHOW_WARNINGS
4# pragma GCC system_header
12#include "../namespace.hpp"
19 #if !defined __cplusplus
20 #error CVB: Compiler must be used in C++ mode!
22 #define IMPORT(t) extern "C" t __stdcall
23 #define IMPORT_C(t) t __stdcall
24 #define CVB_API WINAPI
25#elif defined __linux__
26 #define IMPORT(t) extern "C" __attribute__((visibility("default"))) t
27 #define IMPORT_C(t) __attribute__((visibility("default"))) t
31 #error CVB: Unsupported platform
49 typedef int cvbbool_t;
50 typedef long cvbdatatype_t;
51 typedef long cvbdensity_t;
52 typedef long cvbdim_t;
53 typedef long cvbres_t;
54 typedef long cvbval_t;
55 typedef long cvblicres_t;
56 typedef unsigned char cvbuint8_t;
57 typedef short cvbint16_t;
58 typedef unsigned short cvbuint16_t;
59 typedef long cvbint32_t;
60 typedef unsigned long cvbuint32_t;
61 typedef __int64 cvbint64_t;
62 typedef unsigned __int64 cvbuint64_t;
64#define CVB_CAPI_CALL_NAME __FUNCTION__
66#elif defined __linux__
68 typedef bool cvbbool_t;
69 typedef int32_t cvbdatatype_t;
70 typedef int32_t cvbdensity_t;
71 typedef int32_t cvbdim_t;
72 typedef int32_t cvbres_t;
73 typedef int32_t cvbval_t;
74 typedef std::int32_t cvblicres_t;
75 typedef std::uint8_t cvbuint8_t;
76 typedef std::int8_t cvbint8_t;
77 typedef std::uint16_t cvbuint16_t;
78 typedef std::int16_t cvbint16_t;
79 typedef int32_t cvbint32_t;
80 typedef std::uint32_t cvbuint32_t;
81 typedef std::int64_t cvbint64_t;
82 typedef uint64_t cvbuint64_t;
84#define CVB_CAPI_CALL_NAME __FUNCTION__
87#error CVB: Unsupported platform and/or compiler!
90#define CVB_C_API_ERROR_MESSAGE(FUNCTION, CODE) \
91 std::string("C-API call failed; try getting a log by using CVB LogGUI/silogutil: ") + \
92 std::string("{\"Name\": \"") + (FUNCTION) + \
93 std::string("\", \"CVC_ERROR_CODE\": ") + std::to_string(CODE) + std::string("}")
95IMPORT(
void) ReportCVBErrorEx(cvbres_t ErrorCode,
const char *szCustomString,
const char *szContext);
97#define CVB_DEF_CAPI_X(RET, NAME, SIG) \
98 IMPORT(RET) NAME SIG; \
99 template <class... ARGS> \
100 inline RET _pp##NAME(ARGS &&...args) noexcept \
102 auto res = NAME(std::forward<ARGS>(args)...); \
103 if (!CheckErrorCode(res)) \
105 std::string functionName = std::begin(CVB_CAPI_CALL_NAME);\
106 functionName.erase(0, functionName.find("_pp") + 3); \
107 using RET_TYPE = decltype(res); \
108 ReportError<RET_TYPE>(res, functionName); \
113#define CVB_DEF_CAPI_XC(RET, NAME, SIG) \
114IMPORT_C(RET) NAME SIG; \
115template <class... ARGS> \
116inline RET _pp ## NAME(ARGS&&... args) noexcept\
118 auto res = NAME(std::forward<ARGS>(args)...); \
119 if(!CheckErrorCode(res)) \
121 std::string functionName = CVB_CAPI_CALL_NAME; \
122 functionName.erase(0, functionName.find("_pp") + 3); \
123 ReportCVBErrorEx(MakeErrorCode(res), "C-API call failed", functionName.c_str()); \
128#define CVB_DEF_CAPI(RET, NAME, SIG) \
129IMPORT(RET) NAME SIG; \
130template <class... ARGS> \
131inline RET _pp ## NAME(ARGS&&... args) noexcept\
133 return NAME(std::forward<ARGS>(args)...); \
137#define CVB_DEF_CAPI_C(RET, NAME, SIG) \
138IMPORT_C(RET) NAME SIG; \
139namespace Cvb { CVB_BEGIN_INLINE_NS namespace CExports { \
140template <class... ARGS> \
141inline RET _pp ## NAME(ARGS&&... args) noexcept\
143 return NAME(std::forward<ARGS>(args)...); \
147#define CVB_CALL_CAPI(CALL) \
148 CExports::_pp ## CALL
153#define CVB_CALL_CAPI_CHECKED(CALL) \
155 auto res = CVB_CALL_CAPI(CALL); \
156 static_assert (std::is_same<decltype(res), CExports::cvbbool_t>::value || std::is_same<decltype(res), CExports::cvbres_t>::value, \
157 "Unsupported CVB call return type"); \
158 if (!CExports::CheckErrorCode (res)) \
160 Utilities::SystemInfo::ThrowLastError(CExports::MakeErrorCode(res)); \
164typedef cvbval_t THistogram[256];
172 std::uint8_t Data4[8];
177inline bool operator==(
const cvbguid_t & lhs,
const cvbguid_t & rhs)
noexcept
179 return lhs.Data1 == rhs.Data1
180 && lhs.Data2 == rhs.Data2
181 && lhs.Data3 == rhs.Data3
182 && *
reinterpret_cast<const std::uint64_t *
>(lhs.Data4) == *
reinterpret_cast<const std::uint64_t *
>(rhs.Data4);
185inline bool operator!=(
const cvbguid_t & lhs,
const cvbguid_t & rhs)
noexcept
187 return !(lhs == rhs);
192typedef void *PIXELLIST;
194typedef cvbbool_t (__stdcall *TFProgress)(
void* pPrivate, cvbval_t StepsTotal, cvbval_t StepsDone);
196typedef void(__stdcall * PFFINALRELEASE) (
void * pBufferBase,
void * pUserData);
235 Normalize_MeanVariance = 0,
244 DT_ComplexPacked = 0x800
268 SP_Parabolic_Fast = 1,
269 SP_Parabolic_Accurate = 2,
281 VPATROT_Unknown = -1,
293typedef VPAEntry * PVPAT;
296inline cvbres_t MakeErrorCode(cvbres_t errorCode)
noexcept
301inline cvbres_t MakeErrorCode(cvbbool_t status)
noexcept
303 return status ? 0 :
static_cast<cvbres_t
>(
static_cast<cvbres_t
>(CVC_E_ERROR) | 0x80000000);
306inline cvbres_t MakeErrorCode(
const void* result)
noexcept
308 return (result !=
nullptr) ? 0 :
static_cast<cvbres_t
>(
static_cast<cvbres_t
>(CVC_E_ERROR) | 0x80000000);
311inline bool CheckErrorCode(cvbres_t errorCode)
noexcept
313 return errorCode ? false :
true;
316inline bool CheckErrorCode(cvbbool_t status)
noexcept
318 return status ? true :
false;
321inline bool CheckErrorCode(
const void* result)
noexcept
323 return result !=
nullptr;
326template <typename T, std::enable_if_t<std::is_pointer<T>::value, std::nullptr_t> =
nullptr>
327inline void ReportError(T res,
const std::string &functionName)
noexcept
329 std::string message = std::string(
"C-API call failed; returned a null pointer: ") + functionName;
330 ReportCVBErrorEx(MakeErrorCode(
static_cast<const void *
>(res)), message.c_str(), functionName.c_str());
333template <typename T, std::enable_if_t<!std::is_pointer<T>::value, std::nullptr_t> =
nullptr>
334inline void ReportError(T res,
const std::string &functionName)
noexcept
336 auto codeToReport = MakeErrorCode(res);
337 const std::string message = CVB_C_API_ERROR_MESSAGE(functionName, codeToReport & 0x7FFFFFFF);
338 ReportCVBErrorEx(codeToReport, message.c_str(), functionName.c_str());
344CVB_DEF_CAPI_X(cvbres_t,
GetLicenseInfoEx, (cvbval_t index, cvblicres_t& serialNumber, cvbbool_t& isFoundation))
345CVB_DEF_CAPI(cvbres_t,
GetMagicNumber, (
size_t index,
char* szProviderName,
size_t& providerNameBufferSize,
char* szToolId,
size_t& toolIDBufferSize,
char* szMagicNumber,
size_t& magicNumberBufferSize, cvblicres_t& serialNumber))
352CVB_DEF_CAPI_X(cvbbool_t,
CopyImageRectPlanes, (IMG imgSrc, IMG imgDst, cvbdim_t srcLeft, cvbdim_t srcTop, cvbdim_t srcRight, cvbdim_t srcBottom, cvbdim_t dstX, cvbdim_t dstY))
365CVB_DEF_CAPI_X(cvbbool_t,
CreateGenericImageDT, (cvbval_t ADimension, cvbdim_t AWidth, cvbdim_t AHeight, cvbdatatype_t Datatype, IMG & Image))
377CVB_DEF_CAPI_X(cvbbool_t ,
GetImageVPA,(IMG I, cvbdim_t Index,
void ** lpBase, PVPAT * VPAT))
379CVB_DEF_CAPI_X(cvbbool_t,
CreateNormalizedImage, (IMG I, TNormalizeMode Mode,
double TargetMeanMin,
double TargetVarianceMax, IMG & Image))
380CVB_DEF_CAPI_X(cvbbool_t,
MapTo8Bit, (IMG I, cvbbool_t CollectiveNormalization, IMG & ImgOut))
383CVB_DEF_CAPI(cvbbool_t,
LoadImageFile, (const
char * szFileName, IMG & Image))
384CVB_DEF_CAPI(cvbbool_t,
LoadImageFileW, (const
wchar_t * szFileName, IMG & Image))
386CVB_DEF_CAPI_X(cvbbool_t,
WriteImageFile, (IMG I, const
char * szFileName))
387CVB_DEF_CAPI_X(cvbbool_t,
WriteImageFileW,(IMG I, const
wchar_t * szFileName))
388CVB_DEF_CAPI_X(cvbbool_t,
WriteLossyImageFile, (IMG I,
double Quality, const
char * szFileName))
389CVB_DEF_CAPI_X(cvbbool_t,
WriteLossyImageFileW, (IMG I,
double Quality, const
wchar_t * szFileName))
392CVB_DEF_CAPI_X(cvbbool_t,
GetDatatypeMinMaxVal, (cvbdatatype_t DataType, cvbval_t & MinVal, cvbval_t & MaxVal))
395CVB_DEF_CAPI_X(cvbbool_t,
CreateConcatenatedImage, (IMG * ImgArray, std::
size_t ArrayLength, cvbbool_t ShareMemory, IMG & ImgOut))
396CVB_DEF_CAPI_X(cvbres_t,
CreateImageFromPointer, (
void * pImageMem, std::
size_t MemSize, cvbdim_t Width, cvbdim_t Height, cvbdim_t NumPlanes, cvbdatatype_t DataType, std::intptr_t PitchX, std::intptr_t PitchY, std::intptr_t PitchPlane, cvbval_t PlaneOrder[], PFFINALRELEASE ReleaseCallback,
void * pUserData, IMG & ImgOut))
397CVB_DEF_CAPI_X(cvbbool_t,
CreateImageMap, (IMG I, cvbdim_t SrcLeft, cvbdim_t SrcTop, cvbdim_t SrcRight, cvbdim_t SrcBottom, cvbdim_t DstWidth, cvbdim_t DstHeight, IMG & Image))
399CVB_DEF_CAPI_X(cvbbool_t,
CreateImageSubList, (IMG I, cvbdim_t Index, cvbval_t Count, cvbbool_t Share, IMG & Image))
400CVB_DEF_CAPI_X(cvbbool_t,
ImageHistogram, (IMG I, cvbdim_t Index, cvbdensity_t Density, TArea Area, cvbval_t* HGram))
403IMPORT(
void)
ImageToPixel (IMG I,
double XI,
double YI,
double& XP,
double& YP);
405IMPORT(
void)
PixelToImage (IMG I,
double XP,
double YP,
double& XI,
double& YI);
413CVB_DEF_CAPI(cvbbool_t,
ListPixelEx, (PIXELLIST List, cvbval_t Index,
double *Data))
415CVB_DEF_CAPI_X(cvbbool_t,
AddPixel, (PIXELLIST List, const
double *Data))
420IMPORT(cvbbool_t)
CreatePixelListFromOverlay (IMG ImgIn, cvbdim_t Dim, cvbdim_t Left, cvbdim_t Top, cvbdim_t Right, cvbdim_t Bottom, PIXELLIST& List);
423CVB_DEF_CAPI_X(cvbbool_t,
FindMaximaEx, (IMG I, cvbdim_t PlaneIndex, cvbdim_t Left, cvbdim_t Top, cvbdim_t Right, cvbdim_t Bottom, cvbdim_t Locality,
double Threshold, PIXELLIST& Maxima))
424CVB_DEF_CAPI_X(cvbbool_t,
FindSubPixelMaxima, (IMG image, cvbdim_t planeIndex, cvbdim_t left, cvbdim_t top, cvbdim_t right, cvbdim_t bottom, cvbdim_t locality,
double threshold, TSubPixelMode subPixelMode, cvbdim_t radius, PIXELLIST& maxima))
429CVB_DEF_CAPI_X(cvbbool_t,
CreatePolarImageEx, (IMG Img,
double CX,
double CY,
double Alpha0,
double AlphaTotal,
double RMin,
double RMax, IMG& ImgOut))
430CVB_DEF_CAPI_X(cvbbool_t,
InversePolarTransform,(IMG src,
double cx,
double cy,
double alpha0,
double rMin, IMG dst))
431CVB_DEF_CAPI_X(cvbbool_t,
ApplyWhiteBalance, (IMG img,
double gain_red,
double gain_green,
double gain_blue))
432CVB_DEF_CAPI_X(cvbbool_t,
CalculateWhiteBalance, (IMG img, TArea aoi,
double& gain_red,
double& gain_green,
double& gain_blue))
434CVB_DEF_CAPI_X(cvbbool_t,
IsImage, (OBJ P));
436inline
void _ppReleaseObjectVoid(
void * handle)
438 CExports::_ppReleaseObject(handle);
441inline cvbbool_t _ppLoadImageFileTyped(
const char * szFileName, IMG & Image)
443 return CExports::_ppLoadImageFile(szFileName, Image);
446inline cvbbool_t _ppLoadImageFileTyped(
const wchar_t * szFileName, IMG & Image)
448 return CExports::_ppLoadImageFileW(szFileName, Image);
451inline cvbbool_t _ppWriteImageFileTyped(IMG I,
const char * szFileName)
453 return CExports::_ppWriteImageFile(I, szFileName);
456inline cvbbool_t _ppWriteImageFileTyped(IMG I,
const wchar_t * szFileName)
458 return CExports::_ppWriteImageFileW(I, szFileName);
461inline cvbbool_t _ppWriteLossyImageFileTyped(IMG I,
double Quality,
const char* szFileName)
463 return CExports::_ppWriteLossyImageFile(I, Quality, szFileName);
466inline cvbbool_t _ppWriteLossyImageFileTyped(IMG I,
double Quality,
const wchar_t* szFileName)
468 return CExports::_ppWriteLossyImageFileW(I, Quality, szFileName);
cvbbool_t CreateMatrixTransformedImageEx(IMG ImageIn, TMatrix Matrix, IMG &ImageOut)
cvbbool_t CreateAreaAffineTransformedImage(IMG ImageIn, const TCoordinateMap &CS, const TArea &Area, IMG &ImageOut)
void PixelAreaToImage(IMG Image, TArea PixelArea, TArea &ImageArea)
void ImageToPixel(IMG Image, double ImageX, double ImageY, double &PixelX, double &PixelY)
void PixelToImage(IMG Image, double PixelX, double PixelY, double &ImageX, double &ImageY)
void ImageAreaToPixel(IMG Image, TArea ImageArea, TArea &PixelArea)
void CoordinateMapTransformArea(TArea AreaIn, TCoordinateMap CS, TArea &AreaOut)
cvbres_t GetLicenseInfoEx(cvbval_t Index, cvblicres_t &SerialNumber, cvbbool_t &IsFoundation)
cvbres_t GetMagicNumber(size_t Index, char *ProviderName, size_t &ProviderNameBufferSize, char *ToolID, size_t &ToolIDBufferSize, char *MagicNumber, size_t &MagicNumberBufferSize, cvblicres_t &SerialNumber)
cvbres_t UpdateLicenses()
cvbval_t GetMagicNumberCount()
cvbres_t UpdateLicensesDeep()
cvbval_t GetLicenseCount()
cvbbool_t GetImageCoordinates(IMG Image, TCoordinateMap &CS)
cvbdim_t ImageDimension(IMG Image)
cvbbool_t GetImageVPA(IMG Image, cvbval_t PlaneIndex, void **ppBase, PVPAT *ppVPAT)
cvbdim_t ImageWidth(IMG Image)
cvbdim_t ImageHeight(IMG Image)
cvbdatatype_t ImageDatatype(IMG Image, cvbval_t PlaneIndex)
cvbbool_t SetImageCoordinates(IMG Image, TCoordinateMap CS)
cvbbool_t AddPixel(PIXELLIST PixelList, const double *Components)
cvbval_t PixelListCount(PIXELLIST PixelList)
cvbdim_t PixelListDimension(PIXELLIST PixelList)
cvbbool_t ListPixelEx(PIXELLIST PixelList, cvbval_t Index, double *Components)
cvbbool_t CopyImageRectPlanes(IMG ImageIn, IMG ImageOut, cvbdim_t InLeft, cvbdim_t InTop, cvbdim_t InRight, cvbdim_t InBottom, cvbdim_t OutX, cvbdim_t OutY)
cvbbool_t CreateImageSubList(IMG ImageIn, cvbval_t PlaneIndex, cvbval_t NumPlanes, cvbbool_t MapImage, IMG &ImageOut)
cvbbool_t LoadImageFileW(const wchar_t *FileName, IMG &ImageOut)
TColorModel ImageColorModel(IMG Image)
cvbbool_t WriteImageFile(IMG Image, const char *FileName)
cvbbool_t WriteImageFileW(IMG Image, const wchar_t *FileName)
cvbbool_t CreateConcatenatedImage(IMG *ImageArray, size_t ArrayLength, cvbbool_t ShareMemory, IMG &ImageOut)
cvbbool_t LoadImageFile(const char *FileName, IMG &ImageOut)
cvbbool_t GetDatatypeMinMaxVal(cvbdatatype_t Datatype, cvbval_t &MinVal, cvbval_t &MaxVal)
cvbbool_t CreateGenericImageDT(cvbval_t NumPlanes, cvbval_t Width, cvbval_t Height, cvbdatatype_t Dataype, IMG &ImageOut)
cvbbool_t CreatePanoramicImageMap(IMG ImageA, IMG ImageB, TPanoramaMode PanoramaMode, IMG &ImageOut)
cvbbool_t WriteLossyImageFile(IMG Image, double Quality, const char *FileName)
cvbbool_t WriteLossyImageFileW(IMG Image, double Quality, const wchar_t *FileName)
cvbbool_t CreateImageMap(IMG ImageIn, cvbval_t InLeft, cvbval_t InTop, cvbval_t InRight, cvbval_t InBottom, cvbval_t OutWidth, cvbval_t OutHeight, IMG &ImageOut)
cvbbool_t CreateRotatedImageMap(IMG ImageIn, TVPATRotation Rotation, IMG &ImageOut)
cvbbool_t CreateDuplicateImageEx(IMG ImageIn, IMG &ImageOut)
cvbres_t CreateImageFromPointer(void *pImageMemory, size_t MemorySize, cvbdim_t Width, cvbdim_t Height, cvbdim_t NumPlanes, cvbdatatype_t DataType, intptr_t PitchX, intptr_t PitchY, intptr_t PitchPlane, const cvbval_t PlaneOrder[], PFFINALRELEASE ReleaseCallback, void *pPrivate, IMG &ImageOut)
cvbbool_t CalculateWhiteBalance(IMG Image, TArea Area, double &GainRed, double &GainGreen, double &GainBlue)
cvbbool_t ApplyWhiteBalance(IMG Image, double GainRed, double GainGreen, double GainBlue)
cvbbool_t FindMaximaEx(IMG Image, cvbval_t PlaneIndex, cvbval_t Left, cvbval_t Top, cvbval_t Right, cvbval_t Bottom, cvbval_t Locality, double Threshold, PIXELLIST &MaximaList)
cvbbool_t ImageHistogram(IMG Image, cvbval_t PlaneIndex, cvbdensity_t Density, TArea Area, THistogram &Histogram)
cvbbool_t FindSubPixelMaxima(IMG Image, cvbdim_t PlaneIndex, cvbdim_t Left, cvbdim_t Top, cvbdim_t Right, cvbdim_t Bottom, cvbdim_t Locality, double Threshold, TSubPixelMode SubPixelMode, cvbdim_t Radius, PIXELLIST &MaximaList)
cvbbool_t CreateNormalizedImage(IMG ImageIn, TNormalizeMode Mode, double TargetMeanMin, double TargetStandardDeviationMax, IMG &ImageOut)
cvbbool_t CreatePixelListFromOverlay(IMG ImageIn, cvbval_t PixelListDimension, cvbval_t Left, cvbval_t Top, cvbval_t Right, cvbval_t Bottom, PIXELLIST &PixelList)
cvbbool_t CreatePolarImageEx(IMG ImageIn, double CenterX, double CenterY, double Alpha0, double AlphaTotal, double InnerRadius, double OuterRadius, IMG &ImageOut)
cvbbool_t CreateInversePolarImage(IMG ImageIn, double Alpha0, double InnerRadius, IMG &ImageOut)
cvbbool_t ShareObject(OBJ Object)
cvbbool_t IsImage(IMG Image)
cvbbool_t ReleaseObject(OBJ &Object)
PIXELLIST CreatePixelList(cvbdim_t Dimension)
cvbbool_t TransformPixelListMatrix(PIXELLIST PixelList, TMatrix A, double OffsetX, double OffsetY)
Root namespace for the Image Manager interface.
Definition c_bayer_to_rgb.h:17
std::unique_ptr< Image > InversePolarTransform(const Image &image, Angle startAngle, double innerRadius)
Definition algorithm.hpp:195
std::unique_ptr< Image > MapTo8Bit(const Image &image, PlaneNormalization planeNormalization=PlaneNormalization::Identical)
Take an input image and scale the pixel values to fit into the 8 bit value range.
Definition algorithm.hpp:89