天天看點

Android Camera子系統之Linux C應用開發者View

android camera hal通過v4l2接口與核心camera driver互動。本文從linux應用開發者的角度審視android

camera子系統。

Android Camera子系統之Linux C應用開發者View

v4l2應用開發一般流程:

1. 打開裝置檔案。 int fd=open("/dev/videox″,o_rdwr);

2.取得裝置的capability,看看裝置具有什麼功能,比如是否具有視訊輸入,或者音頻輸入輸出等。vidioc_querycap,structv4l2_capability

3.選擇視訊輸入,一個視訊裝置可以有多個視訊輸入。vidioc_s_input,struct v4l2_input

4.設定視訊的制式和幀格式,制式包括pal,ntsc,幀的格式包括寬度和高度等。 vidioc_s_std,vidioc_s_fmt,structv4l2_std_id,struct v4l2_format 

5. 向驅動申請幀緩沖,一般不超過5個。vidioc_reqbufs,

struct v4l2_requestbuffers

6.将申請到的幀緩沖映射到使用者空間,這樣就可以直接操作采集到的幀了,而不必去複制。mmap

7.将申請到的幀緩沖全部入隊列,以便存放采集到的資料.vidioc_qbuf,struct v4l2_buffer

8.開始視訊的采集。vidioc_streamon

9.出隊列以取得已采集資料的幀緩沖,取得原始采集資料。vidioc_dqbuf

10.将緩沖重新入隊列尾,這樣可以循環采集。vidioc_qbuf

11.停止視訊的采集。vidioc_streamoff

12.關閉視訊裝置。close(fd);