Android 自拍調試紀要

來源:互聯網
上載者:User

 

最近在調試Android 2.3.5(基於cm的代碼)的自拍,將遇到的問題與解決的方法記錄下來,以便回顧。

1:)上層應用無法擷取自拍的資訊?

自拍的訊息一般回存在與HAL層中,例如三星的crespo中就是這麼處理的。但是CM關於HTC的適配中去比較奇怪的將這些介面實現在了framework層(CameraService.cpp)。這應該是和Android的架構是衝突的。而且對於非HTC的手機,在擷取前網路攝影機的數目時直接返回了1。導致上層檢測不到自拍的存在。 解決方案:在CameraService中關掉cm關於擷取網路攝影機的修改,在HAL層加以實現。主要的介面有HAL_getNumberOfCameras, HAL_getCameraInfo,
HAL_openCameraHardware 。

2:)當按下快門按鈕後,preview顯示自動對焦的小框,但是並沒有拍照的動作,而且回導致程式死掉。

產生原因:在2.3.5中,CameraService::Client在調用自動對焦函數autofocos時,會掉用到HAL層的autofocus函數。我調試的硬體不具備自動對焦的功能,但是由於前期參數沒有設定正確,會調用到這個地方來。而在HAL層的autofucs中回同歸notifycallback回呼函數通知CameraService::Client。但在2.3.5的notifyCallback中添加了lockIfMessageWanted函數,改函數回嘗試回去鎖,如果擷取不到就一直去擷取。而這時候autofocus還沒有執行完(永遠不會執行完),還持有著。所以會導致死結。而且導致以後按下快門鍵後移植不會去執行拍照的操作,因為改動做也要首先去擷取鎖。

解決方案其實很簡單,在初始化CameraParameters的時候,給focusmode設定成INFINITY就可以啦。如果有自動對焦的功能,也不可以在aotufocus的進程中去通知framework層,可以通過建立一個detached的線程返回狀態。

3:)前置拍照可以用了,但是當切換到攝像的時候,進程回死掉。

產生原因攝像最終儲存成3GP或者mp4檔案是需要編碼去進行編碼的。而這些資訊是有MeidaProfiles.cpp檔案進行控制的。改類回在初始化時,會去/etc下尋找meida_profiles.xml檔案,如果沒有找到該檔案就會進行預設的設定,預設的設定不會去設定自拍的編碼資訊。

解決方案:在media_profiles.xml檔案中加入自拍的編碼資訊。這個拷貝後置網路攝影機的部分即可,但是要記住設定cameraId。

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.