#include #include #include #include #include #include #include "logc/log.h" #include "tomlc99/toml.h" #include "capture.h" #define config_file_path "config.toml" int main(int argc, char **argv) { FILE *fp; char errbuf[200]; char config_path[200]; sprintf(config_path, "%s/%s", getcwd(NULL, 0), config_file_path); log_info("load config from %s", config_path); fp = fopen(config_path, "r"); if (!fp) { log_error("can not open conifg file"); return -1; } toml_table_t *conf = toml_parse_file(fp, errbuf, sizeof(errbuf)); fclose(fp); if (!conf) { log_error("cannot parse - %s", errbuf); } toml_table_t *server = toml_table_in(conf, "server"); if (!server) { log_error("missing [server]"); } toml_datum_t server_0_index = toml_int_in(server, "server_0_index"); toml_datum_t server_1_index = toml_int_in(server, "server_1_index"); toml_datum_t server_2_index = toml_int_in(server, "server_2_index"); toml_datum_t server_0_port = toml_int_in(server, "server_0_port"); toml_datum_t server_1_port = toml_int_in(server, "server_1_port"); toml_datum_t server_2_port = toml_int_in(server, "server_2_port"); capture cap0(server_0_index.u.i, server_0_port.u.i); capture cap1(server_1_index.u.i, server_1_port.u.i, 320, 240, 25); capture cap2(server_2_index.u.i, server_2_port.u.i); cap0.start(); cap1.start(); cap2.start(); while (1) { usleep(1); } // while (true) // { // cap >> frame; // if (frame.empty()) // { // std::cerr << "Empty frame" << std::endl; // break; // } // // 确保图像是连续的 // if (!frame.isContinuous()) // { // frame = frame.clone().reshape(1, frame.total()); // } // // std::cout << frame.cols << ":" << frame.rows << std::endl; // // cv::imshow("realtime", frame); // // 发送帧的元数据(宽度、高度、类型等) // // 这里简单起见,只发送宽度和高度(假设类型为 CV_8UC3) // zmq::message_t header_msg(sizeof(int) * 2); // int *header_data = static_cast(header_msg.data()); // header_data[0] = frame.cols; // header_data[1] = frame.rows; // // socket.send(header_msg, zmq::send_flags::sndmore); // // 发送帧数据 // zmq::message_t frame_msg((size_t)frame.total() * frame.elemSize()); // memcpy(frame_msg.data(), frame.data, frame.total() * frame.elemSize()); // socket.send(frame_msg, zmq::send_flags::none); // // 在这里添加一些延迟,以控制帧率 // cv::waitKey(1); // } // // 关闭视频捕获和 ZMQ 套接字 // cap.release(); // socket.close(); return 0; }