camera成像原理:
景物通過鏡頭生產光學影象投射到sensor表面上,然後轉為模擬電訊號,經過數模變成數字影象訊號,在經過dsp加工出來,然後在通過io介面傳輸到cpu處理。
由於攝像頭滿足匯流排、驅動、裝置模型,那麼看看andorid是怎麼去實現攝像頭的流程。
1. 註冊camera的platform平台裝置
點選(此處)摺疊或開啟
camera_hw_i2c_init
platform_driver_register(&g_stcamera_hw_driver)
static struct platform_driver g_stcamera_hw_driver =
};2. 註冊camera的platform平台裝置驅動
點選(此處)摺疊或開啟
platform_device_register(&sensor_dev);
static struct platform_device sensor_dev = ;
在 在mt6575_board_init這個函式中註冊了很多平台裝置,包括上面的平台裝置。camera的平台裝置與平台驅動匹配後,就會呼叫drv的probe函式,其probe函式主要完成的是i2c平台驅動的註冊
點選(此處)摺疊或開啟
static int camera_hw_probe(struct platform_device *pdev)
struct i2c_driver camera_hw_i2c_driver = ;
怎麼去做i2c驅動與裝置的匹配呢?核心中對於這塊有詳細的講解,檔案為instantiating-devices,現在i2c的平台驅動已經註冊了,下面來分析下是怎麼註冊平台裝置的。應該使用核心的第3種方法,在核心註冊i2c驅動的時候,最終會遍歷匯流排裝置的driver成員,呼叫__attach_adapter函式。
點選(此處)摺疊或開啟
static int __attach_adapter(struct device *dev, void *data)
這個函式最主要的是呼叫了camera_hw_i2c_driver的detect函式,完成裝置與驅動的匹配,最終會呼叫camera_hw_i2c_probe。
點選(此處)摺疊或開啟
static int camera_hw_i2c_detect(struct i2c_client *client, int kind, struct i2c_board_info *info)
在probe函式中最只做了一件事件registercamera_hwchardrv,這個函式會註冊字元裝置,註冊裝置節點,並在裝置節點下建立類,重點的東西出現了
點選(此處)摺疊或開啟
static const struct file_operations g_stcamera_hw_fops =
;open只是初始化乙個原子變數留給系統呼叫,ioctrl才是核心,camera_hw_ioctl是上層檔案操作底層硬體的方法。以上是andorid上攝像頭i2c裝置的過程。
DirectShow驅動攝像頭
對於小攝像頭的驅動有幾種方法,通過使用directshow來驅動攝像頭靈活性比較好,有簡單的方法也有比較複雜但更有效的方法,本文只介紹簡單方法,希望與大家交流!用directshow來使用攝像頭,一般要求攝像頭的驅動是wdm格式的,當然,一些比較老的驅動格式directshow也可支援。direct...
第1 5節 攝像頭驅動 USB攝像頭驅動框架
1.寫乙個usb攝像頭驅動程式 當我們把usb裝置接到電腦或板子上去時,如果這個裝置能夠被usb driver所支援 id table吻合 probe函式就會被呼叫,在probe函式裡面就可以做我們想做的事了 對於攝像頭驅動程式來說,是1.分配乙個video device結構體 2.設定這個結構體 ...
使用DirectShow驅動攝像頭
對於小攝像頭的驅動有幾種方法,通過使用directshow來驅動攝像頭靈活性比較好,有簡單的方法也有比較複雜但更有效的方法,本文只介紹簡單方法,希望與大家交流!用directshow來使用攝像頭,一般要求攝像頭的驅動是wdm格式的,當然,一些比較老的驅動格式directshow也可支援。direct...