﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-任我行-随笔分类-MTK</title><link>http://www.cppblog.com/oosky/category/14936.html</link><description>一天一个脚印......
&lt;br&gt;每日一句: &lt;script language="javascript" charset="utf-8" src="http://sl.iciba.com/spdshow.php"&gt;&lt;/script&gt;</description><language>zh-cn</language><lastBuildDate>Wed, 15 Sep 2010 09:07:31 GMT</lastBuildDate><pubDate>Wed, 15 Sep 2010 09:07:31 GMT</pubDate><ttl>60</ttl><item><title>调试5.0M sensor模组的笔记(转载)</title><link>http://www.cppblog.com/oosky/archive/2010/09/15/126672.html</link><dc:creator>任我行</dc:creator><author>任我行</author><pubDate>Wed, 15 Sep 2010 08:58:00 GMT</pubDate><guid>http://www.cppblog.com/oosky/archive/2010/09/15/126672.html</guid><wfw:comment>http://www.cppblog.com/oosky/comments/126672.html</wfw:comment><comments>http://www.cppblog.com/oosky/archive/2010/09/15/126672.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/oosky/comments/commentRss/126672.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/oosky/services/trackbacks/126672.html</trackback:ping><description><![CDATA[<p>详细出处：<a href="http://www.52rd.com/Blog/Detail_RD.Blog_bmw7_24676.html#41074">http://www.52rd.com/Blog/Detail_RD.Blog_bmw7_24676.html#41074</a><br><br>&nbsp;&nbsp; 在25平台上调试了一款带ISP处理器的5.0M sensor 模组，在25上实现了5.0M sensor的预览拍照功能。下面是调试过程中的一些笔记：</p>
<p>一.关于H-sync /V-Sync的知识：</p>
<p>1. 分辨率：比如说640x480,就會有640 个pixel &amp;480 line，那么每个V-sync的信号时间内就会有480个H-sync，而一个H-sync会有640个pixel。但是,每个pixel会有2 byte，所以我们会量到PCLK 在一个H-sync內的数量会有1280个。</p>
<p>2. H-sync /V-Sync的极性polarity： polarity就是资料有效的准备，比方说V-sync上的H-sync有可能在V-sync的low,也有可能在high出现。</p>
<p>&nbsp;</p>
<p>二. 所使用的ISP处理器简介：XXX838是一款isp（图像信号处理器）ic，核心是一款arm7 process，提供自动对焦，人脸识别等功能。BB通过i2c与其进行命令类的数据通信，而sensor数据则通过CCIR总线传输给BB.</p>
<p>&nbsp;</p>
<p>三. 25平台 camera处理流程学习</p>
<p>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void cam_event_ind_hdlr(ilm_struct *ilm_ptr)// This function is to handle camera event indication.</p>
<p>&nbsp;&nbsp;&nbsp; 在该函数中，通过camera_capture_mem_process(&amp;capture_mem_param)命令从lcd层获取capture数据，然后通过jpeg_encode_process(&amp;jpg_encode)命令将这些数据软编码成jpeg格式的数据。</p>
<p>&nbsp;&nbsp;</p>
<p>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void cam_capture_req_hdlr(ilm_struct *ilm_ptr)// This function is to handle camera capture request.</p>
<p>（1）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 该函数首先执行exit_camera_preview_process();命令退出preview流程；</p>
<p>（2）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ./* copy preview data to MMI buffer */</p>
<p>memcpy(</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (kal_uint8*) cam_context_p-&gt;frame_buffer_p,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (kal_uint8*) cam_context_p-&gt;int_frame_buffer_p,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cam_context_p-&gt;frame_buffer_size);</p>
<p>（3）. /* release preview related memory */</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cam_release_memory();</p>
<p>&nbsp;&nbsp;</p>
<p>3.cam_context_p-&gt;capture_buffer_p ：所需存储的拍照数据指针</p>
<p>&nbsp; cam_context_p-&gt;file_size ：所要存储的数据大小</p>
<p>4. 在cam_open_image_file函数中执行命令</p>
<p>cam_context_p-&gt;capture_buffer_p = (kal_uint32) med_alloc_ext_mem(buffer_size);</p>
<p>来分配内存。</p>
<p>Capture数据存储指针：capture_isp_param.target_buffer_start_address = (kal_uint32) cam_context_p-&gt;capture_buffer_p;</p>
<p>camera_capture_jpeg_process(&amp;capture_isp_param);</p>
<p>isp_capture_jpeg_data.target_buffer_start_address=isp_data-&gt;target_buffer_start_address;</p>
<p>sw_jpeg_encode_config_data.jpeg_file_start_address=isp_capture_jpeg_data.target_buffer_start_address;</p>
<p>&nbsp;</p>
<p>&nbsp;5. camera capture后的数据传送流程：cam_context_p-&gt;intmem_start_address.</p>
<p>&nbsp; （1）.&nbsp; capture_isp_param.intmem_start_address = cam_context_p-&gt;intmem_start_address =</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (kal_uint32) med_alloc_int_mem(cam_capture_mem[0]);//只有45k</p>
<p>&nbsp;&nbsp;&nbsp; capture_isp_param.intmem_size = cam_context_p-&gt;intmem_size = (kal_uint32) cam_capture_mem[0];</p>
<p>&nbsp; （2）. file_size = camera_capture_jpeg_process(&amp;capture_isp_param); //jpeg编码后的文件大小</p>
<p>&nbsp; （3）.isp_capture_jpeg_data.intmem_start_address=isp_data-&gt;intmem_start_address;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isp_capture_jpeg_data.intmem_size=isp_data-&gt;intmem_size;</p>
<p>&nbsp; （4）.&nbsp;&nbsp;&nbsp; intmem_init((kal_uint32 *) isp_capture_jpeg_data.intmem_start_address,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isp_capture_jpeg_data.intmem_size);</p>
<p>&nbsp; （5）.sw_jpeg_encode_config_data.intmem_start_address=isp_capture_jpeg_data.intmem_start_address; //将所获取的capture原始数据地址指针赋给软编码的起始地址</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>四.调试关键点</p>
<p>1. 首先调通I2C通讯，必须确保BB与ISP的I2C通讯正常；</p>
<p>2.&nbsp; 重新定义#define MAX_CAM_FILE_BUFFER_LEN&nbsp;&nbsp; (3150*1024)&nbsp;&nbsp;&nbsp; /* 2700kb for 5.0M */</p>
<p>&nbsp;</p>
<p>3.仿照camera_capture_jpeg_process函数，创建一个新函数，在该函数中对获取的数据直接存储，而不经过jpeg编码流程（由于XXX838传输过来的已经是jpeg格式的数据）。</p>
<p>注意：</p>
<p>（1）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在该函数中，要设置：</p>
<p>ENABLE_CAMERA_OUTPUT_TO_MEM;//ISP输出至Memory，</p>
<p>SET_CAMERA_CAPTURE_MODE</p>
<p>&nbsp;/*** Capture,等待VSYNC中断**/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br></p>
<p>&nbsp;（2）.在capture完成后，要DISABLE_CMOS_SESNOR;//关闭sensor信号。</p>
<p>&nbsp;（3）.此时，获取的capture的数据已经存储在isp_data-&gt;target_buffer_start_address中;</p>
<p>然后读取这些数据，通过0xff ，0xd8判断文件头，0xff ，0xd9判断jpeg文件尾及其长度。</p>
<p>（4）最后，通过kal_int32 cam_close_image_file(kal_uint32 size)保存文件</p>
<p><br>&nbsp;</p>
<img src ="http://www.cppblog.com/oosky/aggbug/126672.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/oosky/" target="_blank">任我行</a> 2010-09-15 16:58 <a href="http://www.cppblog.com/oosky/archive/2010/09/15/126672.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>