Пример #1
0
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;
}
Пример #2
0
void ascii_read_init() {
    webcam_init();
}
Пример #3
0
/* 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); 
}