setup more proper logging and get stuff working maybe
This commit is contained in:
		
							
								
								
									
										54
									
								
								transfer.h
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								transfer.h
									
									
									
									
									
								
							| @@ -4,7 +4,24 @@ | ||||
| #include <opencv2/core/mat.hpp> | ||||
| #include <opencv2/imgcodecs.hpp> | ||||
| #include <sys/socket.h> | ||||
| #include <iostream> | ||||
| #include <logging.h> | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| struct imageHeader { | ||||
|     size_t size; | ||||
|     chrono::milliseconds timestamp; | ||||
| }; | ||||
|  | ||||
| chrono::milliseconds getMillis() { | ||||
|     // Get current time | ||||
|     const auto now = chrono::system_clock::now(); | ||||
|  | ||||
|     // Get time since epoch in milliseconds | ||||
|     const chrono::duration ms = chrono::duration_cast<chrono::milliseconds>(now.time_since_epoch()); | ||||
|  | ||||
|     return chrono::milliseconds(ms.count()); | ||||
| } | ||||
|  | ||||
| inline void serializeImage(const cv::Mat& image, std::vector<uchar>& buffer) { | ||||
|     cv::imencode(".jpg", image, buffer); | ||||
| @@ -16,9 +33,13 @@ int sendImage(int socket, const cv::Mat& image, std::vector<uchar>& buffer) { | ||||
|  | ||||
|     // first send the size of the serialized image | ||||
|     const size_t size = buffer.size(); | ||||
|     std::cout << "Buffer size: " << size << std::endl; | ||||
|     if (const ssize_t sent = send(socket, &size, sizeof(size), 0); sent == -1) { | ||||
|         perror("Error sending data"); | ||||
|     const chrono::milliseconds timestamp = getMillis(); | ||||
|     imageHeader header; | ||||
|     header.size = size; | ||||
|     header.timestamp = timestamp; | ||||
|     trace("Buffer size: ", size); | ||||
|     if (const ssize_t sent = send(socket, &header, sizeof(header), 0); sent == -1) { | ||||
|         error("Error sending data header"); | ||||
|         return -1; | ||||
|     } | ||||
|  | ||||
| @@ -26,25 +47,27 @@ int sendImage(int socket, const cv::Mat& image, std::vector<uchar>& buffer) { | ||||
|     while (totalSent < size) { | ||||
|         const ssize_t sent = send(socket, buffer.data() + totalSent, size - totalSent, 0); | ||||
|         if (sent == -1) { | ||||
|             perror("Error sending data"); | ||||
|             error("Error sending data"); | ||||
|             return -1; | ||||
|         } | ||||
|         totalSent += sent; | ||||
|         std::cout << "Packet sent (" << sent << " bytes, total " << totalSent << " bytes)" << std::endl; | ||||
|         debug("Packet sent (", sent, " bytes, total ", totalSent, " bytes)"); | ||||
|     } | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| int recvImage(int socket, std::vector<uchar>& buffer) { | ||||
|     size_t dataSize; | ||||
|  | ||||
|     // first receive the size of the image | ||||
|     ssize_t sizeReceived = recv(socket, &dataSize, sizeof(size_t), 0); | ||||
|     if (sizeReceived <= 0) { | ||||
|     imageHeader header; | ||||
|     if (ssize_t recvd = recv(socket, &header, sizeof(imageHeader), 0); recvd <= 0) { | ||||
|         error("Error receiving data header"); | ||||
|         return -1; | ||||
|     } | ||||
|  | ||||
|     std::cout << "Buffer size: " << dataSize << std::endl; | ||||
|     size_t dataSize = header.size; | ||||
|     chrono::milliseconds sentTime = header.timestamp; | ||||
|  | ||||
|     trace("Buffer size: ", dataSize); | ||||
|  | ||||
|     // resize the buffer to fit the whole image | ||||
|     buffer.resize(dataSize); | ||||
| @@ -54,18 +77,23 @@ int recvImage(int socket, std::vector<uchar>& buffer) { | ||||
|     while (totalReceived < dataSize) { | ||||
|         ssize_t bytesReceived = recv(socket, buffer.data() + totalReceived, dataSize, 0); | ||||
|         if (bytesReceived <= 0) { | ||||
|             error("Error receiving data"); | ||||
|             buffer.clear(); | ||||
|             return -1; | ||||
|         } | ||||
|         totalReceived += bytesReceived; | ||||
|         std::cout << "Packet received (" << bytesReceived << " bytes, total " << totalReceived << " bytes)" << std::endl; | ||||
|         debug("Packet received (", bytesReceived, " bytes, total ", totalReceived, " bytes)"); | ||||
|     } | ||||
|     chrono::milliseconds currentTime = getMillis(); | ||||
|  | ||||
|     chrono::milliseconds diff = currentTime - sentTime; | ||||
|     debug("Packet latency: ", diff.count(), "ms"); | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| bool applyImage(cv::Mat& image, std::vector<uchar> *src) { | ||||
|     // decode the image into an OpenCV Mat | ||||
|     cv::imdecode(*src, 0, &image); | ||||
|     cv::imdecode(*src, cv::IMREAD_UNCHANGED, &image); | ||||
|     return true; | ||||
| } | ||||
| #endif //TRANSFER_H | ||||
|   | ||||
		Reference in New Issue
	
	Block a user