7.13. 飛利浦網路攝像頭 (pwc 驅動)¶
本檔案包含飛利浦及 OEM 網路攝像頭的一些附加資訊。電子郵件: webcam@smcc.demon.nl 最後更新: 2004-01-19 網站: http://www.smcc.demon.nl/webcam/
截至目前,支援以下攝像頭:
Philips PCA645
Philips PCA646
Philips PCVC675
Philips PCVC680
Philips PCVC690
Philips PCVC720/40
Philips PCVC730
Philips PCVC740
Philips PCVC750
Askey VC010
Creative Labs Webcam 5
Creative Labs Webcam Pro Ex
Logitech QuickCam 3000 Pro
Logitech QuickCam 4000 Pro
Logitech QuickCam Notebook Pro
Logitech QuickCam Zoom
Logitech QuickCam Orbit
Logitech QuickCam Sphere
Samsung MPC-C10
Samsung MPC-C30
Sotec Afina Eye
AME CU-001
Visionite VCS-UM100
Visionite VCS-UC300
飛利浦驅動的主頁位於上述地址。它包含大量額外資訊、一個常見問題解答 (FAQ) 和二進位制外掛 'PWCX'。此外掛包含解壓縮例程,可讓您使用更高的影像尺寸和幀率;此外,網路攝像頭在 USB 總線上佔用的頻寬更少(如果您想同時執行多於 1 個攝像頭,這會很有用)。這些例程受 NDA 約束,因此不能以原始碼形式分發;但是,其使用是完全可選的。
您可以將此程式碼構建到核心中,或作為一個模組。我推薦後者,因為它使故障排除更容易。內建麥克風透過 USB 音訊類支援。
載入模組時,您可以為攝像頭設定一些預設設定;某些程式依賴特定的影像尺寸或格式,並且不知道如何在驅動中正確設定。選項如下:
- 尺寸 (size)
可以是 'sqcif', 'qsif', 'qcif', 'sif', 'cif' 或 'vga' 之一,分別對應影像尺寸 128x96, 160x120, 176x144, 320x240, 352x288 和 640x480 (當然,僅適用於支援這些解析度的攝像頭)。
- 幀率 (fps)
指定所需的幀率。是一個整數,範圍在 4-30 之間。
- fbufs
此引數指定用於儲存來自攝像頭幀的內部緩衝區數量。如果從攝像頭讀取影像的程序有點慢或暫時繁忙,這將有所幫助。但是,在慢速機器上它只會引入延遲,因此請謹慎選擇。預設值為 3,這是合理的。您可以將其設定為 2 到 5 之間。
- mbufs
這是一個介於 1 和 10 之間的整數。它將告訴模組為 mmap()、VIDIOCCGMBUF、VIDIOCMCAPTURE 及相關函式預留的緩衝區數量。預設值為 2,對於大多數應用程式(雙緩衝)來說已足夠。
如果您在使用 mmap() 的工具抓取影像時遇到大量“Dumping frame...”訊息,您可能需要增加它。然而,它並不會真正緩衝影像,它只是在您的程式落後時給您更多的餘地。但是您需要一個多執行緒或分叉的程式才能真正利用這些緩衝區。
絕對最大值是 10,但不要設定過高!每個緩衝區佔用 460 KB 記憶體,因此除非您有很多記憶體,否則將此值設定為大於 4 絕對是浪費。此記憶體僅在 open() 期間分配,因此當攝像頭不使用時不會浪費任何東西。
- 節能 (power_save)
當啟用節能 (設定為 1) 時,模組會嘗試在 close() 時關閉攝像頭,並在 open() 時重新啟用。這將節省電量並關閉 LED。但是並非所有攝像頭都支援此功能 (645 和 646 完全沒有節能功能),有些型號也無法工作 (它們會關閉,但永不喚醒)。請將其視為實驗性功能。預設情況下此選項停用。
- 壓縮 (compression) (僅與外掛配合使用有用)
使用此選項,您可以控制攝像頭用於透過 USB 匯流排傳輸影像的壓縮係數。您可以將引數設定在 0 到 3 之間
0 = prefer uncompressed images; if the requested mode is not available in an uncompressed format, the driver will silently switch to low compression. 1 = low compression. 2 = medium compression. 3 = high compression.高壓縮當然會佔用較少頻寬,但它也可能引入一些不必要的偽影。預設值為 2,中等壓縮。請參閱網站上的常見問題解答,瞭解哪些模式需要壓縮。
壓縮引數不適用於 645 和 646 攝像頭以及源自這些型號的 OEM 模型(只有少數幾個)。大多數攝像頭都支援此引數。
- 指示燈 (leds)
此設定需要 2 個整數,它們定義 LED 的亮/滅時間(以毫秒為單位)。您可以利用此功能讓 LED 在攝像頭使用時閃爍,這是其中一個有趣的應用。
leds=500,500
這將使 LED 每秒閃爍一次。但是使用
leds=0,0
LED 從不亮起,使其適用於靜默監控。
預設情況下,攝像頭在使用時 LED 穩定亮起,並在攝像頭不再使用時關閉。
此引數僅適用於 ToUCam 系列攝像頭 (720、730、740、750) 和 OEM 產品。對於其他攝像頭,此命令會被靜默忽略,並且無法控制 LED。
最後:此引數直到您第一次開啟攝像頭裝置時才會生效。在此之前,LED 保持亮起。
- 裝置提示 (dev_hint)
USB 裝置的一個長期存在的問題是它們的動態特性:您永遠不知道攝像頭會被分配到哪個裝置;這取決於模組載入順序、集線器配置、裝置插入順序以及月相(即它可能是隨機的)。使用此選項,您可以給驅動程式一個提示,告訴它應該為特定攝像頭使用哪個影片裝置節點 (/dev/videoX)。如果您有兩臺相同型號的攝像頭,這也很方便。
攝像頭透過其型別(來自攝像頭型號的數字,如 PCA645、PCVC750VC 等)以及可選的序列號(可在 /sys/kernel/debug/usb/devices 中檢視)指定。提示由以下格式的字串組成:
[type[.serialnumber]:]node
方括號表示型別和序列號都是可選的,但如果沒有型別,則不能指定序列號(這會毫無意義)。序列號與型別之間用“.”分隔;節點號與型別之間用“:”分隔。
這個有些神秘的語法最好通過幾個例子來解釋:
dev_hint=3,5 The first detected cam gets assigned /dev/video3, the second /dev/video5. Any other cameras will get the first free available slot (see below). dev_hint=645:1,680:2 The PCA645 camera will get /dev/video1, and a PCVC680 /dev/video2. dev_hint=645.0123:3,645.4567:0 The PCA645 camera with serialnumber 0123 goes to /dev/video3, the same camera model with the 4567 serial gets /dev/video0. dev_hint=750:1,4,5,6 The PCVC750 camera will get /dev/video1, the next 3 Philips cams will use /dev/video4 through /dev/video6.一些值得了解的要點
序列號區分大小寫,必須完整寫入,包括前導零(它被視為字串)。
如果裝置節點已被佔用,註冊將失敗,並且網路攝像頭將不可用。
您最多可以有 64 個影片裝置;如果您想分散編號,請確保在 /dev 中建立足夠的裝置節點。/dev/video9 之後是 /dev/video10(而不是 /dev/videoA)。
如果攝像頭與任何 dev_hint 不匹配,它將簡單地被分配到第一個可用的裝置節點,就像以前一樣。
- 追蹤 (trace)
為了更好地檢測問題,現在可以開啟模組進行的一些呼叫的“追蹤”;它會在核心日誌的除錯級別記錄所有專案。
追蹤變數是一個位掩碼;每個位代表一個特定的功能。如果您想追蹤某些內容,請查詢下表中對應的位值,將這些值相加,然後將結果提供給追蹤變數。
值
值
描述
預設
(十進位制)
(十六進位制)
1
0x1
模組初始化;這將在載入和解除安裝模組時記錄訊息
開
2
0x2
probe() 和 disconnect() 追蹤
開
4
0x4
追蹤 open() 和 close() 呼叫
關
8
0x8
read()、mmap() 和相關的 ioctl() 呼叫
關
16
0x10
緩衝區的記憶體分配等。
關
32
0x20
顯示下溢、上溢和 Dumping frame 訊息
開
64
0x40
顯示視口和影像尺寸
關
128
0x80
PWCX 除錯
關
例如,要追蹤 open() 和 read() 函式,將 8 + 4 = 12 相加,因此您可以在 insmod 或 modprobe 期間提供 trace=12。如果您想關閉初始化和探測追蹤,請設定 trace=0。trace 的預設值為 35 (0x23)。
示例
# modprobe pwc size=cif fps=15 power_save=1
fbufs、mbufs 和 trace 引數是全域性的,適用於所有連線的攝像頭。每個攝像頭都有自己的一組緩衝區。
size 和 fps 僅在您 open() 裝置時指定預設值;這是為了適應某些不設定尺寸的工具。您可以在 open() 之後使用 Video4Linux ioctl() 呼叫更改這些設定。預設的預設值是 QCIF 尺寸,10 fps。
壓縮引數是半全域性的;它設定所有攝像頭的初始壓縮偏好,但此引數可以透過 VIDIOCPWCSCQUAL ioctl() 呼叫為每個攝像頭設定。
所有引數都是可選的。