Camera知識相關

1、分辨率(Resolution)

        所謂分辨率就是指畫面的解析度,由多少象素構成的數值越大,圖像也就越清晰。分辨率不僅與顯示尺寸有關,還會受到顯像管點距、視頻帶寬等因素的影響。我們通常所看到的分辨率都以乘法形式表現的,比如1024*768,其中的1024表示屏幕上水平方向顯示的點數,768表示垂直方向的點數。

QXGA (2048 X 1536)又稱300萬像素

UXGA (1600X 1200)又稱200萬像素

SXGA(1280 x1024)又稱130萬像素

XGA(1024 x768)又稱80萬像素

SVGA(800 x600)又稱50萬像素

VGA(640x480)又稱30萬像素(35萬是指648X488)

CIF(352x288) 又稱10萬像素

SIF/QVGA(320x240)

QCIF(176x144)

QSIF/QQVGA(160x120)

 

2、Mipi接口介紹:

MIPI,即移動產業處理器接口(Mobile Industry Processor Interface 簡稱MIPI)聯盟, 是類似SMIA的一個LVDS的一種接口,主要用在手機Camera Module上居多。

        就CameraModule而言,現在Micorn和OV(omni vision)均推出支持MIPI接口的Sensor如Micorn的MT9D112,MT9T111和OV的OV2650等,對於低像素的Sensor似乎MIPI的優勢不是很明顯哦,但是在3MP以上就可能有些優勢了。

        優勢-1,Camera的佈線大大減少。並口的數據接口,如果是YUV輸出至少爲8個數據Bit、2個Clock(MCLK和PCLK)、I2C兩個、同步信號2個,再加地和電源等,如果換成MIPI的串口,可以減少2個同步信號,8個數據Bit變爲DOUT_P、DOUT_N、CLK_P、CLK_N,PCLK也可以不要,卓實少了很多,佈線自然方便許多。

       優勢-2,Noise的減少。走線越多被幹擾的可能就越多,走線少了於是干擾就少了,同時MIPI信號是DOUT_N和DOUT_P成對走線,需要考慮impedance,兩根線從波形看是成反相,所以有外部干擾過來,就會被抵消很大部分,同時MIPI的信號屬於LVDS(Low Voltage Differential Signaling:低壓差分信號傳輸)底到MV的等級,於是他本身對於外部的干擾也是很小的。

       優勢-3,傳輸速度極快,從並口到串口,當然要足夠大的速度,MIPI的理論上的速度可以到80MB/s-1GB/s,實際也在600-800MB/s,而傳統的並口再高也不過600MB/s了吧。

      優勢-4,功耗低。並口的Camera,只要上電,給Clock於是PCLK就有輸出,Data也會由輸出,抓不到同步就成不了像,但是數據還是輸出,於是就要功耗。而MIPI理論上靜態是沒有功耗的。

3.  V4L2

3.1.  V4L2

Video4linux2(簡稱V4L2),是linux中關於視頻設備的內核驅動。在Linux中,視頻設備是設備文件,可以像訪問普通文件一樣對其進行讀寫,攝像頭在/dev/video0下

3.1.1.   一般操作流程(視頻設備):

1.打開設備文件。 int fd=open(”/dev/video0″,O_RDWR);

   打開視頻設備

   在V4L2中,視頻設備被看做一個文件。使用open函數打開這個設備:

// 用非阻塞模式打開攝像頭設備

int cameraFd;

cameraFd = open(“/dev/video0″, O_RDWR | O_NONBLOCK, 0);

// 如果用阻塞模式打開攝像頭設備,上述代碼變爲:

//cameraFd = open(”/dev/video0″, O_RDWR, 0); 

    關於阻塞模式和非阻塞模式

    應用程序能夠使用阻塞模式或非阻塞模式打開視頻設備,如果使用非阻塞模式調用視頻設備,即使尚未捕獲到信息,驅動依舊會把緩存(DQBUFF)裏的東西返回給應用程序。

 

2.取得設備的capability,看看設備具有什麼功能,比如是否具有視頻輸入,或者音頻輸入輸出等。VIDIOC_QUERYCAP,struct v4l2_capability

3.設置視頻的制式和幀格式,制式包括PAL,NTSC,幀的格式個包括寬度和高度等。

VIDIOC_S_STD,VIDIOC_S_FMT,struct v4l2_std_id,struct v4l2_format

4.向驅動申請幀緩衝,一般不超過5個。struct v4l2_requestbuffers

5.將申請到的幀緩衝映射到用戶空間,這樣就可以直接操作採集到的幀了,而不必去複製。mmap

6.將申請到的幀緩衝全部入隊列,以便存放採集到的數據.VIDIOC_QBUF,struct v4l2_buffer

7.開始視頻的採集。VIDIOC_STREAMON

8.出隊列以取得已採集數據的幀緩衝,取得原始採集數據。VIDIOC_DQBUF

9.將緩衝重新入隊列尾,這樣可以循環採集。VIDIOC_QBUF

10.停止視頻的採集。VIDIOC_STREAMOFF

11.關閉視頻設備。close(fd);

3.1.2.   在進行V4L2開發中,一般會用到以下的命令標誌符:

1 VIDIOC_REQBUFS:分配內存

2 VIDIOC_QUERYBUF:把VIDIOC_REQBUFS中分配的數據緩存轉換成物理地址

3 VIDIOC_QUERYCAP:查詢驅動功能

4 VIDIOC_ENUM_FMT:獲取當前驅動支持的視頻格式

5 VIDIOC_S_FMT:設置當前驅動的頻捕獲格式

6 VIDIOC_G_FMT:讀取當前驅動的頻捕獲格式

7 VIDIOC_TRY_FMT:驗證當前驅動的顯示格式

8 VIDIOC_CROPCAP:查詢驅動的修剪能力

9 VIDIOC_S_CROP:設置視頻信號的邊框

10 VIDIOC_G_CROP:讀取視頻信號的邊框

11 VIDIOC_QBUF:把數據從緩存中讀取出來

12 VIDIOC_DQBUF:把數據放回緩存隊列

13 VIDIOC_STREAMON:開始視頻顯示函數

14 VIDIOC_STREAMOFF:結束視頻顯示函數

15 VIDIOC_QUERYSTD:檢查當前視頻設備支持的標準,例如PAL或NTSC。

這些IO調用,有些是必須的,有些是可選擇的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章