mtk6225平台经由ISP支持三星5.0M sensor的调试笔记

2009年曾经在mtk6225平台上调试了一款带ISP处理器的5.0M sensor 模组,在25上实现了5.0M sensor的预览拍照功能。下面是调试过程中的一些笔记:

 

一.首先要了解关于视频信号传输中H-sync /V-Sync的知识:

 

1. 分辨率:比如说640x480,就會有640 个pixel&480 line,那么每个V-sync的信号时间内就会有480个H-sync,而一个H-sync会有640个pixel。但是,每个pixel会有2 byte,所以我们会量到PCLK 在一个H-sync內的数量会有1280个。

 

2. H-sync /V-Sync的极性polarity: polarity就是资料有效的准备,比方说V-sync上的H-sync有可能在V-sync的low,也有可能在high出现。

 

 

二. 所使用的ISP处理器简介:ait838是一款isp(图像信号处理器)ic,核心是一款arm7 process,提供自动对焦,人脸识别等功能。BB通过i2c与其进行命令类的数据通信,而sensor数据则通过CCIR总线传输给BB.

 

 

 

三. mtk6225平台 camera处理流程学习

 

1.      void cam_event_ind_hdlr(ilm_struct *ilm_ptr)// This function is tohandle camera event indication.

 

    在该函数中,通过camera_capture_mem_process(&capture_mem_param)命令从lcd层获取capture数据,然后通过jpeg_encode_process(&jpg_encode)命令将这些数据软编码成jpeg格式的数据。

 

 

2.      void cam_capture_req_hdlr(ilm_struct *ilm_ptr)// This function is tohandle camera capture request.

 

(1)       该函数首先执行exit_camera_preview_process();命令退出preview流程;

 

(2)       ./* copy preview datato MMI buffer */

 

memcpy(

 

                (kal_uint8*)cam_context_p->frame_buffer_p,

 

                (kal_uint8*)cam_context_p->int_frame_buffer_p,

 

               cam_context_p->frame_buffer_size);

 

(3). /* release preview related memory */

 

       cam_release_memory();

 

 

 

3.cam_context_p->capture_buffer_p :所需存储的拍照数据指针

 

 cam_context_p->file_size :所要存储的数据大小

 

4. 在cam_open_image_file函数中执行命令

 

cam_context_p->capture_buffer_p =(kal_uint32) med_alloc_ext_mem(buffer_size);

 

来分配内存。

 

Capture数据存储指针:capture_isp_param.target_buffer_start_address= (kal_uint32) cam_context_p->capture_buffer_p;

 

camera_capture_jpeg_process(&capture_isp_param);

 

isp_capture_jpeg_data.target_buffer_start_address=isp_data->target_buffer_start_address;

 

sw_jpeg_encode_config_data.jpeg_file_start_address=isp_capture_jpeg_data.target_buffer_start_address;

 

 

 

 

 

5. camera capture后的数据传送流程:cam_context_p->intmem_start_address.

 

(1). capture_isp_param.intmem_start_address =cam_context_p->intmem_start_address =

 

       (kal_uint32) med_alloc_int_mem(cam_capture_mem[0]);//只有45k

 

   capture_isp_param.intmem_size = cam_context_p->intmem_size =(kal_uint32) cam_capture_mem[0];

 

 

 

(2). file_size = camera_capture_jpeg_process(&capture_isp_param);//jpeg编码后的文件大小

 

 

 

(3).isp_capture_jpeg_data.intmem_start_address=isp_data->intmem_start_address;

 

      isp_capture_jpeg_data.intmem_size=isp_data->intmem_size;

 

      

 

(4).    intmem_init((kal_uint32*) isp_capture_jpeg_data.intmem_start_address,

 

                                  isp_capture_jpeg_data.intmem_size);

 

                                  

 

(5).sw_jpeg_encode_config_data.intmem_start_address=isp_capture_jpeg_data.intmem_start_address;//将所获取的capture原始数据地址指针赋给软编码的起始地址

 

 

 

 

 

四.调试关键点

 

1. 首先调通I2C通讯,必须确保BB与ISP的I2C通讯正常;

 

2.  重新定义#defineMAX_CAM_FILE_BUFFER_LEN  (3150*1024)    /* 2700kb for 5.0M*/

 

 

 

3.仿照camera_capture_jpeg_process函数,创建一个新函数,在该函数中对获取的数据直接存储,而不经过jpeg编码流程(由于ait838传输过来的已经是jpeg格式的数据)。

 

注意:

 

(1)       在该函数中,要设置:

 

ENABLE_CAMERA_OUTPUT_TO_MEM;//ISP输出至Memory,

 

SET_CAMERA_CAPTURE_MODE

 

 

 

/*** Capture,等待VSYNC中断**/      

 

 

 

(2).在capture完成后,要DISABLE_CMOS_SESNOR;//关闭sensor信号。

 

 

 

(3).此时,获取的capture的数据已经存储在isp_data->target_buffer_start_address中;

 

然后读取这些数据,通过0xff ,0xd8判断文件头,0xff ,0xd9判断jpeg文件尾及其长度。

 

 

 

 

 

(4)最后,通过kal_int32 cam_close_image_file(kal_uint32 size)保存文件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值