diff --git a/Emgu.CV.Extern/depthai/depthai_c.cpp b/Emgu.CV.Extern/depthai/depthai_c.cpp index 4de0c66b4e..25cd6768b3 100644 --- a/Emgu.CV.Extern/depthai/depthai_c.cpp +++ b/Emgu.CV.Extern/depthai/depthai_c.cpp @@ -8,84 +8,133 @@ Device* depthaiDeviceCreate(cv::String* usb_device, bool usb2_mode) { +#ifdef HAVE_DEPTHAI return new Device(*usb_device, usb2_mode); +#else + throw_no_depthai(); +#endif } void depthaiDeviceRelease(Device** usb_device) { +#ifdef HAVE_DEPTHAI delete* usb_device; *usb_device = 0; +#else + throw_no_depthai(); +#endif } void depthaiDeviceGetAvailableStreams(Device* usb_device, std::vector< cv::String >* availableStreams) { +#ifdef HAVE_DEPTHAI std::vector< std::string > as = usb_device->get_available_streams(); availableStreams->clear(); for (std::vector< std::string >::iterator it = as.begin(); it != as.end(); ++it) { //cv::String s(*it); availableStreams->push_back( *it ); - } + } +#else + throw_no_depthai(); +#endif } CNNHostPipeline* depthaiDeviceCreatePipeline(Device* usb_device, cv::String* config_json_str, std::shared_ptr** hostedPipelinePtr) { +#ifdef HAVE_DEPTHAI std::shared_ptr ptr = usb_device->create_pipeline(*config_json_str); *hostedPipelinePtr = new std::shared_ptr(ptr); return (*hostedPipelinePtr)->get(); +#else + throw_no_depthai(); +#endif } void depthaiCNNHostPipelineRelease(std::shared_ptr** hostedPipelinePtr) { +#ifdef HAVE_DEPTHAI delete* hostedPipelinePtr; hostedPipelinePtr = 0; +#else + throw_no_depthai(); +#endif } NNetAndDataPackets* depthaiCNNHostPipelineGetAvailableNNetAndDataPackets(CNNHostPipeline* cnnHostPipeline, bool blocking) { +#ifdef HAVE_DEPTHAI return new NNetAndDataPackets(cnnHostPipeline->getAvailableNNetAndDataPackets(blocking)); +#else + throw_no_depthai(); +#endif } int depthaiNNetAndDataPacketsGetNNetCount(NNetAndDataPackets* nnetAndDataPackets) { +#ifdef HAVE_DEPTHAI return nnetAndDataPackets->_nnetPackets.size(); +#else + throw_no_depthai(); +#endif } void depthaiNNetAndDataPacketsGetNNetArr(NNetAndDataPackets* nnetAndDataPackets, NNetPacket** packetArr) { +#ifdef HAVE_DEPTHAI for (auto i = nnetAndDataPackets->_nnetPackets.begin(); i != nnetAndDataPackets->_nnetPackets.end(); ++i) { *packetArr = (*i).get(); packetArr++; } +#else + throw_no_depthai(); +#endif } int depthaiNNetAndDataPacketsGetHostDataPacketCount(NNetAndDataPackets* nnetAndDataPackets) { +#ifdef HAVE_DEPTHAI return nnetAndDataPackets->_hostDataPackets.size(); +#else + throw_no_depthai(); +#endif } void depthaiNNetAndDataPacketsGetHostDataPacketArr(NNetAndDataPackets* nnetAndDataPackets, HostDataPacket** packetArr) { +#ifdef HAVE_DEPTHAI for (auto i = nnetAndDataPackets->_hostDataPackets.begin(); i != nnetAndDataPackets->_hostDataPackets.end(); ++i) { *packetArr = (*i).get(); packetArr++; } +#else + throw_no_depthai(); +#endif } void depthaiNNetAndDataPacketsRelease(NNetAndDataPackets** nnetAndDataPackets) { +#ifdef HAVE_DEPTHAI delete* nnetAndDataPackets; *nnetAndDataPackets = 0; +#else + throw_no_depthai(); +#endif } void depthaiHostDataPacketGetDimensions(HostDataPacket* packet, std::vector< int >* dimensions) { +#ifdef HAVE_DEPTHAI dimensions->clear(); for (auto i = packet->dimensions.begin(); i != packet->dimensions.end(); ++i) { dimensions->push_back(*i); } +#else + throw_no_depthai(); +#endif } bool depthaiHostDataPacketGetMetadata(HostDataPacket* packet, FrameMetadata* metadata) { +#ifdef HAVE_DEPTHAI auto meta = packet->getMetadata(); if (meta) { @@ -100,25 +149,37 @@ bool depthaiHostDataPacketGetMetadata(HostDataPacket* packet, FrameMetadata* met { return false; } +#else + throw_no_depthai(); +#endif } int depthaiNNetPacketGetDetectedObjectsCount(NNetPacket* packet) { +#ifdef HAVE_DEPTHAI auto sharedPtr = packet->getDetectedObjects(); return sharedPtr->detection_count; +#else + throw_no_depthai(); +#endif } void depthaiNNetPacketGetDetectedObjects(NNetPacket* packet, dai::Detection* detections) { +#ifdef HAVE_DEPTHAI auto sharedPtr = packet->getDetectedObjects(); int count = sharedPtr->detection_count; for (int i = 0; i < count; i++) { detections[i] = sharedPtr->detections[i]; } +#else + throw_no_depthai(); +#endif } bool depthaiNNetPacketGetMetadata(NNetPacket* packet, FrameMetadata* metadata) { +#ifdef HAVE_DEPTHAI auto meta = packet->getMetadata(); if (meta) { @@ -132,15 +193,26 @@ bool depthaiNNetPacketGetMetadata(NNetPacket* packet, FrameMetadata* metadata) { return false; } +#else + throw_no_depthai(); +#endif } FrameMetadata* depthaiFrameMetadataCreate() { +#ifdef HAVE_DEPTHAI return new FrameMetadata(); +#else + throw_no_depthai(); +#endif } void depthaiFrameMetadataRelease(FrameMetadata** metadata) { +#ifdef HAVE_DEPTHAI delete* metadata; *metadata = 0; +#else + throw_no_depthai(); +#endif } \ No newline at end of file diff --git a/Emgu.CV.Extern/depthai/depthai_c.h b/Emgu.CV.Extern/depthai/depthai_c.h index a9f21da497..2127e1dc26 100644 --- a/Emgu.CV.Extern/depthai/depthai_c.h +++ b/Emgu.CV.Extern/depthai/depthai_c.h @@ -14,7 +14,20 @@ #ifdef HAVE_DEPTHAI #include "depthai/device.hpp" #else +#include + static inline CV_NORETURN void throw_no_depthai() { CV_Error(cv::Error::StsBadFunc, "The library is compiled without depthai support"); } + +class NNetPacket {}; +class HostDataPacket {}; +class Device {}; +class CNNHostPipeline {}; +class FrameMetadata {}; + +namespace dai +{ + class Detection {}; +} #endif class NNetAndDataPackets