📄 cap2_net.c
字号:
#include <sys/poll.h>#include "cam.h"#include "net.h"int main(int argc, char *argv[]) { int id1 = 0, id2 = 1; int skip = 6; char ip[16] = "127.0.0.1"; int port1 = 8000, port2 = 8001; struct cam c1, c2; struct net nc1, nc2; for (;;) { int t = getopt(argc, argv, "d:f:a:p:h"); if (t == -1) { break; } switch (t) { case 'd': if (sscanf(optarg, "%d,%d", &id1, &id2) != 2) { fprintf(stderr, "error optarg: %s\n", optarg); exit(-1); } break; case 'f': if (sscanf(optarg, "%d", &t) != 1) { fprintf(stderr, "error optarg: %s\n", optarg); exit(-1); } if (t <= 0 || t > 30) { fprintf(stderr, "framerate should be (0, 30]\n"); exit(-1); } skip = (60 / t + 1) >> 1; break; case 'a': if (sscanf(optarg, "%s", ip) != 1) { fprintf(stderr, "error optarg: %s\n", optarg); exit(-1); } break; case 'p': if (sscanf(optarg, "%d,%d", &port1, &port2) != 2) { fprintf(stderr, "error optarg: %s\n", optarg); exit(-1); } break; case 'h': fprintf(stderr, "Usage: %s [option]\n" "-d n,m\tset cam id n (default 0,1)\n" "-f n\tset framerate n (default 5)\n" "-a s\tset addr s (default 127.0.0.1)\n" "-p n,m\tset port n (default 8000,8001)\n" "-h\tprint this help\n", argv[0]); return 0; case '?': break; default: fprintf(stderr, "option error: %d\n", t); exit(-1); } } if (optind != argc) { fprintf(stderr, "command line error\n"); exit(-1); } cam_init(&c1, id1); cam_init(&c2, id2); printf("using video%d video%d skip %d (framerate %f)\n", id1, id2, skip, 30.0 / skip); cam_capture(&c1); cam_capture(&c2); netc_init(&nc1, ip, port1); netc_init(&nc2, ip, port2); printf("using ip %s port %d %d\n", ip, port1, port2); int i1 = 0, i2 = 0; int j1 = skip, j2 = skip; struct pollfd ufds[2] = {{c1.fd, POLLIN}, {c2.fd, POLLIN}}; for (;;) { if (poll(ufds, 2, -1) <= 0) { fprintf(stderr, "poll error\n"); exit(-1); } if (ufds[0].revents & POLLIN) { cam_sync(&c1); cam_capture(&c1); if (++j1 >= skip) { j1 = 0; ++i1; if (net_send(c1.src, RAW_SIZE, &nc1) != RAW_SIZE) { fprintf(stderr, "netc_send error\n"); exit(-1); } } } if (ufds[1].revents & POLLIN) { cam_sync(&c2); cam_capture(&c2); if (++j2 >= skip) { j2 = 0; ++i2; if (net_send(c2.src, RAW_SIZE, &nc2) != RAW_SIZE) { fprintf(stderr, "netc_send error\n"); exit(-1); } } } fprintf(stderr, "\r%4d %4d", i1, i2); } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -