相机面试问题总结
1,Camera基本工作原理
答案: 光線通過鏡頭Lens進入攝像頭內部,然后經過IR Filter過濾紅外光,最后到達sensor(傳感器),senor分為按照材質可以分為CMOS和CCD兩種,可以將光學信號轉換為電信號,再通過內部的ADC電路轉換為數字信號,然后傳輸給DSP(如果有的話,如果沒有則以DVP的方式傳送數據到基帶芯片baseband,此時的數據格式Raw Data,后面有講進行加工)加工處理,轉換成RGB、YUV等格式輸出。
數據流是如何從sensor到APP的?
上述描述結束后,在ISP處理后面的階段,數據會進行分流,分為capture,preview,video等以供后續(xù)動作使用。例如zsl拍照,就是通過下發(fā)request,并獲取capture stream的數據流,進行編碼壓縮,進而上報APP,完成拍照動作
2,OTP是干什么的?platform otp和sensor otp的區(qū)別?
OTP用于存儲Lens shading參數、AWB參數、AF position等數據的校準數據,用于校準
平臺端 otp:沒有otp的自校正功能,需要我們BB端(服務器)進行校校準,從存儲空間(外掛eeprom或者sensor內部存儲空間)中read出數據,然后將數據送給BB(BBinder)進行校準。
sensor otp:sensor有otp的自校準功能,從存儲空間(外掛eeprom或者sensor內部存儲空間)中read出數據,然后寫回sensor寄存器,送給BB端的RawData是已經校正過的數據
3,Qcom CPP功能/MTK 數據流程
QCOM:高通CPP主要功能包括Denoise,Scale,Sharpen,Rotate
MTK:Pass1, Pass2; Pass1主要是加入tuning參數以及其他處理,Pass2主要是完成Crop,Resize、數據分流等操作
雙攝同步FrameSync,AEsync 雙攝verification原理?如果有問題,如何分析?(中心點,光軸,AE不同步) 是否遇到過花屏/變綠的情況,如何解決?都有哪些原因會導致該問題?尺寸不能被16整除;4,高通平臺,如何做sensor兼容?,
平臺已經做好兼容,只要在camera_config.xml中配置上sensor_name即可區(qū)分不同sensor。
5,打開相機預覽界面卡頓,對比正常log和卡頓log,發(fā)現在人臉識別環(huán)節(jié)處理速度較慢,導致幀率下降。
解決辦法:1.更新人臉識別算法庫。2.是人臉識別時跳幀處理,減少耗時。
6,簡述HDR或者美顏算法的移植過程
以HDR算法為例,首先,需要在Android.mk中添加需要編譯的源文件,需要加載的頭文件,指定編譯生成的so庫.在parameters中增加hdr模式key值,在takepicture函數中從HDR算法中獲取需要拍照的張數及EV值,在parameters中增加hdr模式,encodedata函數中增加進入HDR算法的入口函數m_QCameraArcHDR.init和m_QCameraArcHDR.process,將拍的三張圖片幀以EV值分別為-6,0,6去處理.
7,開發(fā)過程中遇到的問題:閃光燈狀態(tài)設為auto,暗環(huán)境下拍照,點擊縮略圖查看圖片,返回相機界面迅速再拍照,閃光燈有時會不閃.
分析:查看log拍照過程中flashmode設置正確,takepicture之前和之后分別加log打印mFlashNeeded值,顯示拍照之前該值為0,拍照過程中該值變成1,查看相關代碼,mFlashNeeded是在metadata callback中從AE中獲取的,而獲取值和拍照在兩個不同的線程中完成的,兩個線程會出現同步不上的情況,所以會引起這個問題.
解決辦法:在拍照之前,判斷flashmode為auto, mFlashNeeded為0時,等待100毫秒左右的時間,讓另外一個線程有時間獲取mFlashNeeded值的狀態(tài).,
8,遇到的問題: 圖像中有不斷變化的細密的水平條紋(與熒光燈的頻閃造成的大面積的滾動水平條紋不同,表現出來的是一個像素高的水平條紋狀躁點,位置不固定,數量比較多,而且隨光線強弱有一定的變化)
解決辦法: 因為設置某些sensor寄存器的時候,會影響到這些水平條紋的顏色,所以基本上排除是在數據傳輸過程中板子對數據造成的干擾,也排除接觸不良的可能性,應該是數據在sensor內部已經存在這些水平條紋。此外相同的初始化序列,相同的sensor,在廠商的demo版上也沒有發(fā)生這種情況,所以也基本排除軟件的問題。最后,發(fā)現原先為了節(jié)省硬件成本,將sensor的兩個電壓相同的模擬電和數字電由同一芯片輸出供給,導致兩者之間互相干擾,影響了sensor的正常工作
9,切某些模式后預覽亮度變暗怎么分析.
排查:直接從驅動搜索sensor_fill_exposure_array接口下發(fā)的參數中的gain值和fl_line值,從實際設入sensor的參數來判斷是由于iso的設定還是幀率的設定導致變暗的問題.
10,HAL3 cts (獲取到的sensitivity的值和實際設定的值始終有略微的差值)
分析過程:首先看代碼先確定HAL3中getsensitivity和setsensitivity對應操作到的參數具體是ISO值(也就是驅動中對應的gain值),發(fā)現每次都有略微的差值,懷疑是哪邊的某種轉換丟失了部分值,確定最終下到驅動的值是多少(發(fā)現和get到的值一致,也是丟了某些精度).代碼從下往上排查傳入sensor_fill_exposure_array的gain參數在傳入前有沒有什么轉換(同時郵件咨詢FAE驅動中有無對應轉換動作),代碼上看到gain在傳入sensor_fill_exposure_array前(set_exposure時)經過了驅動接口的sensor_calculate_exposure函數的操作,使的gain值失去了一定的精度.咨詢FAE得知是由于sensor本身并不是無級的可設置gian值,需要根據下發(fā)的gain切到對應的實際能支持的最接近的gain值上.所以和下發(fā)的gain值有了略微區(qū)別.
解決方法:針對對應sensor型號,把轉換前的gain值賦值給獲取sensitivity會讀取的參數上.
11,sensor圖像數據轉換流程
sensor內部的感光芯片是按順序排列的,光線進來通過bayer pattern后中間已經經過光信號到電信號到數字信號的轉換了,然后數據開始通過MIPI從sensor傳給平臺,MIPI打包后(主控最前端)就得到了RAW Data。高通平臺的是RAW Data經過ob,shading之后再經過Demosaic轉換成了RGB,其實Demosaic就是一個插值出每個像素點R,G,B值的一個過程,之后再由ACE從RGB轉換成YUV,hal層那邊在通過jpegencodeconfig進行encode成jpeg數據通過回調上傳給app。
12,相機專業(yè)模式倒計時開啟狀態(tài)下,快門時間調到3s以上,快門計時還沒有結束就發(fā)出聲音
在相機進行專業(yè)拍照的時候,狀態(tài)機進行了改變,走的是非zsl模式,點擊拍照會停止預覽,然后進行非zsl拍照,可是在停止預覽操作到徹底關閉通道和流數據之前查看log發(fā)現還會有幀數據進行了上傳,這時候狀態(tài)機是為4的狀態(tài)下,callback函數那邊的playshutter會進行判斷,這時候狀態(tài)機已經為非zsl模式,又有了幀數據,就會進行playshutter。根本原因是stoppreview關閉流和通道需要一些時間,會有一些幀數據依然回調,雖然不會進行處理,可是playshutter那邊依然會發(fā)出聲音。解決辦法:自己新添加了一個標志位,當執(zhí)行stoppreview時候將其置為1,再playshutter那邊新增判斷條件,不讓其發(fā)出聲音。
13,手動設置ISO&S連拍后,查看照片信息,發(fā)現信息顯示的ISO&S數值錯誤
問題分析:手動設置ISO&S后,單拍發(fā)現照片信息顯示正常,但是連拍照片信息顯示錯誤,將連拍的相片散開發(fā)現,只有第一張照片顯示正常,其他均錯誤;進一步抓log分析發(fā)現,單拍時,camera處于ZSL模式,而連拍時,camera處于非ZSL模式。
?ZSL模式:sensor通過MIPI接口將數據流傳送到ISP中并分成多個相同(size不同)的流(preview流、thumbnail流、capture流),在拍照時,takepicture會從capture流中取到數據傳輸給APP,此時也就是說,預覽和拍照處于相同全尺寸流狀態(tài),即拍照只是從流里取一張而已
??非ZSL模式:拍照時,stream off,會停止preview,takepicture從sensor獲取一張圖片數據傳給APP,APP接收到圖片后,發(fā)送一個命令給sensor,sensor會通過(preview setting、capture setting、video setting等)重新使stream on,重新preview,sensor通過MIPI接口將數據流傳送到ISP中并分成多個相同(size不同)的流(preview流、thumbnail流、capture流),takepicture從capture 流獲取圖片數據傳送給APP(故此時的圖片信息與第一張圖片信息會有所差異),預覽是小尺寸,拍照需切換設置到全尺寸,會有一定的延時
解決方案:將連拍模式的camera模式強制轉化成ZSL模式,即將hardware/qcom/camera/QCamera2/HAL/QCameraParameters.cpp中setZslMode()函數下的
if(!strcmp(str_asus_camera_mode_val,"PRO")||!strcmp(str_asus_camera_mode_val,"HDR")){}改成
if(/*!strcmp(str_asus_camera_mode_val,"PRO")||*/!strcmp(str_asus_camera_mode_val,"HDR")){}
???????
總結
- 上一篇: 大型鱼类数据集
- 下一篇: 软件质量保证与测试实验(实验三.逻辑覆盖