2012-07-01 31 views

回答

3

Android已經公佈了包含所有你需要的信息,在線培訓: You can find it here - Media APIs

不過,也有限制,不是所有的硬件的支持所有類型的參數。 如果我沒有記錯,您無法控制快門速度和ISO。

6

我不會說這是不可能做到這一點,但它實際上是不可能做到這一點的方式,是普遍適用於所有的 - 甚至許多 - Android手機。如果你偏離了由Android API定義的官方路徑,那麼你幾乎完全靠自己,這基本上是一個嵌入式硬件開發項目。

讓我們從基礎知識開始:您需要圖像管道中所有內容的相機子系統和數據表原理圖。對於你打算支持的每一部手機。在某些情況下,您可能會發現幾部手機的照相機子系統或多或少相同(尤其是當您談論的是在美國銷售的與特定型號運營商稍有不同的機型時),偶爾您可能會有足夠的幸運有很多您關心的手機與Nexus手機之間的相似度。

這不是小小的壯舉。據我所知,甚至連NEXUS手機都沒有發佈官方原理圖。受歡迎的手機(特別是三星和HTC)通常會發布拆解表,所以每個人都知道廣泛的細節(相機模塊,視頻編碼芯片組等),但仍然有很多猜測涉及如何將它們連接在一起。

不要誤解 - 這不是偶然的黑客攻擊領域。如果像I2C,SPI,MMC和iDCT這樣的術語對您來說毫無意義,那麼您不可能走得太遠。如果您沒有從字面上理解CMOS圖像傳感器是如何串行讀取的,以及如何使用拜耳陣列來生成RGB圖像,那麼您幾乎肯定會頭昏腦脹。

這並不意味着你應該扔下毛巾放棄......但它意味着試圖在商業Android手機上破解相機可能不是最好的開始。爲了完成這樣的項目,您需要掌握大量的背景知識,並且您需要從硬件平臺獲取這些知識,這些知識由您控制的文檔提供。不要誤解......在「硬」Android軟件項目的層次結構中,這個排名非常接近榜首。

我的建議(簡化和簡化了一下):購買Raspberry Pi,並學習如何從GPIO引腳點亮LED。然後學習如何通過74HC595移位寄存器有選擇地點亮8個LED。然後在分線板上購買SPI編址的閃存芯片,並學習如何寫入。在某個時間點,購買一臺具有「串行」(fyi,「serial」!=「rs232」)接口的視頻圖像傳感器,例如Sparkfun.com &瞭解如何一次讀取一幀,並轉儲原始RGB數據閃光。瞭解如何使用i2c讀取和寫入相機的控制寄存器。此時,您可能會準備好在Android手機中處理單張照片中的相機。

如果您決定從Android手機開始,至少應該堅持使用「Nexus」設備,並且不要購買手機(如果您尚未擁有該手機),除非擁有原理圖,數據表和源代碼。不要購買手機,因爲您可以自己追蹤原理圖。你不會的。至少,除非你是一名研究生,並且擁有一個可以隨意使用的研究生級電子實驗室(具有X射線功能)。這些芯片和模塊大部分都是微型BGA。你不會用萬用表追蹤它們,而且我知道每檯安卓相機都有大部分的低級驅動程序邏輯隱藏在可加載的內核模塊中,這些內核模塊的源代碼不可用。

這就是說,我非常喜歡看到有人拉這樣的項目。 :-)

+0

有沒有什麼辦法可以在驅動程序級別的某處至少「掛鉤」以確定硬件攝像頭何時拍攝照片? – gonzobrains

+0

不是我所知道的。在千兆字節的CM10.1源代碼中,您可能能夠找到相機應用程序或與其交互的抽象層的來源。當一張照片被拍攝時,某個事件可能會觸發某處,您可能會在該處找到該事件...如果您可以找到源文件。也許嘗試運行像CatLog這樣的程序作爲root用戶,開始保存日誌輸出,拍照,停止捕獲日誌,然後通過日誌搜索尋找關於相機應用程序包名稱的線索。 – Bitbang3r