2636|2

74

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

急!急!关于摄像头驱动!请您指教! [复制链接]

大家好,我现在想在Linux下做一个自动驱动摄像头进行抓拍的程序!原有的摄像头驱动testcamera操作是:
    执行testcamera,然后输入c或C对抓拍的图片进行保存!我现在想实现摄像头在抓破之后自动保存图片!
    所以我对原来的程序进行了一下的修改(/*...*/为我注释掉的程序):
..........

fd_set rfds;
..........

if(tcgetattr(0, &tio)<0) {
                printf("tcgetattr fail!\n");
                goto fail;
        } else {
                c_lflag = tio.c_lflag;
                tio.c_lflag &= ~(ICANON | ECHO);
                if(tcsetattr(0, TCSAFLUSH, &tio)<0) {
                        printf("tcsetattr fail!\n");
                        goto fail;
                }
        }
       
        printf("now start capture...\n");
/*        printf("press Esc key to exit, 'c' to save picture, 'd' to enable/disable display\n");
*/
        if(capture_video) {
                if(ioctl(fd, VIDIOCCAPTURE, VIDEO_START)<0) {
                        printf("VIDIOCCAPTURE fail\n");
                        goto fail;
                }
        } else if(!cpu_type){
                if(ioctl(fd, VIDIOCCAPTURE, STILL_IMAGE)<0) {
                        printf("VIDIOCCAPTURE fail\n");
                        goto fail;
                }
        }
       
        FD_ZERO(&rfds);//将rfds内容庆龄
       
        show = 1;
        cnt  = 0;
        while(1) {
                //in pxa270, if capture still image, can do it just one time
                if(!capture_video&&cpu_type)
                        if(ioctl(fd, VIDIOCCAPTURE, STILL_IMAGE)<0) {
                                printf("VIDIOCCAPTURE fail\n");
                                break;
                        }

                FD_SET(0, &rfds);
                FD_SET(fd, &rfds);

                tv.tv_sec = 3;//3秒
                tv.tv_usec = 0;

                select(fd+1, &rfds, NULL,  NULL, &tv);
                if(FD_ISSET(0, &rfds))//若有数据读入
                  {
/*                        char cmd;
                        //printf("stdin input\n");
                        if(read(0, &cmd, 1)<0) {
                                printf("read stdin fail!\n");
                                break;
                        }
                        if(cmd=='d'||cmd=='D') {
                                show = !show;
                                printf("%s display\n", show?"enable":"disable");
                        } else if(cmd=='c'||cmd=='C') {
*/
                                printf("save picture...\n");
                                save_picture(buf);
/*
                        } else if(cmd==0x1b)
*/
                                break;
/*                } else if(FD_ISSET(fd, &rfds)) {
                        if(mmap_camera) {
#if 1
                        //just for performance test in video capturing, int(rdy)->show->int->show
                        //use read to clear ready flag in driver
                                i = read(fd, buf, 0);        //mmap camera for read, so read 0 byte to buf
                                if(i<0) {
                                        printf("read fail!%d\n", i);
                                        break;
                                }
#endif
                        } else {
                                i = read(fd, buf, image_width*image_height*2);
                                if(i<0) {
                                        fprintf(stderr, "read fail! %d\n", i);
                                        break;
                                }
                                //printf("read %d bytes\n", i);
                                cnt++;
                        }
                } else {
                        printf("wait timeout, break...\n");
                        break;
                }
*/
}
fail:
............

现在问题是:
    摄像头可以打开,但不能抓拍后自动关闭。只有从键盘输入任意键后,才能实现保存图片并退出!经过多次实验发现,是与下面程序有关:
fd_set rfds;
.................
  while(1)
{ .......

    FD_ZERO(&rfds);
.................
    FD_SET(0, &rfds);
    FD_SET(fd, &rfds);

    tv.tv_sec = 3;//3秒
    tv.tv_usec = 0;

    select(fd+1, &rfds, NULL,  NULL, &tv);


  if(FD_ISSET(0, &rfds))/*若有数据读入!经过试验,这条语句好像不能去掉,去掉后摄像头不能打开*/
  { printf("save picture...\n");
    save_picture(buf);//保存图片,前面已经定义过
    break;
  }
}

请各位高手帮忙,怎样才能实现摄像头自动打开并保存图片,然后退出!先谢谢您了!

最新回复

看来是没人回答了!不过我已经解决此问题了!  详情 回复 发表于 2007-5-21 20:32
点赞 关注

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
难道没人知道吗???
 
 

回复

48

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
看来是没人回答了!不过我已经解决此问题了!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表