控制Android手机中的相机硬件

时间:2012-07-01 12:54:01

标签: android camera

我想在我的Android手机上控制光圈,快门速度和ISO。有没有办法可以访问硬件功能?

2 个答案:

答案 0 :(得分:7)

我不会说这是不可能这样做,但实际上不可能以一种可以推广的方式 - 甚至许多 - Android手机。如果您偏离Android API定义的官方路径,那么您自己就可以了,这基本上就是一个嵌入式硬件开发项目。

让我们从基础开始:您需要相机子系统的原理图和图像管道中所有内容的数据表。对于您打算支持的每部手机。在某些情况下,您可能会发现一些手机具有或多或少相同的相机子系统(特别是当您谈论在美国销售的略有不同的运营商特定型号时),偶尔您可能会幸运地拥有大量相机您关心的手机和Nexus手机之间的相似性。

这不是一件小事。据我所知,甚至NEXUS手机都没有发布官方原理图。流行的手机(特别是三星和HTC)通常会发布拆解,因此每个人都知道广泛的细节(相机模块,视频编码芯片组等),但是仍然需要进行大量的猜测来确定它们是如何连接在一起的。

毫无疑问 - 这不是随便的黑客领域。如果像I2C,SPI,MMC和iDCT这样的术语对您没有任何意义,那么您可能不会走得太远。如果您从字面上理解CMOS图像传感器是如何串行读取的,以及如何使用Bayer阵列来生成RGB图像,那么您几乎肯定会在脑海中。

这并不意味着你应该放弃并放弃......但这意味着试图在商用Android手机上破解相机可能不是最佳起点。为了完成这样的项目,你需要很多背景知识,而你真的需要从你控制的硬件平台上获取知识。有适当的文件。毫无疑问......在“硬”Android软件项目的层次结构中,这个排名非常接近列表的顶部。

我的建议(简化和浓缩了一点):购买Raspberry Pi,并学习如何从GPIO引脚点亮LED。然后学习如何通过74HC595移位寄存器有选择地点亮8个LED。然后在分线板上购买SPI寻址的闪存芯片,并学习如何写入它。在某些时候,购买一个像Sparkfun.com& amp;学习如何一次读取一帧,并将原始RGB数据转储到闪存。了解如何使用i2c读取和写入摄像机的控制寄存器。此时,您可能已准备好在Android手机中处理相机以获取单张照片。

如果您决定从Android手机开始,至少现在坚持使用“Nexus”设备,并且在您拥有原理图,数据表之前不要购买手机(如果您还没有手机)和您拥有的源代码。不要购买手机,以为您可以自己追踪原理图。你不会。至少,除非你是一名研究生,并且拥有一个研究生级别的电子实验室(具有X射线功能),你可以随意使用。这些芯片和模块中的大多数都是微型BGA。你不会用万用表跟踪它们,而我所知道的每个Android相机的大多数低级驱动程序逻辑都隐藏在可加载的内核模块中,其源代码不可用。

那就是说,我非常希望看到有人把这样的项目拉下来。 : - )

答案 1 :(得分:3)

Android已发布在线培训,其中包含您需要的所有信息: You can find it here - Media APIs

但是,有一些限制,并非所有硬件都支持所有类型的参数。 如果我没记错,你就无法控制快门速度和ISO。