nuclear@2: #include nuclear@2: #include nuclear@2: #include nuclear@2: #include nuclear@2: #include nuclear@2: #include nuclear@2: #include nuclear@2: #include "srv.h" nuclear@2: nuclear@2: void *frame_proc(void *arg); nuclear@2: int save_image(const char *fname, unsigned char *pixels, int xsz, int ysz); nuclear@2: void sighandler(int s); nuclear@2: nuclear@2: int fd; nuclear@2: int width = 640; nuclear@2: int height = 480; nuclear@2: int framerate = 30; nuclear@2: unsigned char *frame; nuclear@2: int done; nuclear@2: int frame_available; nuclear@2: pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; nuclear@2: pthread_cond_t condvar = PTHREAD_COND_INITIALIZER; nuclear@2: nuclear@2: int main(int argc, char **argv) nuclear@2: { nuclear@2: char *devfile = "/dev/video0"; nuclear@2: pthread_t thread; nuclear@2: nuclear@2: if(argv[1]) { nuclear@2: devfile = argv[1]; nuclear@2: } nuclear@2: nuclear@2: signal(SIGINT, sighandler); nuclear@2: signal(SIGQUIT, sighandler); nuclear@2: signal(SIGSEGV, sighandler); nuclear@2: nuclear@2: if(srv_init(2828) == -1) { nuclear@2: return 1; nuclear@2: } nuclear@2: nuclear@2: if(!(frame = malloc(width * height * 4))) { nuclear@2: perror("failed to allocate frame"); nuclear@2: return 1; nuclear@2: } nuclear@2: nuclear@2: if((fd = wcam_open(devfile, width, height, framerate)) == -1) { nuclear@2: fprintf(stderr, "failed to open video device: %s\n", devfile); nuclear@2: return 1; nuclear@2: } nuclear@2: wcam_start(fd); nuclear@2: nuclear@2: if(pthread_create(&thread, 0, frame_proc, 0) == -1) { nuclear@2: fprintf(stderr, "failed to create frame processing thread\n"); nuclear@2: return 1; nuclear@2: } nuclear@2: nuclear@2: while(!done) { nuclear@2: int i, res; nuclear@2: int *sock = srv_sockets(); nuclear@2: int num_sockets = srv_num_sockets(); nuclear@2: int maxfd = srv_max_socket(); nuclear@2: fd_set rdset; nuclear@2: nuclear@2: if(fd > maxfd) maxfd = fd; nuclear@2: nuclear@2: FD_ZERO(&rdset); nuclear@2: FD_SET(fd, &rdset); nuclear@2: nuclear@2: for(i=0; i