Wince6.0 下Camera(OV3640) 驱动开发笔记1——基于S5PC100

    由于项目需要开始搞S5PC100的摄像头驱动,camera类型是OV3640.以前还没有做摄像头驱动,缺乏相关的经验,另外基于S5PC100的摄像头驱动代码结构又比较复杂,谁让A8的功能强大呢,功能多了强了开发起来难度自然就增大了。总之,目前的感觉是——好复杂!

   既然项目需要,那么容易要上,有困难也要上,慢慢啃吧。

   先说一下S5PC100支持输入的camera数据类型,有三种:ITU-R BT 60/656 类型,DMA(AXI 64bit interface)类型,MIPI(CSI)类型。相应的接口有两种方式:并口方式和MIPI方式。在三星官方开发板上有这两种类型的camera接口。

   看了一天官方给的camera驱动代码,发现其结构相比2440的比较复杂,总体接口分为三大部分,即S5PC100 camera控制器设置部分,摄像头操作部分(读、写、控制等),摄像头滤波器部分(主要是特殊效果处理,对这一部分还不是很清楚)。通过阅读代码发现,每一种类型的摄像头抽象出来一个类,包含了控制摄像头的各个函数,例如:

class S5K4EAGX : public CamModule
{
public:
    S5K4EAGX();   
    S5K4EAGX(ICamComm *CommIF);
    ~S5K4EAGX();   
    MODULE_STATUS Init();
    MODULE_STATUS Deinit();
    MODULE_STATUS InitSensor();
    MODULE_STATUS Power(BOOL bOnOff);
    MODULE_STATUS Standby(BOOL bActive);
    MODULE_STATUS Reset(BOOL bActive);

    MODULE_STATUS GetSupportFormat(MODULE_DESCRIPTOR *outModuleDesc);
    MODULE_STATUS SetFormatSize(CAMIF_IMG_SIZE Size);
};

  该类是对摄像头S5K4EAGX的抽象类,包括了初始化,电源管理,相关设置等。可以发现该类是CamModule的继承类,那么CamModule是一个什么类呢?从继承与被继承的知识可以知道CamModule类应该是对所有类型摄像头的抽象,其结构如下:

class CamModule : public ICamModule, public ICamModuleExtension
{
public:
    CamModule();   
    CamModule(ICamComm *CommIF);
    virtual ~CamModule();

    virtual MODULE_STATUS SetOperationMode(CAMIF_OPERATION_MODE mode);
    virtual MODULE_STATUS StartCapture();
    virtual MODULE_STATUS StopCapture();
    // Extension
    virtual MODULE_STATUS Flash();
    virtual MODULE_STATUS SetBrightness();
    virtual MODULE_STATUS Effect();
    virtual MODULE_STATUS Whitebalance();
    virtual MODULE_STATUS Framerate();   
  
protected:
    ICamComm *m_oCommIF;
    MODULE_PWR_STATUS PowerStatus;
    UINT32 SensorID;
    BOOL IsInitialize;
    CAMIF_OPERATION_MODE OperationMode;
    CAMIF_IMG_SIZE PreviewSize;
    CAMIF_IMG_SIZE StillSize;
    MODULE_DESCRIPTOR   ModuleDescriptor;
    volatile S5PC100_GPIO_REG    *m_regIOP;   
//  Properties[];   
}

  从其成员函数可以看出该类是更高层次的操作,包括设置操作方式,开始(停止)采集,设置图像效果等。该类还有两个父类ICamModule, ICamModuleExtension。通过阅读代码可知这两个类是两个虚拟类,相应代码如下:

ICamModule 

ICamModuleExtension

由此可见开发摄像头驱动的起点是从 CamModule一个继承类,类似于class S5K4EAGX : public CamModule{}。这一点有点类似于display驱动。

 好了,知道从那里下手了,接下来的就是编写OV3640的抽象类,其父类是 CamModule。

 今天就先到这里,明天编写OV3640的抽象类以及成员变量和成员函数的实现。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值