• 4503阅读
  • 0回复

QT4进行V4L摄像头编程时的疑问 [复制链接]

上一主题 下一主题
离线yanyanzhou
 
只看楼主 倒序阅读 楼主  发表于: 2010-05-29
本人使用的是QT4编译时红色部分出错,应该格式不正确。请问各位达人应该怎么办?
void * camera(void * pram)
{
    QImage image;
    QFrame * camframe = (QFrame *)pram;
    QRect rect = camframe->frameRect();//
    int w = rect.width();
    int h = rect.height();
    QPainter p(camframe);
    QRgb * point;
    int fb_bpp = 32;
    int a,r, g, b;
    int i = 0;
    int x, y;
    int frame = 0;
    uchar *buffer;
    //printf("camera started OK!\n");
image.create(width, height, fb_bpp, 0, QImage::IgnoreEndian);
    v4lopen(&video);
    //printf("the value of video->fd is %d\n",video.fd);
    //printf("v4lopen is ok!\n");
    if( v4lgetcapability(&video) <0 )
    {
       perror ( "v4lgetcapability");
       exit(1);
    }//获取设备属性
    //printf("askdfalskjflakjs\n");
    if ( v4lgetpicture(&video) <0 )
    {
       perror( "v4lgetpicture");
       exit(1);
    }//获取影像视窗信息
    if(v4lsetpicture(&video) < 0)
    {
       perror("v4lsetpicture");
       exit(1);
    }//设置图像信息
    if( v4lgrabinit(&video,width,height)<0)
    {
       perror( "v4lgrabinit");
        exit(1);
    }//初始化设备,定义获取的影像的大小
    if( v4lmmap(&video) <0 )
    {
       perror( "v4lmmap");
       exit(1);b
    }//内存映射
    if( v4lgrabstart(&video,frame) < 0)
    {
       perror( "v4lgrabstart");
       exit(1);
    }//开始获取影像
     //printf("askdfalskjflakjs\n");
    uchar *tmp = (uchar*)malloc(width*height*4);
     //getQImage(img);
    while(1)
    {
       while(v4lsync(&video,frame))
       {
          perror("waite");
       }//等待传完一帧
    //printf("inter while\n");
    buffer = (uchar*)v4lgetaddress(&video,frame);//得到这一帧的地址
    //buffer给出了图像的首地址,你可以选择将图像显示或保存传送......
    //图像的大小为 width*height*3     这里最好建立新线程或者进程
    //printf("get buffer ok\n");
    for(i = 0;i < width*height;i++)
    {
       tmp[i*4+0] = buffer[i*3+0];
       tmp[i*4+1] = buffer[i*3+1];
       tmp[i*4+2] = buffer[i*3+2];
       tmp[i*4+3] = 130;
    }
QImage img(tmp,width,height,32,NULL,0,QImage::LittleEndian);
    //LittleEndian则是低地址存放最低有效字节
    //printf("for is ok\n");
    p.drawImage(0,0,img);//如果图片需要被转换为像素映射
    //printf("brightness value is %d\n",brightness);
    if(Setting)
    {
       v4lsetpicture(&video);
       Setting = 0;
    }
    if(bCapture)
    {
       writeImageToFile(buffer);
       bCapture = 0;
    }        
    frame = (frame+1)%2;//下一帧的frame
    if ( v4lcapture(&video,frame) < 0)
    {
       perror( "v4lcapture");
       exit(1);
    }//获取下一帧
    }
    pthread_exit(NULL);
}
快速回复
限100 字节
 
上一个 下一个