int main(int argc, char* argv[]) { static struct context ctxt = {0}; static char in_buf[WIDTH*HEIGHT*2]; static char out_buf[WIDTH*HEIGHT*2]; int seq, ret; time_t t; long last_sec; /* * setup signal */ if (signal(SIGINT, sigint_handler) == SIG_ERR) { fprintf(stderr, "unable to register signal handler\n"); exit(0); } if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) { fprintf(stderr, "unable to disable pipe error handler\n"); exit(0); } ctxt.conf.setup_mode = 0; ctxt.conf.webcam_limit = 0; ctxt.conf.webcam_port = 8081; ctxt.conf.webcam_localhost = 0; ctxt.conf.webcam_quality = 50; ctxt.conf.webcam_maxrate = 30; ctxt.conf.v4l2_palette = 8; ctxt.conf.brightness = 128; ctxt.conf.frame_limit = 30; ctxt.conf.input = 8; ctxt.conf.roundrobin_frames = 1; ctxt.conf.roundrobin_skip = 1; ctxt.conf.width = WIDTH; ctxt.conf.height = HEIGHT; ctxt.conf.video_device = "/dev/video0"; //ctxt.imgs.type assigned in vid_v4l2_start() //also type is set statically to VIDEO_PALETTE_YUV420P in v4l2_start() /* * mjpeg streaming init */ ret = webcam_init(&ctxt); if (ret == -1) { fprintf(stderr, "unable to open webcam\n"); exit(0); } printf("websocket fd = %d\n", ret); /* * webcam init */ vid_init(); ret = vid_v4l2_start(&ctxt); if (ret == -1) { fprintf(stderr, "unable to open start v4l2\n"); exit(0); } last_sec = time(NULL); for (seq = 0; !finish; seq++) { long sec; vid_next(&ctxt, in_buf); webcam_put(&ctxt, in_buf); if (last_sec != (sec = time(NULL))) { printf("%d fps\n", seq); seq = 0; last_sec = sec; } usleep(1000); //printf("webcam_put\n"); //fflush(stdout); // } vid_close(&ctxt); return 0; }
void ascii_read_init() { webcam_init(); }
/* Video Transmit loop * * only transmit Video data , fetch data from webcam , and ecoder that as YUV420 frame . */ static void *Video_Tx_loop() { unsigned int count = 0; /* init socket data*/ int Tx_socket ; struct sockaddr_in Tx_addr; if((Tx_socket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { printf("Socket Faile\n"); exit(-1); } Tx_addr.sin_family = AF_INET; Tx_addr.sin_port = htons(VIDEO_NET_PORT); Tx_addr.sin_addr.s_addr=inet_addr(NET_HOST); /* Webcam init */ sys_info.cam.handle = webcam_open(); webcam_show_info(sys_info.cam.handle); webcam_init(sys_info.cam.width, sys_info.cam.height, sys_info.cam.handle); webcam_set_framerate(sys_info.cam.handle, 15); webcam_start_capturing(sys_info.cam.handle); struct timeval t_start,t_end; double uTime =0.0; int total_size=0; struct vbuffer *webcam_buf; /* start video capture and transmit */ printf("Video Tx Looping\n"); gettimeofday(&t_start, NULL); while(sys_get_status() != SYS_STATUS_RELEASE) { /* start Tx Video */ while (sys_get_status() == SYS_STATUS_WORK) { webcam_buf = wait_webcam_data(); if (webcam_buf !=NULL) { count++; struct AVPacket *pkt_ptr = video_encoder(webcam_buf->start); /* ------------------------------------- */ /* direct display in localhost */ unsigned char *RGB_buffer = NULL; video_decoder(pkt_ptr->data, pkt_ptr->size, &RGB_buffer); RGB24_to_RGB565(RGB_buffer, RGB565_buffer, sys_info.cam.width, sys_info.cam.height); FB_display(RGB565_buffer, 0, 0, sys_info.cam.width, sys_info.cam.height); total_size += pkt_ptr->size; /* network transmit */ struct VOD_DataPacket_struct Tx_Buffer; /* Tx header */ Tx_Buffer.DataType = VOD_PACKET_TYPE_FRAME_HEADER; memcpy(&Tx_Buffer.header, pkt_ptr, sizeof(AVPacket)); sendto(Tx_socket, (char *)&Tx_Buffer, sizeof(Tx_Buffer), 0, (struct sockaddr *)&Tx_addr, sizeof(struct sockaddr_in)); /* Tx data , 1024 bit per transmit */ int offset =1024 ; int remain_size = pkt_ptr->size ; Tx_Buffer.DataType = VOD_PACKET_TYPE_FRAME_DATA; Tx_Buffer.data.ID = 0 ; while(remain_size > 0) { if (remain_size < 1024) { /* verify transmit data size*/ Tx_Buffer.data.size = remain_size ; } else { Tx_Buffer.data.size = 1024 ; } memcpy(&Tx_Buffer.data.data[0], pkt_ptr->data + Tx_Buffer.data.ID * 1024, sizeof(char) * Tx_Buffer.data.size); sendto(Tx_socket, (char *)&Tx_Buffer, sizeof(Tx_Buffer), 0, (struct sockaddr *)&Tx_addr, sizeof(struct sockaddr_in)); Tx_Buffer.data.ID ++ ; remain_size -= Tx_Buffer.data.size ; } } else { printf("webcam_read_frame error\n"); } } usleep(50000); } gettimeofday(&t_end, NULL); uTime = (t_end.tv_sec -t_start.tv_sec)*1000000.0 +(t_end.tv_usec -t_start.tv_usec); printf("Total size : %d bit , frame count : %d\n", total_size, count); printf("Time :%lf us\n", uTime); printf("kb/s %lf\n",total_size/ (uTime/1000.0)); webcam_stop_capturing(sys_info.cam.handle); webcam_release(sys_info.cam.handle); close(sys_info.cam.handle); pthread_exit(NULL); }