目前AI視覺以及短視頻相關的應用都和相機有關,涉及到相機的調用,Surface渲染,視頻錄製等功能,這裏做了一個Demo項目,基本包含了Android相機應用涉及的所有技術。
https://github.com/dingjikerbo/Android-Camera
Android Camera Demos
一、相機預覽
序號 | 項目名稱 | 內容簡介 |
---|---|---|
1 | GLSurfacePreview | 拿到相機幀數據,直接繪製到屏幕 |
2 | GLSurfacePreview2 | 拿到相機幀數據,先繪製到FBO,離線處理後(變紅)繪製到屏幕 |
3 | GLSurfacePreview3 | 直接給相機的預覽紋理繪製到屏幕 |
4 | SurfacePreview | 拿到相機幀數據,直接繪製到屏幕 |
5 | SurfacePreview2 | 拿到相機幀數據,先繪製到PBuffer,再繪製到屏幕 |
6 | MultiSurfacePreview | 拿到相機幀數據,先轉成紋理,再分別繪製到兩個SurfaceView |
二、RGB轉換
利用GPU將相機幀(NV21)轉成RGB並傳至CPU,分辨率爲1920 * 1080,RGBA
另開一個線程做RGB轉換,不然如果和相機共用上下文,渲染時需要來回切換,且可能阻塞相機渲染,對性能不利。
序號 | 模塊名稱 | 內容簡介 |
---|---|---|
1 | RgbConverter1 | 直接readPixels,~30ms |
2 | RgbConverter2 | 從Pbuffer調readPixels,性能有較大提升,~30ms |
3 | RgbConverter3 | 從FBO調readPixels,性能比PBuffer稍好一點,~27ms |
4 | RgbConverter4 | 從FBO讀到PBO,readPixels阻塞, glMapBuffer阻塞,~11ms |
5 | RgbConverter5 | 從Pbuffer讀到PBO,readPixels異步, glMapBuffer阻塞,~6ms |
三,視頻錄製
序號 | 項目名稱 | 內容簡介 |
---|---|---|
1 | recorder1 | 錄製相機預覽以及音頻 |
2 | recorder2 | 錄製紋理以及音頻 |
有問題或建議可以給我郵件
Email: [email protected]