下载

1下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 android摄像头

android摄像头.doc

android摄像头

158*****618@sina.cn
2012-06-16 0人阅读 举报 0 0 暂无简介

简介:本文档为《android摄像头doc》,可适用于工程科技领域

在android的模拟器上面调用系统的摄像机会出现异常的现象会自动退出这可能和模拟器有关模拟器无法使用系统的硬件就像重力感应和方向感应系统一样都无法使用甚至是GPS导航系统也无法使用好像有个第三方的组织已经模拟出来模拟器上使用重力感应。但是我没有真正的看到下面的这几段是一本书上面写的android上面使用模拟器的例子。这个示例将显示预览图像在图像上点击则触发拍照操作拍照成功后显示所拍的照片然后点击Start菜单可以继续拍照。首先通过OPhone开发工具(ODT)创建一个OPhone项目填写基本信息后ODT会自动创建一个srcorggoodevcameraCameraActivityjava文件和reslayoutmainxml文件。把mainxml文件内容修改为如下:viewplaincopytoclipboardprint   <xml version="" encoding="">     <LinearLayout xmlns:android="http:schemasandroidcomapkresandroid"         android:orientation="vertical"         android:layoutwidth="fillparent"         android:layoutheight="fillparent"         >         <SurfaceView android:id="idcamera"             android:layoutwidth="fillparent"             android:layoutheight="fillparent">      <ImageView android:id="idimage"          android:layoutwidth="fillparent"          android:layoutheight="fillparent">  <LinearLayout>  <xmlversion=""encoding=""><LinearLayoutxmlns:android="http:schemasandroidcomapkresandroid"android:orientation="vertical"android:layoutwidth="fillparent"android:layoutheight="fillparent"><SurfaceViewandroid:id="idcamera"android:layoutwidth="fillparent"android:layoutheight="fillparent"><ImageViewandroid:id="idimage"android:layoutwidth="fillparent"android:layoutheight="fillparent"><LinearLayout>SurfaceView用来预览图像ImageView用来显示所拍的照片。这里也需读者会问为什么要使用SurfaceView来预览图像?使用其他的View不可以吗?要回答这个问题需要了解下SurfaceView的作用关于SurfaceView的详细介绍已超出了本教程的范围我们会在后续教程中来详细介绍SurfaceView这里只做简要介绍。在通常情况下OPhone程序中的View都是在同一个GUI线程中绘制的该线程也是接收用户交互事件的线程(例如:按钮点击事件)。从另外的线程修改GUI元素是不可以的如果要迅速的更新UI显示该如何办?显然在主线程中还需要处理其他事件不适合做这件事情所以OPhone提供了SurfaceView来满足这种需求。一个SurfaceView包装一个Surface对象(通过SurfaceHolder操作该对象)而不是Canvas对象这就是关键所在Surface可以在其他线程中绘制这对于周期性更新和要求高帧率的场景来说是很有用的特别是在游戏开发中。Surface中包含了当前UI的原生数据(rawdata)在不同的软件和硬件条件下对这些数据的处理是不一样的这就可以通过一些设置来加速图形的绘制可以通过SurfaceHolder的setType函数来设置目前接收如下的参数:SURFACETYPENORMAL:用RAM缓存原生数据的普通SurfaceSURFACETYPEHARDWARE:适用于DMA(Directmemoryaccess)引擎和硬件加速的SurfaceSURFACETYPEGPU:适用于GPU加速的SurfaceSURFACETYPEPUSHBUFFERS:表明该Surface不包含原生数据Surface用到的数据由其他对象提供在Camera图像预览中就使用该类型的Surface有Camera负责提供给预览Surface数据这样图像预览会比较流畅。如果在这里设置了上面三种类型则可以发现不会出现预览图像在和Camera底层的预览机制实现有关如果对预览有特殊要求的可以现实PreviewCallback接口来自己处理。关于SurfaceView先简单介绍到这里下面来继续看看如何在代码中实现。修改CameraActivity类使其实现如下接口:viewplaincopytoclipboardprint   androidviewSurfaceHolderCallback     androidviewViewOnClickListener 原创android之摄像头用google查了一下camera方面的资料前几页的检索内容居然一模一样的真是浪费时间严重鄙视一下。既然要用到硬件肯定要牵涉到权限在Mainifestxml中加入camera的权限:<usespermissionandroid:name="androidpermissionCAMERA"><usespermission><usesfeatureandroid:name="androidhardwarecamera"><usesfeatureandroid:name="androidhardwarecameraautofocus">调用camera最简单的办法是调用系统的功能,然后通过onActivityResult方法获得图像数据。不是太习惯用android的xml配置文件但是为了代码简单先加一个layoutxml<xmlversion=""encoding=""><LinearLayoutxmlns:android="http:schemasandroidcomapkresandroid"   android:orientation="vertical"android:layoutwidth="fillparent"   android:layoutheight="fillparent">   <TextViewandroid:text="CameraDemo"android:id="idTextView"      android:layoutwidth="fillparent"android:layoutheight="wrapcontent"><TextView>   <RelativeLayoutandroid:id="idFrameLayout"android:layoutweight=""      android:layoutwidth="fillparent"android:layoutheight="fillparent"><RelativeLayout>   <Buttonandroid:text="test"android:id="idButton"      android:layoutwidth="wrapcontent"android:layoutheight="wrapcontent"android:layoutgravity="center"><Button><LinearLayout>系统camera的uri为:androidmediaactionIMAGECAPTUREfinalintTAKEPICTURE=ImageViewivprivatevoidtest(){    iv=newImageView(this)    ((FrameLayout)findViewById(RidFrameLayout))addView(iv)    ButtonbuttonClick=(Button)findViewById(RidButton)    buttonClicksetOnClickListener(newOnClickListener(){         Override         publicvoidonClick(Viewarg){            startActivityForResult(newIntent("androidmediaactionIMAGECAPTURE"),TAKEPICTURE)         }                  })}protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){      if(requestCode==TAKEPICTURE){         if(resultCode==RESULTOK){            Bitmapb=(Bitmap)datagetExtras()get("data")            ivsetImageBitmap(b)         }      }}系统功能很简单呵呵不过不能满足俺小小的控制欲看看camera类能干些什么。首先扫描了一下camera感觉camera主要是用到几个接口:需要SurfaceHolder类来显示图像并获取SurfaceHolder类传递给Camera,Camera以后通过该Holder对图像进行处理。所以程序中需要SurfaceView子类并实现SurfaceHolderCallback 接口:  publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,intheight)  publicvoidsurfaceCreated(SurfaceHolderholder)  publicvoidsurfaceDestroyed(SurfaceHolderholder)如:publicclassPreviewextendsSurfaceViewimplementsSurfaceHolderCallback拍摄相片主要用到如下方法:publicfinalvoidtakePicture(ShutterCallbackshutter,PictureCallbackraw,PictureCallbackjpeg)方法中的参数是几个回调接口:①ShutterCallback   voidonShutter()拍照时调用该接口用于按下拍摄按钮后播放声音等操作 ②PictureCallback  voidonPictureTaken(bytedata,Cameracamera)拍照时调用该接口data为拍摄照片数据camera为Camera类自身takePicture方法中有两个PictureCallback看参数名好像一个是原始数据一个是jpeg数据。还有一个预览方式PreviewCallback   voidonPreviewFrame(bytedata,Cameracamera)该接口可以获取摄像头每一帧的图像数据此外此外还有几个辅助方法:startPreview()stopPreview()previewEnabled()其它方法:①自动对焦 AutoFocusCallback   voidonAutoFocus(booleansuccess,Cameracamera) 摄像头自动对焦success表示自动对焦是否成功② ErrorCallback   voidonError(interror,Cameracamera)摄像头发生错误是调用该接口CAMERAERRORUNKNOWNCAMERAERRORSERVERDIED表示媒体服务已经当掉需要释放Camera重新启动③setParameters(Parametersparams)设置摄像头参数先来做一个最简单的测试:用来表现图像的SurfaceView子类Android的例子里面有一个直接拿过来用用:classcamerViewextendsSurfaceViewimplementsSurfaceHolderCallback{   SurfaceHoldermHolder   CameramCamera       publiccamerView(Contextcontext){      super(context)             mHolder=thisgetHolder()      mHolderaddCallback(this)      mHoldersetType(SurfaceHolderSURFACETYPEPUSHBUFFERS)   }   publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,intheight){      CameraParametersparameters=mCameragetParameters()       parameterssetPreviewSize(width,height)       mCamerasetParameters(parameters)       mCamerastartPreview()   }   publicvoidsurfaceCreated(SurfaceHolderholder){      mCamera=Cameraopen()      try{         mCamerasetPreviewDisplay(holder)      }catch(IOExceptionexception){          mCamerarelease()          mCamera=      }   }   publicvoidsurfaceDestroyed(SurfaceHolderholder){      mCamerastopPreview()       mCamerarelease()       mCamera=   }       publicvoiddraw(Canvascanvas){      superdraw(canvas)      Logd("===>","draw")   }}内容比较简单Camera的管理都跟camerView 的几个接口绑在一块。下来把View加到Active中去同时用用 takePicture方法:privatevoidtest(){   cv=newcamerView(this)   RelativeLayoutrelay=(RelativeLayout)findViewById(RidFrameLayout)   relayaddView(cv)       buttonClick=(Button)findViewById(RidButton)   buttonClicksetOnClickListener(newOnClickListener(){      publicvoidonClick(Viewarg){         cvmCameratakePicture(               newShutterCallback(){                  publicvoidonShutter(){                     Logd("===>","onShutter")                  }},               newPictureCallback(){                  publicvoidonPictureTaken(bytedata,Cameracamera){                     Logd("===>","raw:"(data=="":datalength))                  }},raw               newPictureCallback(){                  publicvoidonPictureTaken(bytedata,Cameracamera){                     Logd("===>","postview:"(data=="":datalength))                  }},postview               newPictureCallback(){                  publicvoidonPictureTaken(bytedata,Cameracamera){                     Logd("===>","jpeg:"(data=="":datalength))                  }}jpeg            )      } })} 这样所有的代码就完成了在模拟器上点击test按钮在log中可以看到:===>onShutter===>raw:===>jpeg:很奇怪的是 camerView中的 ===>draw没有输出说明View不进行绘制那么摄像图像是怎么出来的呢?源代码中是调用本地方法懒得去看C代码不想钻得太深娱乐而已。上网查了一半天也没有搞明白感觉是通过SurfaceHolder获得View的Canvas对象直接进行绘制Holder中没有View的引用当然不会再去调用View的draw方法了。最后在网上搜到文章一篇对这个原因有一点说明Copy之以防后面忘记:在通常情况下OPhone程序中的View都是在同一个GUI线程中绘制的该线程也是接收用户交互事件的线程(例如:按钮点击事件)。从另外的线程修改GUI元素是不可以的如果要迅速的更新UI显示该如何办?显然在主线程中还需要处理其他事件不适合做这件事情所以OPhone提供了SurfaceView来满足这种需求。一个SurfaceView包装一个Surface对象(通过SurfaceHolder操作该对象)而不是Canvas对象这就是关键所在Surface可以在其他线程中绘制这对于周期性更新和要求高帧率的场景来说是很有用的特别是在游戏开发中。Surface中包含了当前UI的原生数据(rawdata)在不同的软件和硬件条件下对这些数据的处理是不一样的这就可以通过一些设置来加速图形的绘制可以通过SurfaceHolder的setType函数来设置目前接收如下的参数:SURFACETYPENORMAL :用RAM缓存原生数据的普通SurfaceSURFACETYPEHARDWARE :适用于DMA(Directmemoryaccess)引擎和硬件加速的SurfaceSURFACETYPEGPU :适用于GPU加速的SurfaceSURFACETYPEPUSHBUFFERS :表明该Surface不包含原生数据Surface用到的数据由其他对象提供在Camera图像预览中就使用该类型的Surface有Camera负责提供给预览Surface数据这样图像预览会比较流畅。如果在这里设置了上面三种类型则可以发现不会出现预览图像在和Camera底层的预览机制实现有关如果对预览有特殊要求的可以现实PreviewCallback接口来自己处理 。如果想在图像上叠加一些文字等透明信息的时候总不能也像jme一样地处理吧。后面看到一篇文章介绍直接将一个View叠加到Camera上就可以了开始还不相信后面实在找不到其它办法试一试看看:在test()中加入   TextViewtv=newTextView(this)   tvsetText("test")       RelativeLayoutLayoutParamslp=newRelativeLayoutLayoutParams(ViewGroupLayoutParamsWRAPCONTENT,ViewGroupLayoutParamsWRAPCONTENT)   lpaddRule(RelativeLayoutCENTERINPARENT)   relayaddView(tv,lp)果然可以。呵呵分了一下神再回来看看Camera。既然jpeg数据有输出看看jpeg是什么内容newPictureCallback(){ publicvoidonPictureTaken(bytedata,Cameracamera){     Logd("===>","jpeg:"(data=="":datalength)) }}jpeg在jpeg的回调接口中添加内容Logd("===>","jpeg:"(data=="":datalength))cvsetVisibility(ViewINVISIBLE)ImageViewiv=newImageView(testthis)Bitmapbitmap=BitmapFactorydecodeByteArray(data,,datalength)  ivsetImageBitmap(bitmap)relayaddView(iv) 其中的test是类名另外需要把relay改成final变量:finalRelativeLayoutrelay=(RelativeLayout)findViewById(RidFrameLayout)呵呵又看到那幅熟悉的图片了帅。raw数据没有输出网上也有人提问外网被屏蔽了看不到详细的信息那就此处不表下次再说了。看看能不能设置一下参数就可以有输出了在好奇的驱使下又试了一下设置参数。从log中可以看到Parameters预设的参数:pictureformat=jpegpicturepreview=yuvsp很可惜设置为其它的参数系统都报错玩不转郁闷看来要在摄像头这一块抱太多的遗憾了。算了看看Camera最后一点功能吧获取帧数据:mCamerasetPreviewCallback(newPreviewCallback(){   publicvoidonPreviewFrame(bytedata,Cameracamera){      Logd("===>","onPreviewFrame")   }})其中的data是yuv格式的需要对其解码:staticpublicvoiddecodeYUVSP(bytergbBuf,byteyuvsp,intwidth,intheight){   finalintframeSize=width*height      if(rgbBuf==)         thrownewPointerException("buffer'rgbBuf'is")      if(rgbBuflength<frameSize*)       thrownewIllegalArgumentException("buffer'rgbBuf'size"            rgbBuflength"<minimum"frameSize*)      if(yuvsp==)       thrownewPointerException("buffer'yuvsp'is")       if(yuvsplength<frameSize*)        thrownewIllegalArgumentException("buffer'yuvsp'size"yuvsplength             "<minimum"frameSize*)    inti=,y=    intuvp=,u=,v=    inty=,r=,g=,b=    for(intj=,yp=j<heightj){         uvp=frameSize(j>>)*width         u=         v=        for(i=i<widthi,yp){             y=(xff((int)yuvspyp))            if(y<)y=            if((i)==){                 v=(xffyuvspuvp)                 u=(xffyuvspuvp)             }             y=*y             r=(y*v)             g=(y*v*u)             b=(y*u)            if(r<)r=elseif(r>)r=            if(g<)g=elseif(g>)g=            if(b<)b=elseif(b>)b=             rgbBufyp*=(byte)(r>>)             rgbBufyp*=(byte)(g>>)             rgbBufyp*=(byte)(b>>)         }     }   } 摄像头这一块android虽然给了一个接口但是实现还是各个厂家自己实现的所以不同的机型处理方式还不一致androidcamera源码分析(基于应用)这里主要是针对Ophone进行介绍的当然结合了android的源码(以下出现均为android源码)。 首先在Ophone中也是通过androidhardwareCamera类来控制摄像头设备的要使用只有通过androidhardwareCameraopen()来打开。try{mCameraDevice=androidhardwareCameraopen()}catch(RuntimeExceptione){Loge(TAG,"failtoconnectCamera",e)thrownewCameraHardwareException(e)}另外Ophone还提供了一些接口来给予回调控制Camera的状态分别是:androidhardwareCameraErrorCallback:摄像头出错的时候调用这个接口具有一个voidonError(interror,Cameracamera)函数其中前者表示数据类型取值是Camera类中的常量CAMERAERRORUNKNOWN或者是CAMERAERRORSERVICEDIED前者是不明错误后者是表示服务已经关闭在这种情况下需要释放当前的Camera对象然后再初始化一个。privatestaticfinalclassErrorCallbackimplementsandroidhardwareCameraErrorCallback{publicvoidonError(interror,androidhardwareCameracamera){if(error==androidhardwareCameraCAMERAERRORSERVERDIED){mMediaServerDied=trueLogv(TAG,"mediaserverdied")}}}androidhardwarecameraPreviewCallback:在图像预览时调用这个接口有一个voidonPreviewFrame(bytedata,Cameracamera)参数data为每帧图像的数据流。我们可以根据实际需要来实现这个接口。androidhardwareCameraShutterCallback:在图像预览的时候调用这个接口具有一个voidonShutter()可以在改函数中通知用户快门已经关闭例如播放一个声音。privatefinalclassShutterCallbackimplementsandroidhardwareCameraShutterCallback{publicvoidonShutter(){mShutterCallbackTime=SystemcurrentTimeMillis()mShutterLag=mShutterCallbackTimemCaptureStartTimeLogv(TAG,"mShutterLag="mShutterLag"ms")clearFocusState()}}androidhardwareCameraPictureCallback:当拍摄相片的时候调用该接口具有一个voidonPictureTaken(bytedata,Cameracamera)函数参数和预览的一样。在android中主要有三个类实现了这个接口分别是PostViewPictureCallback、RawPictureCallback、JepgPictureCallback。我们可以根据需要定义自己需要的类。androidhardwareCameraAutoFocusCallback:当自动对焦时候调用该接口具有一个voidonAutoFocus(booleanfocused,Cameracamera)函数privatefinalclassAutoFocusCallbackimplementsandroidhardwareCameraAutoFocusCallback{publicvoidonAutoFocus(booleanfocused,androidhardwareCameracamera){mFocusCallbackTime=SystemcurrentTimeMillis()mAutoFocusTime=mFocusCallbackTimemFocusStartTimeLogv(TAG,"mAutoFocusTime="mAutoFocusTime"ms")if(mFocusState==FOCUSINGSNAPONFINISH){TakethepicturenomatterfocussucceedsorfailsNoneedtoplaytheAFsoundifwe'reabouttoplaytheshuttersoundif(focused){mFocusState=FOCUSSUCCESS}else{mFocusState=FOCUSFAIL}mImageCaptureonSnap()}elseif(mFocusState==FOCUSING){UserishalfpressingthefocuskeyPlaythefocustoneDonottakethepicturenowToneGeneratortg=mFocusToneGeneratorif(tg!=){tgstartTone(ToneGeneratorTONEPROPBEEP)}if(focused){mFocusState=FOCUSSUCCESS}else{mFocusState=FOCUSFAIL}}elseif(mFocusState==FOCUSNOTSTARTED){UserhasreleasedthefocuskeybeforefocuscompletesDonothing}updateFocusIndicator()}}还提供了放大缩小的监听器androidhardwareCameraOnZoomChangeListener。privatefinalclassZoomListenerimplementsandroidhardwareCameraOnZoomChangeListener{publicvoidonZoomChange(intvalue,booleanstopped,androidhardwareCameracamera){Logv(TAG,"Zoomchanged:value="value"stopped="stopped)mZoomValue=valueKeepmParametersuptodateWedonotgetParameteragainintakePictureIfwedonotdothis,wrongzoomvaluewillbesetmParameterssetZoom(value)WeonlycareifthezoomisstoppedmZoomingissettotruewhenwestartsmoothzoomif(stoppedmZoomState!=ZOOMSTOPPED){if(value!=mTargetZoomValue){mCameraDevicestartSmoothZoom(mTargetZoomValue)mZoomState=ZOOMSTART}else{mZoomState=ZOOMSTOPPED}}}}当取得照片的数据流后可以通过BitmapFactory的decodeByteArray()函数来解析图片。另外还可以通过Camera对象的getParameters()函数来得到一个androidhardwareCameraParameters对象Parameters提供了一些接口来设置Camera的属性:setPictureFormat(intpixelformat):设置图片的格式其取值为PixelFormatYCbCrSP、PixelFormatRGB或者PixelFormatJPEG。setPreviewFormat(intpixelformat):设置图片的预览格式取值如上。setPictureSize(intwidth,intheight):设置图片的高度和宽度单位为像素。setPreviewSize(intwidth,intheight):设置预览的高度和宽度取值如上。setPreviewFrameRate(intfps):设置图片预览的帧速。在设置好Camera的参数后可以通过函数voidstartPreview()开始预览图像、voidstopPreview()结束预览通过autoFocus(AutoFocusCallbackcb)来自动对焦最后可以通过takePicture(ShutterCallbackshutter,PictureCallbackraw,PictureCallbackjpeg)函数来拍照。该函数有三个参数分别为快门回调接口、原生图像数据接口和压缩格式图片数据接口。如果数据格式不存在的话数据流为空如果不需要实现这些接口则这些参数取值可以为。Android平台硬件调试之Camera篇   之前一段时间有幸在高通android平台上调试款camerasensor一款是OV的MYUVsensor支持jpegout同时也支持AF调试比较比较简单因为别的项目已经在使用了只是把相关的驱动移植过来就好另一款是Samsung的一款比较新的MYUVFFsensor在最新项目中要使用的本文以调试该sensor为例从底层驱动的角度分享一下高通android平台下调试camera的经验而对于高通平台camera部分的架构以及原理不做过多的介绍。   一、准备工作   从项目中看在硬件(板子)ready前软件部分是要准备好的。单独从底层驱动来看软件部分可以分为个部分一个是高通平台相关的再一个就是sensor部分的通常的做法就是把sensor相关的设定移植到高通平台的框架之中。这样就需要先拿到sensor的spec以及厂商提供的sensorregistersettingfile。Spec的用途是清楚高通平台和sensor通讯(读写寄存器)的时序以及相关参数设定而厂商提供的settingfile则是在使用camera各个功能(preview、snapshot)时候需要写入到sensor中的   本项目中高通平台为MSMXcamera为SamsungCA。从spec中知道该sensor的ICID为xIC的通信采用双字节方式另外也弄清楚了读写sensor寄存器的规则从调试角度看这些基本上够用了。另外厂商提供的settingfile其实就是寄存器列表告诉我们再什么时候将哪些寄存器写入什么值通常是一个寄存器地址再加上一个寄存器的值不过Samsung提供的是PC上调试使用的文本需要自己转换成c语言中的二维数组。从文件中看寄存器数据可以分为几个部分:初始化、IQ设定(tuning相关)、clk设定、preview设定、snapshot设定基本上有这几个就够了其他的比如调节亮度啦、设定特殊效果啦、设置白平衡啦等等都可以自己通过spec来完成。   Sensor部分的东西搞定后接下来就是修改高通camera部分的驱动了主要有:Kernal部分:、检查Sensor的电源配置并修改软件中的设定。本项目中使用共个电源。、检查并修改sensorreset设置。注意reset的时间设定务必和spec中一致否则会导致sensor无法工作。、修改IC驱动使用双字节读写的接口并完成读取sensorID的接口。这个用来检验IC通讯是否OK、导入寄存器设定分别在初始化、preview、snapshot等几个部分写入对应的寄存器值。注意:reset以及写寄存器部分一定要按照spec的规定加入一些delay否则会导致sensor工作异常User空间部分:这个部分主要是根据硬件的规格来配置VFE如sensor输出数据的格式接口方式、分辨率大小、同步信号模式等比较简单但一定要检查仔细任何一个地方不对都会导致调试失败。   到这里为止软件部分的准备已经告一段落了。   二、调试环境准备(板子出来了但sensorsample还没到位)   首先测试点的准备。   调试前就需要想好如果sensor无法工作要怎么去debug这就需要去测量一些信号比如power、reset、IC、MPCLK、HV同步信号、数据信号等要确保这些信号都可以测量到。   其次要选择软件的调试环境这里选择在ADB环境中执行高通的mmqcameratest程序来调试相关的trace都可以打印出来。   这样就万事俱备只欠sensor了。   三、调试(sensor终于拿到了)   将sensor接到板子上开机后ADB中运行调试程序preview画面并没有出来失败有点小失望本来觉得可以一气呵成的但毕竟这是一个全新的sensor任何一个地方没有想到位做到位都会导致失败。那就找原因吧。   、首先从trace得知IC已经读到了sensor的ID:xCA,这可以说明IC通讯是没有问题的   、接着检查Sensor的电源配置测量了供给sensor的个电源都是OK的。   、测量MCLK这个是提供给sensor使用的正常(MHZ)   、测量PCLK这个是sensor输出的正常(MHZ高通上限为MHZ)和寄存器中配置的一致。   、测量HV同步信号这个是sensor输出的正常。和FPS和分辨率一致。   、测量数据信号这个是sensor输出的正常。(数据信号示波器上可以看到)   这样看来sensor已经在正常工作了但为何preview画面没有出来呢?继续检查高通这边的设定。   从trace看高通的VFE已经reset并且start了但一直接没有输出preview数据这就奇怪了sensor明明已经输出了为什么VFE接收后并没有把数据吐出来呢难道这个sensor输出的数据VFE无法识别?为了验证这个问题我在另一块板子上测量了OVsensor输出数据的波形主要是MPclk、HV同步信号然后再拿来对比不过并没有发现异常只是HV同步信号有所不同主要高低的占空比不太一致会不会是这样信号的问题呢?为了进一步验证我同时测量了HV信号和数据信号这时发现OVsensor输出的数据信号是包在V帧同步信号的低电平中而SamsungCA输出的数据信号是包在V帧同步信号的高电平中会不会是因为V信号极性设置不对导致VFE没有读取到sensor输出的数据呢?重新检查了一下高通VFE的设定果然有一个参数是用来设定V信号极性的这个参数默认是ActiveLow的我这边并没有去修改它。接着把这个参数修改为ActiveHigh重新build、download后开机运行Ok了preview画面可以正常显示了。到这里为止sensor的硬件调试可以算作完成了后续的其他

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/14

android摄像头

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利