4605|9

82

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

mini2440+WCE+OV9650采集图像问题 [复制链接]

//预览和播放
BYTE gamma_enable = (BYTE)1;
BOOL ret;
ret = DeviceIoControl(hCam,IOCTL_CAM_SETGAMMA,NULL,0,&gamma_enable,1,NULL,NULL);        //启动预览
if(!ret)
    AfxMessageBox(_T("启动预览失败!"));
ret = DeviceIoControl(hCam,IOCTL_CAM_CONT,NULL,0,NULL,0,NULL,NULL);
                                                                               //播放。预览和播放采用的都是
if(!ret)                                                                       //按天嵌公司的源码,但就是
    AfxMessageBox(_T("启动播放失败!"));                                          //没有图像播放出来,不知为何



//此外,我还想读取读“最后一帧数据”
int width=640;
int height=480;//可有人知道OV9650默认输出分辨率是多少?
BYTE *image=(BYTE*)malloc(width*height*2);  //RGB565数据格式
memset(image,0,width*height*2);   //先设定为0
ret=DeviceIoControl(hCam,CAM_IOCTL_SAMSUNG_CAM_PR,NULL,NULL,(PBYTE)&image,width*height*2,NULL,NULL);
//返回为1,正确。我看到很多大侠将image设置为结构体PINGPONG,我不明白,就直接设定为
                                                               //BYTE *image=(BYTE*) malloc(width*height*2)
////ret=DeviceIoControl(hCam,CAM_IOCTL_GET_LATEST_FRAME,NULL,NULL,(PBYTE)&image,width*height*2,NULL,NULL);
       //本来一直想用CAM_IOCTL_GET_LATEST_FRAME控制字,但一直返回0,不知何故。
if(!ret)
        AfxMessageBox(_T("读取最后一帧失败!"));
memcpy(test,image,width*height*2);   //运行到此处总是数据异常(data abort),不知何故。



麻烦各位大侠发表自己的意见,感激不尽。

最新回复

我的解决了 http://topic.eeworld.net/u/20100520/19/34106e0d-9866-4348-b0fa-b7820a8f2a99.html?62598  详情 回复 发表于 2010-5-31 19:33
点赞 关注

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
开发板直接由驱动和应用源码了。呵呵。不用搞的了。
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
“本来一直想用CAM_IOCTL_GET_LATEST_FRAME控制字,但一直返回0,不知何故。”

另外“memcpy(test,image,width*height*2); //运行到此处总是数据异常(data abort),不知何故。”

我也不知道,一块学习,期待高手解答。

另外想问一下你,“ret=DeviceIoControl(hCam,CAM_IOCTL_SAMSUNG_CAM_PR,NULL,NULL,(PBYTE)&image,width*height*2,NULL,NULL);”这是直接从内核缓冲区传递数据,你用的是wince5.0还是6.0?
在6.0 下能这样用吗?

多谢,多谢!
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(中级)

4
 
void COV9650_TestDlg::OnBnClickedPreview()                //预览按钮的响应函数
{
        // TODO: 在此添加控件通知处理程序代码
        if(m_isPlay)
        {
                SetDlgItemText(IDC_PREVIEW,_T("Preview"));                //设置按钮显示
                Stop();
                GetDlgItem(IDC_Close)->Invalidate(TRUE);
                m_isPlay=FALSE;
        }
        else
        {
                SetDlgItemText(IDC_PREVIEW,_T("Stop"));                //设置按钮显示
                Play();
                m_isPlay=TRUE;
        }
}

void COV9650_TestDlg::OnBnClickedClose()
{
        // TODO: 在此添加控件通知处理程序代码
        BOOL ret;
        if(m_isPlay)                        //如果正在播放
                Stop();                                //停止播放
        ret = DeviceIoControl(hCam,IOCTL_CAM_HIDE,NULL,0,NULL,0,NULL,NULL);                        //隐藏信息
        if(!ret)
                AfxMessageBox(_T("hide info false!"));
        CloseHandle(hCam);                //关闭设备句柄
        CDialog::OnCancel();        //关闭对话框
}

BYTE gamma_enable = (BYTE)1;
BYTE gamma_disable = (BYTE)2;

void COV9650_TestDlg::Play()
{
        BOOL ret;
        ret = DeviceIoControl(hCam,CAM_IOCTL_SAMSUNG_PREVIEW_START,NULL,0,NULL,0,NULL,NULL);                //启动预览功能
        if(!ret)
                AfxMessageBox(_T("Start preview false!"));

        ret = DeviceIoControl(hCam,IOCTL_CAM_CONT,NULL,0,NULL,0,NULL,NULL);                //开始播放
        if(!ret)
                AfxMessageBox(_T("Start play video false!"));
}

void COV9650_TestDlg::Stop()
{
        BOOL ret;
        ret = DeviceIoControl(hCam,IOCTL_CAM_SETGAMMA,NULL,0,&gamma_disable,1,NULL,NULL);                //关闭预览功能
        if(!ret)
                AfxMessageBox(_T("Stop preview false!"));
        ret = DeviceIoControl(hCam,IOCTL_CAM_STOP,NULL,0,NULL,0,NULL,NULL);                //停止播放
        if(!ret)
                AfxMessageBox(_T("Cannot stop!"));
}
你先把保存数据的那些代码注释掉,先实现预览,一步一步来。
你试试上面这个代码可不可以,我也用的天嵌的,可以播放,“ret = DeviceIoControl(hCam,CAM_IOCTL_SAMSUNG_PREVIEW_START,NULL,0,NULL,0,NULL,NULL);        ”这是我改的,功能和原来的一样。
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

5
 
同为求学者,大家一起讨论。

我看S3C6410上的硬件编解码器MFC的驱动就是用DeviceIoControl把驱动里分配的内存的指针传来传去的,所以我觉得用DeviceIoControl获得驱动里的缓存地址然后在应用程序里面读写它应该能行,但是memcpy的数据异常我也在其他场合遇到,也不明白为什么,同问一下
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

6
 
http://topic.eeworld.net/u/20100520/19/34106e0d-9866-4348-b0fa-b7820a8f2a99.html?62598
这是我发的帖子,还没解决,互相参考吧!
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

7
 
顶一下,等待高手
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

8
 
有没有高人指点一下
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

9
 
这个不是有源码的吗?
飞凌的OK2440-III 上都有源码的。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

10
 
我的解决了
http://topic.eeworld.net/u/20100520/19/34106e0d-9866-4348-b0fa-b7820a8f2a99.html?62598
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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