Ejemplo n.º 1
0
int main(int argc, char *argv[]) {
	pthread_t 		thread;

	/* init threads */
    g_thread_init (NULL);
    gdk_threads_init ();
    gdk_threads_enter ();

    gtk_init(&argc, &argv);

    initApp();

    appdata->program = HILDON_PROGRAM(hildon_program_get_instance());
    g_set_application_name("Webview");

    appdata->window = HILDON_WINDOW(hildon_window_new());
    hildon_program_add_window(appdata->program, appdata->window);


    create_menu(appdata->window);
    build_interface(appdata->window);

    /* Connect signal to X in the upper corner */
    g_signal_connect(G_OBJECT(appdata->window), "delete_event", G_CALLBACK(destroy), NULL);

	update_image();
	load_settings();

	gtk_widget_show_all(GTK_WIDGET(appdata->window));

	if(! start_camera(appdata->window))
	{
		g_warning("Unable to start camera\n");

		GtkWidget *failDialog = gtk_message_dialog_new(NULL,
	     		GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR,
	     		GTK_BUTTONS_OK,
	     		"Unable to start camera\n");
		gtk_dialog_run (GTK_DIALOG (failDialog));
		gtk_widget_destroy (failDialog);
	}

	if(! start_webserver())
	{
		GtkWidget *failDialog = gtk_message_dialog_new(NULL,
	     		GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR,
	     		GTK_BUTTONS_OK,
	     		"Unable to start web server.\nCheck server port is not already in use.\n");
		gtk_dialog_run (GTK_DIALOG (failDialog));
		gtk_widget_destroy (failDialog);
	}
	sleep(1);

	pthread_create(&thread, NULL, count_down_thread, NULL);

	gtk_main();

	gdk_threads_leave ();
	return( 0 );
}
CalibrationDialog::CalibrationDialog(QWidget *parent, Qt::WindowFlags flags):
    QDialog(parent, flags),
    _projector(),
    _cancel(false),
    _video_toget(this),
    _i(0),//可删
    timer(),//可删
    _success_open_camera(false),
    _success_read_pattern(false),
    _patterns_to_corner(),
    _num_pictrue(0),//第几张拍下的照片,第一张需要剔除
    _num_position(0),//一共多少个摆姿
    _current_positon(0),//初始化为第一个摆放位置
    _sum_pattern_to_corner(0)//存储所有摆放位置的图
{
    setupUi(this);
    //_patterns_to_corner.resize(42);//设置容器大小为42
    update_screen_combo();//更新所用的屏幕为哪一个,是配置文件保存的,还是所选的
    //update projector view
    _projector.set_screen(screen_combo->currentIndex());//设置要投影在第几屏幕,设置_screen变量的值(索引值:0 or 1 or 2 ...)
    position_spinBox->setValue(1);
    //初始化buf对应的image大小;可修改#######这里采集图片的大小是768*576
    _buf_image=cv::Mat(576,768,CV_8UC3);



    //start video preview
    _success_read_pattern=read_pattern();

     _projector.start();//将widget全屏显示,并且根据此时的屏幕设置bit数###################关键
     _success_open_camera=start_camera();//开启相机预览#####改写//可删


}
Ejemplo n.º 3
0
void VideoToGet::run()
{
    _init = false;
    _stop = false;
    bool success = start_camera();

    _init=true;
    if (!success)
    {
        return;
    }


    LPBYTE	lpbuf;

    short	height,width;
    long	stride;
    long no=0;
    int _is_new_picture;
    lpbuf=(unsigned char *)okGetTargetInfo(hBoard,BUFFER,no,&width,&height,&stride);

    //int i=0;ceshi
//    QTime t;
//    t.start();
//    cv::Mat _buf_image(576,768,CV_8UC3);
//    int _i=0;
    while(!_stop)
    {
        while(_can_capture)
        {
            qDebug()<<"capture"<<timer.currentTime();

            _is_new_picture=okCaptureTo(hBoard,BUFFER,0,0);//第四个参数是0;代表连续采集,即是实时采集,无回调支持

            if(_is_new_picture>0)
            {
                emit new_image(lpbuf);
                _is_new_picture=0;
                _can_capture=false;

            }
        }

    }

}
Ejemplo n.º 4
0
static int
k4w2_v4l2_start(k4w2_t ctx)
{
    k4w2_v4l2 * v4l2 = (k4w2_v4l2 *)ctx;
    CHANNEL ch;

    if (v4l2->thread)
	return K4W2_ERROR;

    v4l2->shutdown = 0;
    if (THREAD_CREATE(&v4l2->thread, k4w2_v4l2_thread_loop, ctx)) {
	VERBOSE("THREAD_CREATE() failed.");
	return K4W2_ERROR;
    }

    for (ch = ctx->begin; ch <= ctx->end; ++ch) {
	start_camera(&v4l2->cam[ch]);
    }
    return K4W2_SUCCESS;
}
void VideoInput::run()
{
    _init = false;
    _stop = false;

    bool success = start_camera();

    _init = true;
    
    if (!success)
    {
        return;
    }

    int error = 0;
    int max_error = 10;
    int warmup = 10000;
    QTime timer;
    timer.start();
    while(_video_capture && !_stop && error<max_error)
    {
        IplImage * frame = cvQueryFrame(_video_capture);
        if (frame)
        {   //ok
            error = 0;
            emit new_image(cv::Mat(frame));
        }
        else
        {   //error
            if (timer.elapsed()>warmup) {error++;}
        }
    }

    //clean up
    stop_camera();
    QApplication::processEvents();
}
Ejemplo n.º 6
0
void VideoInput::run()
{
    _init = false;
    _stop = false;

    bool success = start_camera();
    _init=true;
    if (!success)
    {
        return;
    }


    LPBYTE	lpbuf;

    short	height,width;
    long	stride;
    long no=0;
    int _is_new_picture;
    lpbuf=(unsigned char *)okGetTargetInfo(hBoard,BUFFER,no,&width,&height,&stride);

    //int i=0;ceshi
//    QTime t;
//    t.start();
//    cv::Mat _buf_image(576,768,CV_8UC3);
//    int _i=0;
    while(!_stop)
    {

        _is_new_picture=okCaptureTo(hBoard,BUFFER,0,0);//第四个参数是0;代表连续采集,即是实时采集,无回调支持
        //if(_is_new_picture>0)

        //QString ii=(QString("[%1]").arg(i));


        //QString str="C:/Users/Administrator/Desktop/111/1123"+ii+".jpg";
        //LPSTR strc=(char*)str.toStdString().data();
        if(_is_new_picture>0)
        {
            //okSaveImageFile(hBoard,strc,0,BUFFER,0,1);
            emit new_image(lpbuf);
            _is_new_picture=0;

            //ceshi

//            _i++;
//            QString ii=(QString("[%1]").arg(_i));
//            QString str="C:/Users/Administrator/Desktop/111/1"+ii+".jpg";
//            cv::imwrite(str.toStdString(),_buf_image);//写文件耗时45ms


//            int bufnum=0;
//            int row_num=_buf_image.rows;
//            int col_num=_buf_image.cols*_buf_image.channels();//此循环耗时6-7ms
//            for(int j=0;j<row_num;j++){
//                unsigned char * data = _buf_image.ptr<uchar>(j);
//                for(int i=0;i<col_num;i++){
//                    data[i]=*(lpbuf+bufnum);
//                    bufnum++;
//                }
//            }
            //cv::imwrite(str.toStdString(),_buf_image);//写文件耗时45ms
           // i++;
        }

        //qDebug()<<lpbuf;
        //qDebug( "%d\n", t.elapsed() );


    }
    //qDebug( "%d\n", t.elapsed() );

}
Ejemplo n.º 7
0
//int main(int argc,char *argv[])
int server_socket_init(void)
{
    struct sockaddr_in server_addr;
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = htonl(INADDR_ANY); 
    server_addr.sin_port = htons(PORT);
    int client_sockfd =0;
	int on = 1; 
	int need_connect = 1;

    int size;
    char buffer[MAX_BUFFER + 1];
    struct sockaddr_in client_addr;
    socklen_t len = sizeof(client_addr);

    //reigster ctrl+c /ctrl+z signal.
    signal(SIGINT, signalHandler); 
    signal(SIGTSTP, signalHandler); 

    server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if((setsockopt(server_sockfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on))) < 0) {  
        perror("setsockopt failed");  
        exit(EXIT_FAILURE);  
    }  

    bind(server_sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));
    
    /* listen */
    listen(server_sockfd, 5);
    
    #ifndef UBUNTU_HOST
        mini_car_gpio_init();
    #endif

    while(1) 
    {
        if(need_connect) {
            printf("waiting connection...\n");
            client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_addr, &len);
            need_connect = 0;
            printf("connect client ok!\n");
			start_camera();
        }

        memset(buffer, 0, MAX_BUFFER);
        size = read(client_sockfd, buffer, 4);
        // printf("Got %d bytes: %s\n", size, buffer);
        
        if(size == 0) {
            continue;
        }
        
        do_action(buffer, NULL);
        if(atoi(buffer) == MSG_STOP) {
            printf("disconnect client !\n");
            close(client_sockfd);
            client_sockfd = 0;
            need_connect = 1;
            //send_signal_to_proc(SIGINT, "mjpg_streamer");
        }
    }
    
    close(server_sockfd);
    return 0;
}