![高通5M-camera在BMP1.0平臺上總結(jié)_第1頁](http://file4.renrendoc.com/view/8c8e54e4a571af48688fb44e11a6df41/8c8e54e4a571af48688fb44e11a6df411.gif)
![高通5M-camera在BMP1.0平臺上總結(jié)_第2頁](http://file4.renrendoc.com/view/8c8e54e4a571af48688fb44e11a6df41/8c8e54e4a571af48688fb44e11a6df412.gif)
![高通5M-camera在BMP1.0平臺上總結(jié)_第3頁](http://file4.renrendoc.com/view/8c8e54e4a571af48688fb44e11a6df41/8c8e54e4a571af48688fb44e11a6df413.gif)
![高通5M-camera在BMP1.0平臺上總結(jié)_第4頁](http://file4.renrendoc.com/view/8c8e54e4a571af48688fb44e11a6df41/8c8e54e4a571af48688fb44e11a6df414.gif)
![高通5M-camera在BMP1.0平臺上總結(jié)_第5頁](http://file4.renrendoc.com/view/8c8e54e4a571af48688fb44e11a6df41/8c8e54e4a571af48688fb44e11a6df415.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
高通BMP1.0平臺調(diào)試5MCMOScamera總結(jié)摘要:本文著重解決BMP1.0平臺上的RAWdata輸出數(shù)據(jù)的500萬camerasensor的調(diào)試。包括驅(qū)動層,應(yīng)用層代碼和camera鏡頭的色彩校準(zhǔn)。我們按照調(diào)試的先后順序進行步驟說明:我們先說OEM層。OEM層繼承了ICAMERA的所有功能,ICAMERA只是一個殼,實現(xiàn)會轉(zhuǎn)到OEMCAMERA。AEE層介于兩者之間,公開的代碼只是讓我們參考,修改無效。在我們需要使用camera時候,調(diào)用CreateCamera,在CreateInstance獲得句柄后,我們得到一個應(yīng)用的殼,然后得到具體的與camera應(yīng)用相關(guān)的函數(shù)注冊。然后通過OEMCamera_SetParm開始啟動ACM相關(guān)資源,ACM簡單的理解,就是圖片和相關(guān)分支調(diào)用函數(shù)。詳情看OEMCamera_ACMTransaction()相關(guān)函數(shù),這里不是重點,因此點到即止。因為高通在雙camera的資源應(yīng)用上還沒有完善,日后和應(yīng)用在ACM上可能遇上問題,因此才在這里順帶說一下。各位有興趣可以和應(yīng)用的多交流?,F(xiàn)在,我們可以從OEMCamera_New()開始,對驅(qū)動設(shè)計工程師而言,可以理解為camera代碼應(yīng)用的開始。OEMCamera_New()中,camera_get_sensors所用到的變量,在代碼啟動的時候已經(jīng)賦值,因此,并不是為空,這點需要注意,另外,這里還沒有開始分配camera提供顯示的內(nèi)存空間,主要是對camera硬件相關(guān)進行初始化(想深入了解,看graph_task中的camera_init,這是在service層注冊過的函數(shù),再往下說,我怕會開始跑火車,就在這里點到即止,很多東西我們可以從代碼中看到更多。我這里提點一下就好)經(jīng)常,我們需要trace看sensorInfo里面的信息。我們最關(guān)心的是sensor_width和sensor_height,這個是從底層獲取的camera輸出圖像的尺寸。從代碼的設(shè)計上看,AEECLSID_CAMERA1固定的表示主攝像頭,AEECLSID_CAMERA2表示從攝像頭(現(xiàn)在手機一般都是雙camera,因此單camera的流程就不說了)現(xiàn)在我們非常關(guān)心sevice層的camera應(yīng)用,在這里涵蓋了camera絕大多數(shù)的基礎(chǔ)代碼(指公共服務(wù)的接口,)這個文件里的函數(shù),需要認(rèn)真研究。首先,我們研究preview的部分:camera_malloc_preview_buffers(),可以看到camera_preview_buffers.buffers[current_buffer].buf_ptr表示preview的buffer的指針,共5塊,前3塊是給VFE用的,后2塊是顯示overlay用的。VFE處理video數(shù)據(jù)流,圖像效果處理,raw數(shù)據(jù)解析(包括rolloff,gamma,ASF,AWB相關(guān)),YCBCR格式拍照解析顯示overlay用途,包括錄像buffer的緩沖,屏幕顯示的重載。在rawdatabuffer中,會帶上buffer頭標(biāo)志"QCAMRAW",只有帶這個標(biāo)志的rawbuffer,才是合法的,可以參看qcamrawIsHeader()這個函數(shù)判斷,具體頭里面有多少內(nèi)容,看qcamrawSetHeader()這個函數(shù),很直觀的就能解析,這里就不在贅述。想看preview關(guān)于buffer的指針定義,有一個函數(shù)camera_set_preview_buffers()很方便,這里面還包括recoding部分的buffer指針定義。這里提供一個函數(shù)camera_calculate_output1_framerate(),可以看到如何用軟件的方式看camerapreview的幀率,我用過,和實際用示波器查看的結(jié)果非常接近,考慮幀率的動態(tài)變化,實際用軟件的方式比示波器更好。如果我們想對camera的數(shù)據(jù)進行一些深入的修改,建議從兩個函數(shù)入手去追溯:camera_process_qdsp_output1_msg和camera_process_qdsp_output2_msg,這里面有很多圖像處理。Output1進行preview;output2進行snapshot。Snapshot的thumbnail放在output1處理。圖像的旋轉(zhuǎn),camera_svcs_blt_ex(0這個函數(shù)是需要的,注意Y和CbCr是分開存放的。若是還想向上追溯,可以參看camera_svcs_process_func(),這里是camera一些主要公共功能的消息派發(fā)點。具體看函數(shù)內(nèi)部就明白,我就不多說了。constcamera_bestshot_config_typecamera_bestshot_table[]={ #include"camera_bestshot_config.h"};這個是場景模式的入口,從camera_svcs_bestshot_get_config這里開始,將場景的索引賦值給cam3a_awb_state.bestshot_config,從這個關(guān)鍵詞,我們能搜索到后面所有的功能。關(guān)于ZOOM的相關(guān)流程,這里說明一下:camera_svcs_set_dimensions()可以看到zoom的放大倍率的計算。ui_picture_width=FLOOR16(camsensor_static_params[camera_asi].full_size_width -pad_pixels);ui_picture_height=FLOOR16(camsensor_static_params[camera_asi].full_size_height -pad_lines);如果是rawdata格式的數(shù)據(jù):pad_pixels=12;pad_lines=8;這是預(yù)留的邊框,防止后面計算出錯,然后我們看到處理了ui_picture_width和ui_picture_height后,其值一定是偶數(shù)。resize_factor=(camsensor_static_params[camera_asi].full_size_height*Q12 /max_crop_height(或者max_crop_width,哪個數(shù)小取哪個,這樣保證放大能填充整個屏幕));這里計算能夠放大的倍率因子if(camera_min_decimation<camera_zoom_table[i+1]&&!found_min){camera_parm_zoom_table.minimum_value=(int32)i;found_min=TRUE;}if(resize_factor<camera_zoom_table[i+1]){camera_parm_zoom_table.maximum_value=(int32)i;break;}通過camera_min_decimation和camera_zoom_table[]的比較,確定最小的ZOOM起始位置,這個位置其實是zoom的最大值,一般我們得到的是0值,告訴VFE按照camera的原始尺寸處理圖像。而camera_parm_zoom_table.maximum_value所表示的是zoom縮小的最大比例。從上邊的解釋,我們看到,ZOOM所能放大,縮小的比率,和我們camerasensor能輸出的最大尺寸,UI能設(shè)定的最大尺寸,還有屏幕能表現(xiàn)的尺寸有關(guān)系,通過改變這些值,我們能夠按照需要放大,縮小圖像。通過上面的計算,我們得到camera_parm_zoom.minimum_value和camera_parm_zoom.maximum_value和camera_parm_zoom.step_value,這是我們最后能利用的zoom范圍和每一步zoom的步長。接下來如何zoom,就不多說了,因為出錯的可能性很小。以上屬于部分camera的應(yīng)用,后面在色彩校準(zhǔn)部分還會介紹3a方面的應(yīng)用。下面我們來討論一下camerasensor驅(qū)動代碼我們按照函數(shù)調(diào)用順序進行說明:camsensor_xxx_init():顧名思義,其代表的功能定義就不用再說了,這里只需要解釋一下里面的一個變量camsensor_preview_resolution,它可以賦值CAMSENSOR_QTR_SIZE和CAMSENSOR_FULL_SIZE,QTR是預(yù)覽尺寸,F(xiàn)ULL是拍照尺寸。我們在調(diào)試的時候,要是懷疑拍照相關(guān)參數(shù)問題,可以在預(yù)覽流程中看拍照的圖片進行debug。發(fā)布出來給客戶的,就只需要QTR的設(shè)置。camsensor_xxx_start():這個函數(shù)太太太太太太重要了(我有點蛋疼了),這個函數(shù)是驅(qū)動的靈魂,因為可以說的問題太多,一時之間都不知道怎么說(這話說的有點招臭雞蛋)。這樣,望文生義的地方我就不說了,講講容易犯錯的地方。eq\o\ac(○,1)camif_config相關(guān)配置,其實已經(jīng)沒有用了,但是我們還是保留其設(shè)置(誰知道以后會不會又需要用上)。 eq\o\ac(○,2)camsensor_params->chromatix_parms=&camsensor_chromatix_xxx_struct;這是tuning圖像的所有參數(shù)的集合文件頭。Tuning后面我們會說. eq\o\ac(○,3)camsensor_params->raw_output_option=CAMSENSOR_8_BIT_DIRECT;雖然還有CAMSENSOR_10_BIT_DIRECT這個參數(shù)可以選擇,但由于后端數(shù)據(jù)的存儲都是按照8Bit來處理,因此這個參數(shù)沒有什么太大的意義(這個最終解釋權(quán)在我這里,以后高通會不會將其區(qū)別開來,這要用發(fā)展的眼光來看).eq\o\ac(○,4)在這個函數(shù)里,有判斷camsensor_preview_resolution變量,這是為了調(diào)試全尺寸的需要而設(shè)置的,在正常流程中使用,我們只需要CAMSENSOR_QTR_SIZE這個分支,在實際的調(diào)試中,我發(fā)現(xiàn),利用好CAMSENSOR_FULL_SIZE這個參數(shù)能方便解決拍照相關(guān)的很多問題。至于怎么利用,說起來頭疼,簡單的說,在第一點使用camsensor_preview_resolution=CAMSENSOR_FULL_SIZE即可,至于這樣做會有什么問題,就要看驅(qū)動代碼的健壯否了。這里無法做太多預(yù)測。eq\o\ac(○,5)preview_dx_decimation:這個是VFE處理bayer格式數(shù)據(jù)給顯示屏用的,這個是太太太重要了(我真無聊)。有一個邊界計算的問題(邊界的意思,就是在數(shù)學(xué)計算的時候,我們要保證圖像處理時候,作為分母的數(shù)據(jù)不能取為0,否則有嚴(yán)重的后果,嘿嘿,為什么會取為0呢?因為圖片邊界外面就是0了),其要求在尺寸上,寬度預(yù)留12pixel,高度預(yù)留8pixel(VFE實際只需要高度裁邊6pixel,但是為了整齊,我們裁剪了5+3=8pixel),然后剩下的寬和高的尺寸各自還要能被4整除。有人說不這樣做行嗎?太麻煩啦,我說可以,但是準(zhǔn)備后面的色彩調(diào)整時候,屏幕顯示總偏色的代價。在6平臺上特別是偏綠。 eq\o\ac(○,6)接下來是AF參數(shù)設(shè)置,這個放到AF中再說。AF對焦,只取屏幕的1/4尺寸給VFE計算,可以減少計算量,提高對焦速度。 eq\o\ac(○,7)camsensor_params->pixel_clock和pixel_clock_per_line這個參數(shù)是如此的重要,怎么說都是重點,這個重點中的重點,我只能用這種方式表達我對這個參數(shù)的尊重之情。它是用來計算flicker,也可以叫banding,一個意思。這參數(shù)屬于tuning范疇,因此如何確定這些參數(shù),歸在后面tuning進行解釋,這里先提點一下。eq\o\ac(○,8)pclk_invert:不同的廠家,pclk有效的極性可能不一樣,因此我們需要判斷,設(shè)TRUE表示上升沿有效,F(xiàn)ALSE表示下降沿有效,如何判斷呢?規(guī)格書中看看一目了然,下面這張就是上升沿有效的示意圖eq\o\ac(○,9)camif_config.HsyncEdge和camif_config.VsyncEdge:有CAMIF_High和CAMIF_Low兩種選擇,表示行場同步信號的有效電平,高或低有效,只要用示波器看看camera的數(shù)據(jù)線輸出是在行場低還是在高的時候有,就能直觀的判斷。當(dāng)然,規(guī)格書中也會提及,下面這張就是行場高有效的典型示意圖。camsensor_xxx_snapshot_config():這個是拍照時候調(diào)用的設(shè)置函數(shù)。簡單說一下里面的一些參數(shù)好了:eq\o\ac(○,1)discardFirstFrame=TRUE,表示在將來需要切換到預(yù)覽模式時,會將預(yù)覽的第一幀數(shù)據(jù)拋棄,這么做是為了防止第一幀數(shù)據(jù)殘缺造成切換時候顯示錯亂的現(xiàn)象。但是僅僅這么做還不夠(從中可以看到,高通雖然想到這個問題,但是其僅僅停留在實驗室階段),這樣做,僅僅將數(shù)據(jù)傳輸?shù)腻e誤解決,但是分配顯示buffer時候的隨機數(shù)(malloc并不清空Buffer內(nèi)容)沒有處理,這樣將會在切換到預(yù)覽模式的時候顯示花屏。我們在service層,找到camera_malloc_preview_buffers(),需要在其中添加如下代碼:if(camera_preview_buffers.buffers[current_buffer].buf_ptr){memset(camera_preview_buffers.buffers[current_buffer].buf_ptr,0x7f,camera_preview_buffer_size);camera_set_preview_headers();}eq\o\ac(○,2)camif_window_width_config.firstPixel,camif_window_height_config.firstLine這是用來調(diào)整顯示像素順序不對,而bayer的format無法調(diào)整的時候,這里提供一個變相的調(diào)整format的機會,讓顯示的色彩正確,至于是減多少,需要實際調(diào)試判斷,原理就不說了,找資料看去。eq\o\ac(○,3)epoch_line,這是糾錯處理,當(dāng)一幀數(shù)據(jù)的行超出這個設(shè)定的最大行時候,會有出錯中斷,提示幀錯誤。將這個值設(shè)置的很大,將永遠不會發(fā)生這個事件,相當(dāng)于disable。我建議最好disable,因為有一些變態(tài)的sensor,會輸出很大的dummyline,看起來很變態(tài),但是必須。camsensor_xxx_raw_snapshot_config();這個函數(shù)是在后續(xù)tuning的時候,拍rawdata照片的時候需要,設(shè)置同上。camsensor_xxx_video_config():預(yù)覽配置函數(shù)。其實沒什么好說的,要說的前面都說了,要是這里還有什么不明白的,可以打114問。我就不在這里騙稿費了。camsensor_xxx_power_up();其實我不想說,這個函數(shù)真的很雷人,要是你相信在這里進行powerup的話,我相信你的camera永遠都別正常工作。camsensor_xxx_power_down():這個函數(shù)還算正常一些,但是不需要在這里closemclk的操作。在退出camera模塊的時候,系統(tǒng)會有流程關(guān)閉工作時鐘。camsensor_xxx_register():這個函數(shù)寫這里,但是我不想說了(我看起來很欠揍)。camsensor_xxx_real_to_register_gain()和camsensor_xxx_register_to_real_gain():這兩個函數(shù)才是重點。說起來有點意思:這兩函數(shù),是浮點數(shù)和寄存器表示的整數(shù)之間的轉(zhuǎn)化關(guān)系。舉個具體的例子比較容易說明。 OV5647:gain寄存器最大0x3FF,小數(shù)占用4bit,因此形象的表示浮點數(shù)為3F.F,整數(shù)0x3F,小數(shù)一個F。從曝光表中抽取一個數(shù)值 {912,600}, /*Gain=3.563 ExposureIndex=259 */ 下面的計算是real_to_register: reg_gain=(uint16)real_gain; //real_gain=3.563 reg_temp=reg_gain<<4; //只取整數(shù)部分 gain=reg_temp|(((uint16)((real_gain-(float)reg_gain)*16.0))&0x0f);//整數(shù)和小數(shù)部分合并 下面是register_to_real的計算部分: real_gain=(float)((float)(reg_gain>>4)+(((float)(reg_gain&0x0f))/16.0));//reg_gain是寄存器整數(shù)表示的3.563.camsensor_ov5647_truly_sensor_setting():這個是sensor的參數(shù)集合的函數(shù),用來對sensor初始化,預(yù)覽和拍照參數(shù)的設(shè)定。具體的意義這里就不詳細解說,一般由sensor廠家完成。camsensor_xxx_get_snapshot_fps():將預(yù)覽/拍照的圖片尺寸比較,默認(rèn)預(yù)覽30fps,得到拍照的速率,這個,用在ISO,計算曝光行,去除拍照的第一幀數(shù)據(jù),防抖動處理。camsensor_xxx_get_preview_lines_per_frame():計算ISO曝光時間用的,公式如下: preview_exposuretime=(forced_input.forced_line_count)/(preview_exposuretime*preview_linesPerFrame);camsensor_xxx_get_preview_pixels_per_line():用來計算flicker,公式計算如下: if(camctrl_tbl.get_preview_pixels_per_line){ cam3a_aec_state.band_60hz_gap= (float)(((float)1/120)*(((float)(camsensorParamsPtr->pixel_clock))/ ((float)(camctrl_tbl.get_preview_pixels_per_line())))); }else{ cam3a_aec_state.band_60hz_gap= (float)(((float)1/120)*(((float)(camsensorParamsPtr->pixel_clock))/((float)(camsensorParamsPtr->pixel_clock_per_line))));}camsensor_xxx_get_snapshot_lines_per_frame()::用來計算拍照的曝光行: output.snapshot_linecount=(uint32)(((snapshot_exposuretime* snapshot_linesPerFrame*snapshot_fps)/Q8)+0.5);camsensor_xxx_get_snapshot_pixels_per_line():目前沒有用處。camsensor_xxx_get_snapshot_max_exposure_line_count():設(shè)定拍照的最大曝光行,可以用來限制允許拍照的曝光行邊界,這個邊界是可以動態(tài)變化的,這樣拍照的曝光時間就可以控制:限定代碼如下: output.snapshot_linecount=(uint32)(((snapshot_exposuretime *snapshot_linesPerFrame*snapshot_fps)/(Q8*snapshot_fps_divider))+0.5);camsensor_xxx_set_snapshot_frame_rate():沒啥用,返回設(shè)為TRUE即可。camsensor_xxx_set_snapshot_exposure_gain():這個函數(shù)是用來對拍照的gain和line進行寫入sensor操作,我們?yōu)榱朔乐古恼盏臅r候噪聲,一般會將gain/2,而line*2.camsensor_xxx_setup_camctrl_tbl():幾個標(biāo)志要說明一下: eq\o\ac(○,1)awb_low_light_CC_is_supported=TRUE;CC是colorcorrection的縮寫,為色彩校正的意思,對bayer格式的數(shù)據(jù)而言,那是一定要設(shè)置的。 eq\o\ac(○,2)fast_convergence_is_supported:是對AEC進行是否快速計算的意思,如果luma計算的進度在實際測試中發(fā)現(xiàn)偏差過大(超過2個點,2個點是默認(rèn)設(shè)置,我們可以更改,這在后面的tuning中說明),就需要禁止這個標(biāo)記。 eq\o\ac(○,3)enable_sensor_rolloff_correction:和set_lens_correction標(biāo)記是一個意思,這個標(biāo)記要小心設(shè)置,當(dāng)確定不用VFE進行后端rolloff計算,才可以使能這個設(shè)置,否則一定要關(guān)閉,要不tuning的時候,色彩無法校準(zhǔn)。 eq\o\ac(○,4)enable_rolloff_correction:這個標(biāo)記正好和上面的相反,需要VFE進行rolloff設(shè)置的時候,我們需要使能它。至于rolloff是啥東西,后面tuning再解釋。 eq\o\ac(○,5)af_is_supported,af_use_isp,cam3a_af_state.is_enabled,這三個標(biāo)記,是用來激活A(yù)f功能的,要用isp的AF功能,上面三個標(biāo)記都要設(shè)TRUE,要是用VCM通過i2c來激活af功能,af_use_isp設(shè)為FALSE,另外兩設(shè)為TRUE.aec_digital_gain_is_supported:這是用在CC的校驗中,可以在WB中增強RGB色彩矩陣的變化,另外在拍照ISO設(shè)置中,必須配合ISO使能iso_is_supported標(biāo)志才能起作用,好了,到此driver的說明告一段落。下面我們來說AF的調(diào)試。先說VCM的調(diào)試。camsensor_xxx_set_default_focus:我們一般將鏡頭設(shè)置在無窮遠的位置。這樣啟動camera的時候,看遠處會比較清晰。camsensor_xxx_move_focus:參數(shù)step_direction代表的是每一步對焦的步長,理論上這個值越小,對焦越精確,當(dāng)然,我們調(diào)試是不能完全按照理論來的。一般我們會設(shè)置15~20。AF對焦調(diào)整,有兩種模式,下面介紹一下各個參數(shù)的意義其一為通過VCM馬達驅(qū)動camsensor_params->af_enable使能此功能num_steps_near_to_far步長總數(shù)num_steps_near_to_closest_infinity默認(rèn)值num_gross_steps_between_stat_points粗調(diào)步長num_fine_steps_between_stat_points細調(diào)步長num_fine_search_points在細調(diào)到位情況下,第二次對焦的步長數(shù)af_process_typeAF的數(shù)學(xué)模型position_near_end微距模式近端position_default_in_macro微距啟動的默認(rèn)位置position_boundary正常模式近端position_default_in_normal正常模式默認(rèn)位置position_far_end遠端位置其二為通過ISP驅(qū)動:camctrl_tbl_ptr->af_is_supported使能AF模塊af_use_isp使能isp驅(qū)動hjr_bayer_filtering_enable防抖動,拋棄3幀圖像cam3a_af_state.is_enabledaf定義狀態(tài)允許ISP驅(qū)動的方式有兩種,一是自動模式,可以發(fā)一條指令讓isp自己完成對焦的所有工作,另一種是手動模式,可以隨時中斷正在做的對焦過程,重新開始對焦。以下為使用的三個函數(shù)接口:camsensor_function_table_ptr->camsensor_set_default_focus公共接口camsensor_function_table_ptr->camsensor_move_focusVCM驅(qū)動接口camctrl_tbl_ptr->isp_af_startisp接口camctrl_tbl_ptr->isp_af_get_positionisp接口注意一點,在高通的代碼中,camera_af_start()里,camera_af_config()要將af的數(shù)學(xué)模型類型重新輸入,否則在底層驅(qū)動修改的參數(shù),到這里會被截止。 (void)camera_af_config(camsensorParamsPtr,mode, (int)camsensor_static_params[camera_asi].af_process_type);完成af對焦動作,會有camera_af_done()來調(diào)用一個回調(diào)函數(shù)cam3a_af_state.callback,執(zhí)行OEMCamera_CameraLayerCB()將結(jié)果告訴上層應(yīng)用。caseCAMERA_FUNC_START_FOCUS:switch(cb){caseCAMERA_EXIT_CB_FAILED:nStatus=CAM_STATUS_FAIL;break;caseCAMERA_EXIT_CB_DONE:nStatus=CAM_STATUS_DONE;break;}break;對焦的精度,采用分辨率圖表測試。距離大約10公分,光源采用日光或者鎢絲燈,盡量避免反光。觀察可以清晰分辨出來的條數(shù)。上面的這些在遇上問題的時候,可以幫助提供思路。下面我用例子進行介紹如何調(diào)試AF,當(dāng)然,我排除一切問題,默認(rèn)所有功能都正常運行。假設(shè)我們使用10bit寬度的VCM,如下圖R9~R0就是數(shù)據(jù)的寬度,這里為10bit。10位的寬度,用十進制表示就是1023,以正常模式舉例,我們定義AF的行程從position_far_end到position_boundary,分割成num_steps_near_to_far個步長,每一步長的行程,我們定義step_direction,起始點定義xxx_current_lens_position,因此總的鏡頭跑的行程距離計算一下:totalAFstep=(xxx_current_lens_position+num_steps_near_to_far×step_direction),totalAFstep必須<1024,否則鏡頭會打到邊界,會損毀嬌貴的鏡頭。position_far_end和position_boundary可以設(shè)置為這個行程中的任意位置,當(dāng)然任意僅僅是理論值。實際要根據(jù)效果來調(diào)整。num_gross_steps_between_stat_points將影響AF跑的精度和速度,設(shè)置小了,精度保證,但是速度太慢;設(shè)置大了,精度又有問題,因此才需要我們來調(diào)整到一個合適的數(shù)值。/*-----------------------------------------------------------------------------------------------------------------*/上面的圖片說明了兩種AF移動模式,左邊的是快速模式,也叫Directmode(也許我翻譯的不準(zhǔn)確?大家將就一下)右邊的是步進模式,也稱Stepmode。從保護鏡頭,延長使用壽命的角度,我們應(yīng)該取步進模式(VCM廠家蛋疼發(fā)布快速模式,因為客戶基本不可能用)。下面我們開始Tuning的講解:知識點準(zhǔn)備:一.RAW數(shù)據(jù)格式RAW,是按照RGB格式保存的sensor輸出的原始圖像數(shù)據(jù),其開始的第一個像素由sensor決定。一個像素大小,取決于sensor的硬件輸出能力,比如8Bit,10Bit的數(shù)據(jù)寬度,就是一個像素輸出的數(shù)據(jù)長度。下面兩張圖可以很直觀的表示,要是還有疑問,建議撥打114咨詢。這里有一個Binning的概念,如圖,屬于2×2矩陣,Binning是一種圖像讀出方式,采用這種方式,相鄰的像元中感應(yīng)的電荷被加在一起,以一個像素的方式讀出.Binning分為水平方向和垂直方.水平方向Binning是將相鄰的行的電荷加在一起讀出,而垂直方向Binning是將相鄰的列的電荷加在一起讀出.Binning這一技術(shù)的優(yōu)點是能提高楨速,和增加靈敏度.當(dāng)行和列同時采用Binning時,圖像的縱橫比并不改變.當(dāng)采用2:1Binning時,圖像的解析度,將減少50%.Binning可以實現(xiàn)圖像的平滑,避免鋸齒現(xiàn)象;Binning不影響我們后端接收的數(shù)據(jù)量;目前我們一般都會提出要求sensor廠家采用2×2的矩陣Binning來發(fā)送數(shù)據(jù),將來是否還需要這個技術(shù),各位可以密切關(guān)注。Flicker,效果如圖:上面這張要是看不清楚,可以看下面這張圖片:Sensor在日光燈作為光源下獲取圖像數(shù)據(jù)時會產(chǎn)生flicker,其根本原因是照在不同pixel上光能量不同產(chǎn)生的,所接受的光能量的不同也就是圖像的亮度的不同。電源的頻率有兩種標(biāo)準(zhǔn):50Hz和60Hz的正弦波形。(題外話:其實任何光都是波的形式傳播,只是由于自然界的光波頻率太高,對sensor能量的采集影響微乎其微,因此我們避紋波只考慮人工光源。)如上圖,由于能量在時間方向上的波形,照在sensor上就使每一個pixel產(chǎn)生在時間方向上的相應(yīng)波形,由于CMOSsensor的曝光方式是一行一行的方式進行的,任何一個pixel的曝光時間是一樣的,也就是同一行上的每個pixel的曝光開始點和曝光的時間都是一模一樣的,所以同一行的所有點所接受到的能量是一樣的,而在不同行之間雖然曝光時間都是一樣的,但是曝光的開始點是不同的,所以不同行之間所接受到的能量是不一定相同的。由此產(chǎn)生sensor出來的圖像可能在圖像高度方向上會有相應(yīng)的波形。為了使不同行之間所接受的能量相同,就必須找一個特定的條件,使得每一行即使曝光開始點不同,但是所接受的光能量是相同的,這樣就避開了flicker,這個特定的條件就是曝光時間必須是光能量周期的整數(shù)倍時間。下面具體計算如何避免flicker。取出曝光表中的曝光行:{1966,2200}, /*Gain=7.680 ExposureIndex=330 */高通的曝光按照每步長1.03倍設(shè)計,這里的gain,是realgain,為數(shù)學(xué)計算準(zhǔn)備,在最終需要生效的時候,會轉(zhuǎn)化為registergain,具體的要根據(jù)sensor廠家規(guī)格確定,這在前面已經(jīng)解釋過了。這之后,會調(diào)用camera_aec_core_build_band_table()對曝光表進行50Hz,60Hz的修正,camera_aec_core_init()函數(shù)中if(camctrl_tbl.get_preview_pixels_per_line){cam3a_aec_state.band_60hz_gap=(float)(((float)1/120)*(((float)(camsensorParamsPtr->pixel_clock))/((float)(camctrl_tbl.get_preview_pixels_per_line()))));}else{cam3a_aec_state.band_60hz_gap=(float)(((float)1/120)*(((float)(camsensorParamsPtr->pixel_clock))/((float)(camsensorParamsPtr->pixel_clock_per_line))));}camera_aec_core_build_band_table()函數(shù)中:antiband_start_line=(uint16)(antiband_gap_line*start_band_count);我們可以得到曝光行的公倍因子antiband_start_line,假設(shè)我們得到的是327這個因子,前面的曝光表中的{1966,2200},其中2200將通過公倍因子修改為1962,變成{1966,1962}這就是避免flicker的流程。在前面我有提到camsensor_params->pixel_clock和pixel_clock_per_line,重要!?。∵@個參數(shù)用來調(diào)整flicker的因子,以達到最佳效果。當(dāng)然,在sensor內(nèi)部,有flicker寄存器相關(guān)也需要設(shè)置,這個很容易遺漏,需要提高警惕。問題提出和解決:以50Hz光源為例AntiBandingCLK=PixelPerLine*TotalLine*n/100(n表示1<n<100)AntiBandingCLK:一般和PCLK一致,需和sensor廠家確認(rèn)。PixelPerLine和TotalLine:我們確定的是PixelPerLine的值,其由有效像素+dummy組成。需和sensor廠家確認(rèn)。TotalLine,計算出來的是一個公倍數(shù)因子,為AECTable的建立提供計算因子,這個就是曝光行的基本因子。三、Shading優(yōu)化:Sensor自然的輸出圖像,由于凸透鏡的聚焦原理,中心會比四邊亮,因此sensor需要對周邊的感光進行提升,以使整幅圖片看起來亮度均勻。這是未處理shading的圖像:如何在后端進行shading,我會在chromatix的使用中介紹。下面這張是色調(diào)分離后的照片,可以看到雖然同心圓度偏左,屬于合格。下面這張偏心了,可以打入不合格品。但是如果價格敏感,這個模組還是可以將就的使用。就是色彩誤差會增大。沒什么好說的,下面這張屬于殘次品:將右下角放大,可以看到有暗角Shading:將4個通道獨立進行計算,R,RG,BG,B.每個通道分為17*13個區(qū)域,每個區(qū)域獨立對色塊進行shading計算。將每個區(qū)域按照總的調(diào)整能力的百分比,進行處理,目的是保證每個色塊的Y分量基本一致。標(biāo)準(zhǔn)是邊角Y至少達到中心點的80%舉例:1.902122f,1.936142f,1.887789f,1.826255f,1.764815f,1.724159f,1.671194f,1.613485f,1.589752f,1.591212f,1.609030f,1.663636f,1.727334f,1.795452f,1.914581f,2.074672f,1.782558f,以上數(shù)據(jù)為17*13的一行,其調(diào)整的是gain值。四、圖像噪點消除:噪點產(chǎn)生的幾個原因;1.提高感光度容易形成噪點。提高感光度一般是在光線照度低的情況下。高感光度成像是依靠電子線路的增益來增強信號,在信號增強的同時,噪點也被增加了。因此,我們一般推薦gain值不大于8
2.長時間曝光容易產(chǎn)生圖像噪音。在需要長時間拍攝的時候,處理較慢的快門速度所帶來的巨大的工作量,致使一些特定的像素失去控制而形成比較多的噪點。這個需要sensor廠家在設(shè)置參數(shù)的時候,提高噪聲的門限值,并且盡量注意不要對圖像輸出的對比度影響。
4.傳感器的尺寸較小,而拍攝時設(shè)置的分辨率有很高,拍攝時容易產(chǎn)生噪點,這個考驗sensor廠家的性能,這方面的噪聲屬于先天,我們只能評估,無法改善。
5.用JPEG格式對圖像壓縮產(chǎn)生圖像噪音。由JPEG格式壓縮圖像,壓縮率越高,圖像噪音就越明顯。這需要綜合評定存儲的尺寸和噪聲等級之間的平衡點。五、圖像#格子消除:起因為sensor設(shè)定的輸出預(yù)覽尺寸和實際的不符合,或者不和4整除的關(guān)系,都會出現(xiàn)這種現(xiàn)象。(小知識點:實際經(jīng)過VFE的處理,需要在高度上截去8Pixel,寬度截去12Pixel)六、幀率控制:有兩種方法可以控制rawdata數(shù)據(jù)輸出的速度::,Rawdata的數(shù)據(jù)輸出,都會在每個line后添加曝光行,利用曝光行,可以控制幀率。另外,可以加入Dummyline,寫無效數(shù)據(jù)的多少來控制幀率。幀率=pclk/(pixel_per_line*line_per_frame)pixel_per_line=有效像素+曝光行;line_per_frame=有效行+demmy_line。七、白平衡AWB:這是在shading基礎(chǔ)上做的色彩計算?;译A板:用來計算白平衡點在不同的光源下切換,camera能自動的收斂,這需要camea能智能的判斷現(xiàn)在處于哪種光源下,因為在不同的光源下,R,G,B的比值是不同的,換句話說,Y,U,V的數(shù)值落在二維空間的不同區(qū)域,將這個參考值定義為相關(guān)的光源,camera即可自動識別并且收斂到相關(guān)光源下的RGB修正參數(shù)下,這樣,不論在何種光源下,都能不偏色的拍照。例子如下:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《其他植物激素》課件
- 《限制性液體復(fù)蘇》課件
- 2024年禮儀培訓(xùn)講師課件
- 2025年自然科學(xué)研究與試驗發(fā)展服務(wù)項目合作計劃書
- 2025年涂料助劑:流平劑項目合作計劃書
- 安全保暢專項施工方案
- 小學(xué)午托申請書
- 大學(xué)英語教學(xué)之中國文化缺位現(xiàn)象探究
- 大學(xué)生寫論文怎么找參考文獻
- 三八婦女節(jié)班會活動方案
- 統(tǒng)編小學(xué)《道德與法治》三年級上下冊教材的解讀
- 風(fēng)機基礎(chǔ)監(jiān)理實施細則
- 產(chǎn)業(yè)鏈競爭關(guān)聯(lián)度
- 涵洞施工鋼筋混凝土圓管涵
- 高考地理一輪復(fù)習(xí)學(xué)案+區(qū)域地理填圖+亞洲
- 全新車位轉(zhuǎn)讓協(xié)議模板下載(2024版)
- 《遙感地質(zhì)學(xué)》全冊配套完整教學(xué)課件
- 學(xué)科帶頭人工作計劃
- 高中數(shù)學(xué)必修一試卷及答案
- 礦石買賣協(xié)議書
- 【老齡化背景下商業(yè)銀行養(yǎng)老金融發(fā)展探究文獻綜述3400字】
評論
0/150
提交評論