android camera hal通過v4l2接口與核心camera driver互動。本文從linux應用開發者的角度審視android
camera子系統。
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);