2440/2416/6410/S5PV210之wince+android系统驱动开发者

等待新发生的事情

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

  平台: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,不断的犯低级错误,所以我不敢做不能修改的硬件工程师还是有自知之明的。

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

posted on 2010-12-16 11:34  gooogleman  阅读(1753)  评论(2编辑  收藏  举报