Exemple #1
0
int main(int argc,char *argv[])
{
	std::cout << "Initializing video capture device... " << std::endl;
	// start camera
	capture = cvCaptureFromCAM(0);
	if(!capture){
		std::cerr << "No camera detected!!!" << std::endl;
		return -1;
	}
	std::cout << "Done!" << std::endl;

	// Construct a signal set registered for process termination.
	boost::asio::io_service io;
	boost::asio::signal_set ctrlC(io, SIGINT, SIGTERM);
	// Start an asynchronous wait for one of the signals to occur.
	ctrlC.async_wait(ctrlC_handler);
	// io.run();

	ros::init(argc, argv, "camera");
	ros::NodeHandle nodeHandle;
	image_transport::ImageTransport it(nodeHandle);
	image_transport::Publisher pub;
	pub = it.advertise(CAMERA_IMG, 1);

	cvNamedWindow("src", 1);
	// cvStartWindowThread();

	std::cout << std::endl << "Publishing video in " << CAMERA_IMG << std::endl;

	while(true){
		IplImage *frame = cvQueryFrame(capture);
		if( !frame ){
			std::cerr << "Can't read from capture device." << std::endl;
			break;
		}
		cvShowImage("src", frame);

		sensor_msgs::ImagePtr msg = cv_bridge::CvImage(
			std_msgs::Header(),
			"bgr8",
			frame).toImageMsg();
		
		pub.publish(msg);
		io.poll();
		ros::spinOnce();

		char key = cvWaitKey( 10 );
		if( key >= 27 )
			break;
	}

	std::cout << "Stopping capture device... ";
	cvDestroyAllWindows();
	cvReleaseCapture(&capture);
	std::cout << "Stopped." << std::endl;

	return 0;
}
int sock_init(struct hostent *server, int portno){
		int netfd = socket(AF_INET, SOCK_STREAM, 0);
		/* open socket and connect to server */
		if (netfd < 0) 
				printf("ERROR opening socket");
		if (server == NULL) {
				fprintf(stderr,"ERROR, no such host\n");
				exit(0);
		}
		bzero((char *) &serv_addr, sizeof(serv_addr));
		serv_addr.sin_family = AF_INET;
		bcopy((char *)server->h_addr, 
						(char *)&serv_addr.sin_addr.s_addr,
						server->h_length);
		serv_addr.sin_port = htons(portno);
		if (connect(netfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) {
				printf("ERROR connecting to server\n");
				ctrlC(0);
				exit(-1);
		}
		return netfd;
}
Exemple #3
0
void check_char(char* feed)
{
	int i;
	char* output;
	
	switch (feed[0])
	{
		case 1:
		//	my_str("Ctrl+A pressed.\n");
			ctrlA();
			break;
		case 3: 
		//	my_str("Ctrl+C pressed.\n");
			ctrlC();
			break;
		case 5: 
		//	my_str("Ctrl+E pressed.\n"); 
			ctrlE(); 
			break;
		case 11:
		//	my_str("Ctrl+K pressed.\n");
			ctrlK();
			break;
		case 12:
		//	my_str("Ctrl+L pressed.\n");
			ctrlL();
			break;
		case 25:
		//	my_str("Ctrl+Y pressed.\n");
			ctrlY();
			break;
		case 27:
			switch (feed[2])
			{
				case 'B':
				//	my_str("Down arrow pressed.\n");
					down();
					break;
                        	case 'A':
				//	my_str("Up arrow pressed.\n");
					up();
					break;
                        	case 'D':
				//	my_str("Left arrow pressed.\n");
					left();
					break;
                        	case 'C':
				//	my_str("Right arrow pressed.\n");
					right();
					break;
			} break;
		case 8:
		//	my_str("Backspace pressed.\n");
			backspace();
			break;
		case 10:
		//	my_str("Enter pressed.\n");
			enter();
			break;
		case 127:
		//	my_str("Delete pressed.\n");
			backspace();
			break;
		default:
			my_char(feed[0]);
			gl_env.cmd[gl_env.cmdlength++] = feed[0];	
			gl_env.x++;
			break;
	}
}
int capture_and_send_image(int fd, int sockfd)
{

		enum v4l2_buf_type type;
		char camActive = 0;
		char rec;
		struct v4l2_buffer buf = {0};
		int n,i;
		char *bufferptr;
		int framesize;
		long long start, end;


		for (i = 0; i < n_buffers; ++i) {
				struct v4l2_buffer buf;

				CLEAR(buf);
				buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
				buf.memory = V4L2_MEMORY_MMAP;
				buf.index = i;

				if (-1 == xioctl(fd, VIDIOC_QBUF, &buf))
						printf("VIDIOC_QBUF");
		}

		type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
		if (-1 == xioctl(fd, VIDIOC_STREAMON, &type))
				printf("VIDIOC_STREAMON");

		while(1){

				fd_set fds;
				struct timeval tv;
				int r;

				FD_ZERO(&fds);
				FD_SET(fd, &fds);

				tv.tv_sec = 2;
				tv.tv_usec = 0;

				r = select(fd+1, &fds, NULL, NULL, &tv);
				if(-1 == r)
				{
						perror("Waiting for Frame");
						return 1;
				}
				CLEAR(buf);

				buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
				buf.memory = V4L2_MEMORY_MMAP;

				if(-1 == xioctl(fd, VIDIOC_DQBUF, &buf))
				{
						switch (errno) {
								case EAGAIN:
										continue;

								case EIO:
										/* Could ignore EIO, see spec. */

										/* fall through */

								default:
										perror("VIDIOC_DQBUF");
						}
				}
				assert(buf.index < n_buffers);

				n = write(sockfd,(char*)&buf.bytesused,4);
				if (n < 0) {
						printf("ERROR writing to socket");
						ctrlC(0);
						return -1;
				}

				bufferptr = buffers[buf.index].start;
				framesize = buf.bytesused;
				while( (n = write(sockfd,bufferptr,framesize)) != framesize){
						if (n < 0){
								printf("ERROR writing to socket");
								ctrlC(0);
								return -1;
						}
						bufferptr += n;
						framesize -= n;
				}
				n = read(sockfd,&rec,1);

				if (-1 == xioctl(fd, VIDIOC_QBUF, &buf))
						printf("VIDIOC_QBUF");  

		}
		return 0;
}