#include #include #include #include #include #include #include "transfer.h" #include "logging.h" #include #include using namespace std; using boost::asio::ip::tcp; int main() { const int FRAME_DELAY_MS = 1000 / 30; // create video capture cv::VideoCapture cap = cv::VideoCapture(0); try { boost::asio::io_context io_context; tcp::resolver resolver(io_context); tcp::resolver::results_type endpoints = resolver.resolve("127.0.0.1", "8080"); cv::Mat image = cv::Mat::zeros(cv::Size(640, 480), CV_8UC3); info("Ready to connect."); // sending connection request tcp::socket socket(io_context); boost::asio::connect(socket, endpoints); info("Connected."); // create buffer for serialization vector imgbuf; while (true) { auto start_time = std::chrono::high_resolution_clock::now(); cap.read(image); trace("Sending image"); sendImage(socket, image, imgbuf); auto end_time = std::chrono::high_resolution_clock::now(); auto elapsed_time = std::chrono::duration_cast(end_time - start_time); // Calculate the remaining time to sleep auto sleep_duration = std::chrono::milliseconds(FRAME_DELAY_MS) - elapsed_time; // Sleep for the remaining duration if positive if (sleep_duration.count() > 0) { std::this_thread::sleep_for(sleep_duration); } } } catch (std::exception& e) { error(e.what()); } return 0; }