6410 camera驱动之拍照设置

来源:互联网 发布:sql server数据库集群 编辑:程序博客网 时间:2024/06/09 16:54

        我们在做camera的拍照驱动时, 需要考虑到在应用程序的拍照界面, 在拍照前的帧率应该比较高而图像输出小如640x480, 这样sensor负荷才小, 否则散热不好就会变色, 在拍照那一小段时间内如500ms内, sensor要被设成帧率低尺寸大如2048x1536, 然后再设回预览模式帧率高尺寸小。

 

拍照时, 执行TakeStillPicture, 三星的源码中主要有以下代码

    SetSensorFormat(STILL);
    CameraSetRegisters(STILL_CAPTURE_BUFFER);
    CameraCaptureControl(STILL_CAPTURE_BUFFER,TRUE);
实现了拍照的开启初始化。

所以可修改如下:

 // 1, 启动AF, 等到AF完成后函数才返回
 CameraAF(TRUE);
 

// 2, 采集图片
 
    CameraCaptureControl(VIDEO_CAPTURE_BUFFER,FALSE);
    CameraCaptureControl(STILL_CAPTURE_BUFFER,FALSE);
    CameraCaptureControl(PREVIEW_CAPTURE_BUFFER,FALSE);

   //设置新的拍照分辨率
   CameraStill(); 

   SetSensorFormat(PREVIEW);
   SetSensorFormat(STILL);

   CameraSetRegisters(PREVIEW_CAPTURE_BUFFER);
   CameraSetRegisters(STILL_CAPTURE_BUFFER);
    
   CameraCaptureControl(PREVIEW_CAPTURE_BUFFER,TRUE);
   CameraCaptureControl(STILL_CAPTURE_BUFFER,TRUE);

 

这样就实现了, 拍照的初始化, 如果有闪光灯, 可以在 CameraCaptureThread 中进行开关控制,  在第1帧时打开, 在第三帧即取照片后关闭, 这样就能保证取出来的照片是在闪关时间内的, 为了体现所见即所得, 应用程序一般都是取完照片后即显示该图片1~2秒钟。

 

好, 取完照片后我们需要把sensor 设回预览模式。我注意到CameraCaptureThread ->pfnCameraHandleStillFrame(dwCameraDriverContext) -> CameraStillFrameCallback ........->FillBuffer,  那么在FillBuffer中memcpy(pImage, (void *)m_CameraHWStillBuffer.VirtAddr, dwRet)后面可以执行如下代码

 

 // 1, 关闭AF
 CameraAF(FALSE);

    CameraCaptureControl(VIDEO_CAPTURE_BUFFER,FALSE);
    CameraCaptureControl(STILL_CAPTURE_BUFFER,FALSE);
    CameraCaptureControl(PREVIEW_CAPTURE_BUFFER,FALSE);

    / /设置新的拍照分辨率
   CameraPreview(); 

    SetSensorFormat(PREVIEW);
    //SetSensorFormat(STILL);
   
    CameraSetRegisters(PREVIEW_CAPTURE_BUFFER);
    //CameraSetRegisters(STILL_CAPTURE_BUFFER);
    
    //CameraCaptureControl(STILL_CAPTURE_BUFFER,TRUE);
    CameraCaptureControl(PREVIEW_CAPTURE_BUFFER,TRUE);

即可实现由拍照分辨率变为预览分辨率。 

---amo 原创

mzy202@126.com

 

 

 

原创粉丝点击