first attempt at networking (does not work)
This commit is contained in:
		| @@ -1,38 +1,56 @@ | ||||
| #include "ImagePacket.h" | ||||
|  | ||||
| /* | ||||
|  * Construct a packet from an OpenCV Mat, and a beginning index. It will take PACKET_SIZE bytes from the start and add | ||||
|  * it to its slice | ||||
|  */ | ||||
| ImagePacket::ImagePacket(const cv::Mat *image, const int begin) { | ||||
|     const uchar *target = &image->data[begin]; | ||||
|     // TODO: handle out of index cases, pad with zeroes. probably also instantiate our byte array with zeroes | ||||
|     for (int i = 0; i < PACKET_SIZE; i++) { | ||||
|         slice[i] = target[begin + i]; | ||||
|     } | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * Construct a packet from a raw array of unsigned chars, and a beginning index. It will take PACKET_SIZE bytes from the | ||||
|  * start and add it to its slice. This will be more useful for embedded scenarios where OpenCV will likely not be used. | ||||
|  */ | ||||
| ImagePacket::ImagePacket(const uchar *image, const int begin) { | ||||
|     this->begin = begin; | ||||
|     this->slice = new uchar[SLICE_SIZE]; | ||||
|     const uchar *target = &image[begin]; | ||||
|     // TODO: handle out of index cases, pad with zeroes. probably also instantiate our byte array with zeroes | ||||
|     for (int i = 0; i < PACKET_SIZE; i++) { | ||||
|         slice[i] = target[begin + i]; | ||||
|     for (int i = 0; i < SLICE_SIZE; i++) { | ||||
|         this->slice[i] = target[begin + i]; | ||||
|     } | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * destructor frees memory | ||||
|  */ | ||||
| ImagePacket::~ImagePacket() = default; | ||||
|  | ||||
| unsigned long ImagePacket::getBegin() const { | ||||
|     return this->begin; | ||||
| } | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * Apply the packet to an OpenCV Mat. | ||||
|  */ | ||||
| int ImagePacket::apply(const cv::Mat *image) const { | ||||
|     uchar *target = &image->data[begin]; | ||||
|     uchar *target = &image->data[this->begin]; | ||||
|     // TODO: handle out of index cases | ||||
|     for (int i = 0; i < PACKET_SIZE; i++) { | ||||
|         target[begin + i] = slice[i]; | ||||
|     for (int i = 0; i < SLICE_SIZE; i++) { | ||||
|         target[this->begin + i] = this->slice[i]; | ||||
|     } | ||||
|     // TODO: return the actual written size of the packet | ||||
|     return PACKET_SIZE; | ||||
|     return SLICE_SIZE; | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * Serialize the object into a byte array | ||||
|  */ | ||||
| void ImagePacket::serialize(char* buffer) const { | ||||
|     // TODO: keep the endianness consistent between systems | ||||
|     std::memcpy(buffer, &this->begin, sizeof(this->begin)); | ||||
|     std::memcpy(buffer + sizeof(this->begin), &this->slice, SLICE_SIZE * sizeof(uchar)); | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * Deserialize the object from a byte array | ||||
|  */ | ||||
| void ImagePacket::deserialize(char* buffer) { | ||||
|     // TODO: keep the endianness consistent between systems | ||||
|     std::memcpy(&this->begin, buffer, sizeof(this->begin)); | ||||
|     std::memcpy(this->slice, buffer + sizeof(this->begin), SLICE_SIZE * sizeof(uchar)); | ||||
| } | ||||
| @@ -2,17 +2,23 @@ | ||||
| #define IMAGEPACKET_H | ||||
| #include <opencv2/core/mat.hpp> | ||||
|  | ||||
| #define PACKET_SIZE 768 | ||||
| #define SLICE_SIZE 768 | ||||
| #define IMAGEPACKET_SIZE sizeof(int) + (SLICE_SIZE * sizeof(uchar)) | ||||
|  | ||||
| class ImagePacket { | ||||
|   public: | ||||
|     ImagePacket(const cv::Mat *image, int begin); | ||||
|     ImagePacket(const cv::Mat *image, int begin) : ImagePacket(image->data, begin) {} | ||||
|     ImagePacket(const uchar *image, int begin); | ||||
|     ~ImagePacket(); | ||||
|  | ||||
|     unsigned long getBegin() const; | ||||
|     int apply(const cv::Mat *image) const; | ||||
|  | ||||
|     void serialize(char* buffer) const; | ||||
|     void deserialize(char* buffer); | ||||
|   private: | ||||
|     int begin; | ||||
|     uchar slice[PACKET_SIZE]; | ||||
|     unsigned long begin; | ||||
|     uchar *slice; | ||||
| }; | ||||
|  | ||||
| #endif //IMAGEPACKET_H | ||||
|   | ||||
		Reference in New Issue
	
	Block a user