【调试】关于300W 摄像头OV3640 实现动态分辨率调整的问题

  平台:2440 wince5.0 OK2440-III  作者:gooogleman 日期:2010-12-16

 

  关于300W 摄像头OV3640我走了很长的路,一直在摸索和纠结,犯了很多错。要是以前应该不会把战线拉那么长的,以前上班只有两个爱好,就是写技术博客和做本职研发,这一年来多了很了个开发板销售的工作,并且越做越大,建立了gooogleman嵌入式联盟,旗下拥有睿嵌工作室和gooogleman嵌入式开发板联盟两个结构,旗下招聘兼职销售有接近100人。现在大部分时间都在攻单,有些企业客户要求很多,需要解释很多产品以及开发板之间的问题,合同谈判等都需要很多心思投入,所以真的感叹销售和研发真的不能共存,差异太大了!嘿嘿,言归正传,目前还不能离职,继续整这个OV3640吧。

  昨天分别设置了设置了XGA和VGA的模式,P通道预览和C通道保存图片已经获得成功(以前以为不能这样,用C通道转换做预览,结果惨败)。可是今天我就集成到一个驱动和应用实现动态分辨率调整,本来应该只是填空问题,可是却一波三折,莫名其妙。现象一:设置成SVGA模式之后2440 立即白屏,按键等也无法响应,应该是系统崩溃死机了;现象二:设置VGA模式,预览以及拍照都没有问题,可是设置成XGA模式预览没有问题,拍照图像却是SVGA大小的,并且不成图像,是花纹,何解?后来以为是初始化OV3640 寄存器的设置有问题,可是看来看去没有什么问题,再看设置模式函数以及拍照函数实现过程,居然发现我犯了一个非常雷人的错误!下面贴代码批评分析。

  在模式设置函数里面:

//
 //--------------------2010.12.15--------------------------
 //

    if(count==1)
 {
  SetDlgItemText(IDC_START,_T("1024*768"));

  CamInfo.cam_type=CIS_OV3640;
  CamInfo.src_type=XGA;
  CamInfo.dst_x=1024;
  CamInfo.dst_y=768;
  CamInfo.dst_fmt=0;
  CamInfo.pre_x=320;
  CamInfo.pre_y=240;
  CamInfo.pre_fmt=0;
  CamInfo.win_Hoff=0;
  CamInfo.win_Voff=0;
  //Stop();
  GetDlgItem(IDC_STOP)->Invalidate(TRUE);
  GetDlgItem(IDC_paizhao)->Invalidate(TRUE);
  //m_isPlay=FALSE;
  //m_320_240=FALSE;
 }
 if(count==3)
 {
  SetDlgItemText(IDC_START,_T("800*600"));

  CamInfo.cam_type=CIS_OV3640;
  CamInfo.src_type=SVGA;
  CamInfo.dst_x=800;
  CamInfo.dst_y=600;
  CamInfo.dst_fmt=0;
  CamInfo.pre_x=320;
  CamInfo.pre_y=240;
  CamInfo.pre_fmt=0;
  CamInfo.win_Hoff=0;
  CamInfo.win_Voff=0;
  //Stop();
  GetDlgItem(IDC_STOP)->Invalidate(TRUE);
  GetDlgItem(IDC_paizhao)->Invalidate(TRUE);
  //m_isPlay=FALSE;
  //m_320_240=FALSE;
 }

 if(count==2)
 {
  SetDlgItemText(IDC_START,_T("640*480"));

  CamInfo.cam_type=CIS_OV3640;
  CamInfo.src_type=XGA;
  CamInfo.dst_x=640;
  CamInfo.dst_y=480;
  CamInfo.dst_fmt=0;
  CamInfo.pre_x=320;
  CamInfo.pre_y=240;
  CamInfo.pre_fmt=0;
  CamInfo.win_Hoff=0;
  CamInfo.win_Voff=0;
  //Stop();
  GetDlgItem(IDC_STOP)->Invalidate(TRUE);
  GetDlgItem(IDC_paizhao)->Invalidate(TRUE);
  //m_isPlay=FALSE;
  //m_320_240=FALSE;
 }
 

 //
 //---------------------------------------------------------
 //
 if((count==3)||(count>3))
  count=1;
 else
  count++;

  在拍照函数里面:

if(count==1)
 {
   
  width=1024;
  height=768;
 }
 if(count==2)
 {
   
  width=800;
  height=600;
 }
 if(count==3)
 {
   
  width=640;
  height=480;
 }

 

  嘿嘿,本来我是想利用count 来一一对应设置函数和拍照函数,可是我居然直接想对应,没有考虑到count 值在设置函数里面已经产生了变化,加了1。所以拍照函数的count必须+1 来对应。god,不断的犯低级错误,所以我不敢做不能修改的硬件工程师还是有自知之明的。

  继续修改,等下再来报告最终结果。

转载于:https://www.cnblogs.com/gooogleman/archive/2010/12/16/1907719.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值