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@4: int parse_args(int argc, char **argv); nuclear@2: nuclear@4: const char *devfile = "/dev/video0"; nuclear@4: int fd = -1; nuclear@4: int port = 2828; 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: pthread_t thread; nuclear@2: nuclear@4: if(parse_args(argc, argv) == -1) { nuclear@4: return 1; nuclear@2: } nuclear@2: nuclear@2: signal(SIGINT, sighandler); nuclear@2: signal(SIGQUIT, sighandler); nuclear@2: signal(SIGSEGV, sighandler); nuclear@2: nuclear@4: if(srv_init(port) == -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@4: if(devfile) { nuclear@4: if((fd = wcam_open(devfile, width, height, framerate)) == -1) { nuclear@4: fprintf(stderr, "failed to open video device: %s\n", devfile); nuclear@4: return 1; nuclear@4: } nuclear@4: wcam_start(fd); nuclear@4: } else { nuclear@4: int i, j; nuclear@4: unsigned char *pptr = frame; nuclear@4: for(i=0; i maxfd) maxfd = fd; nuclear@4: FD_SET(fd, &rdset); nuclear@4: printf("select on socket: %d (video)\n", fd); nuclear@4: } nuclear@2: nuclear@2: for(i=0; i\n"); nuclear@4: printf(" -f,-fps \n"); nuclear@4: printf(" -d,-device \n"); nuclear@4: printf(" -p,-port \n"); nuclear@4: printf(" -novideo\n"); nuclear@4: printf(" -h,-help\n"); nuclear@4: } nuclear@4: nuclear@4: int parse_args(int argc, char **argv) nuclear@4: { nuclear@4: int i; nuclear@4: nuclear@4: for(i=1; i= 65535) { nuclear@4: fprintf(stderr, "invalid port specified: %s\n", argv[i - 1]); nuclear@4: return -1; nuclear@4: } nuclear@4: } else { nuclear@4: int help = strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "-help") == 0; nuclear@4: if(!help) fprintf(stderr, "unrecognized option: %s\n", argv[i]); nuclear@4: print_usage(argv[0]); nuclear@4: exit(help ? 0 : 1); nuclear@4: } nuclear@4: } else { nuclear@4: fprintf(stderr, "unexpected argument: %s\n", argv[i]); nuclear@4: print_usage(argv[0]); nuclear@4: return -1; nuclear@4: } nuclear@4: } nuclear@4: return 0; nuclear@4: }