2012-02-26 116 views
2

我開始使用Ubuntu 10.4上的V4L2框架。捕獲攝像頭流與V4L2失敗

當前我正在使用網絡攝像頭進行一些測試。我正在按照this文檔啓動,安裝工作正常。我下載並編譯了應用程序示例。一個問題是視頻輸出,我打電話使用可執行:給這個輸出

# modprobe -r pwc 
# modprobe -v pwc fps=15 compression=3 mbufs=4 fbufs=4 size=vga 
# ./capturer_mmap -D /dev/video0 -w 640*480 -p 0 | ./viewer -w 640*480 -p 0 

enter image description here

輸出終端上:

window size 640*480 
Video bytespreline = 1280 

Display: 
Image byte order = LSBFirst 
Bitmap unit  = 32 
Bitmap bit order = LSBFirst 
Bitmap pad  = 32 

Window: 
Depth   = 24 
Red mask   = 0x00ff0000 
Green mask  = 0x0000ff00 
Blue mask  = 0x000000ff 
Bits per R/G/B = 8 
Image byte order = LSBFirst 
Bitmap unit  = 32 
Bitmap bit order = LSBFirst 
Bitmap pad  = 32 
Depth   = 24 
Red mask   = 0x00ff0000 
Green mask  = 0x0000ff00 
Blue mask  = 0x000000ff 
Bits per pixel = 32 
Bytes per line = 2560 
IsShared   = True 
XIO: fatal IO error 11 (Resource temporarily unavailable) on X server ":0.0" 
     after 431 requests (19 known processed) with 0 events remaining. 
[email protected]:/home/foo/V4l2_samples-0.4.1# ./capturer_mmap -D /dev/video0 -w 640*480 -p 0 | ./viewer -w 640*480 -p 0 
window size 640*480 
Video bytespreline = 1280 

Display: 
Image byte order = LSBFirst 
Bitmap unit  = 32 
Bitmap bit order = LSBFirst 
Bitmap pad  = 32 

Window: 
Depth   = 24 
Red mask   = 0x00ff0000 
Green mask  = 0x0000ff00 
Blue mask  = 0x000000ff 
Bits per R/G/B = 8 
Image byte order = LSBFirst 
Bitmap unit  = 32 
Bitmap bit order = LSBFirst 
Bitmap pad  = 32 
Depth   = 24 
Red mask   = 0x00ff0000 
Green mask  = 0x0000ff00 
Blue mask  = 0x000000ff 
Bits per pixel = 32 
Bytes per line = 2560 
IsShared   = True 
XIO: fatal IO error 11 (Resource temporarily unavailable) on X server ":0.0" 
     after 101 requests (19 known processed) with 0 events remaining. 

我不知道如何解決這個。我相信probrem是在C代碼中,因爲我可以使用攝像頭Chesse應用程序的攝像頭。任何幫助非常感謝。非常感謝!

+0

順便說一句,有什麼問題嗎?對於我的回答,我認爲你看到的圖像並不是你所期望的,但是從你的文章中確實不清楚(例如,當我嘗試顯示未調節的電視輸入時,我看到了類似的圖像,這非常合適) – 2012-07-19 13:29:11

回答

2

它看起來像是以完全錯誤的格式顯示圖像。

與v4l2一起工作時,你一定要檢查出「libv4l」(包裝在debian中,所以也可以在Ubuntu上使用)。 v4l2允許設備以非常大量的視頻格式輸出幀,其中一些被壓縮(例如使用jpeg)。 核心v4l2沒有提供任何手段將圖像轉換爲您的應用程序支持的給定格式,因此理論上您的應用程序必須支持所有可能的格式。爲了避免代碼重複(每個具有v4l2功能的應用程序都面臨相同的問題!),創建了libv4l:它允許對設備進行低級訪問,但同時保證可以使用幾種標準格式。 例如如果設備僅支持jpeg-output,並且您的應用請求RGB32幀,則libv4l將爲您進行透明轉換。

你甚至可以使用libv4l一些LD_PRELOAD技巧,以使其與那些沒有libv4l支持編譯應用程序的工作(只是爲了檢查我的建議是否有意義)