現在の問題と症状: それぞれ見つけました。個人のRaspbianで物理USBウェブカメラを接続しましたが、カップルそんな/開発者/ビデオデバイスが作成されました。 1つの実際のカメラを使用して画像をキャプチャしようとするときウェブカメラ次のいずれかを指定して/開発者/ビデオ一対のデバイスでは、そのうちの1つは次のエラーで失敗します。I/Wエラーもう一つは成功するでしょう。
私が助けたいもの: エラーの発生を防ぎ、呼び出すためにどのペアが失敗するかを検出/プリセットする方法を探しています。ウェブカメラ会員に異議を申し立てる/開発者/ビデオペアが機能します。
背景: マルチカメラアレイに使用するUSBウェブカメラがいくつかあります。ループ内の各カメラから画像をキャプチャしたいです。私はそれぞれを繰り返そうとしました。/開発者/ビデオデバイスを検索し、このペアリングを見つけました。/開発者/ビデオ各カメラのデバイス名は成功し、他のカメラは失敗します。
これウェブカメラ呼び出しの失敗(つまり、ioctlエラーが発生した場合)は、次のメッセージを生成します。
入力0を照会できません。
VIDIOC_ENUMINPUT:デバイスのioctlが不適切です。
フルリクエスト: 誰が私に簡単な方法を提供できますか?grepまたは探す/dev/video*または/sys/class/video4linux/のすべての「有効な」デバイス/fswebcamが要求した有効なデバイスでない場合は、エラーなしでtreeまたは単純なシェルコマンドを使用して通知できますか?
追加情報: 以下に出力を示します。v4l2-ctl各デバイスを照会して表示されます。
これv4l2-ctl出力/開発者/ビデオ*そうだろう成功:
$ v4l2-ctl --device=/dev/video0 --all
Driver Info (not using libv4l2):
Driver name : uvcvideo
Card type : UNIQUESKY_CAR_CAMERA: Integrate
Bus info : usb-3f980000.usb-1.2.1
Driver version: 4.19.58
Capabilities : 0x84A00001
Video Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04200001
Video Capture
Streaming
Extended Pix Format
Priority: 2
Video input : 0 (Camera 1: ok)
Format Video Capture:
Width/Height : 1920/1080
Pixel Format : 'MJPG'
Field : None
Bytes per Line : 0
Size Image : 4147200
Colorspace : sRGB
Transfer Function : Default
YCbCr/HSV Encoding: Default
Quantization : Default
Flags :
Crop Capability Video Capture:
Bounds : Left 0, Top 0, Width 1920, Height 1080
Default : Left 0, Top 0, Width 1920, Height 1080
Pixel Aspect: 1/1
Selection: crop_default, Left 0, Top 0, Width 1920, Height 1080
Selection: crop_bounds, Left 0, Top 0, Width 1920, Height 1080
Streaming Parameters Video Capture:
Capabilities : timeperframe
Frames per second: 30.000 (30/1)
Read buffers : 0
brightness (int) : min=-64 max=64 step=1 default=-8193 value=0
contrast (int) : min=0 max=95 step=1 default=57343 value=0
saturation (int) : min=0 max=100 step=1 default=57343 value=80
hue (int) : min=-2000 max=2000 step=1 default=-8193 value=0
white_balance_temperature_auto (bool) : default=1 value=1
gamma (int) : min=64 max=300 step=1 default=57343 value=84
gain (int) : min=1 max=8 step=1 default=57343 value=1
power_line_frequency (menu) : min=0 max=2 default=1 value=1
white_balance_temperature (int) : min=2800 max=6500 step=1 default=57343 value=3980 flags=inactive
sharpness (int) : min=1 max=7 step=1 default=57343 value=2
backlight_compensation (int) : min=0 max=128 step=0 default=20478 value=0
exposure_auto (menu) : min=0 max=3 default=0 value=3
exposure_absolute (int) : min=10 max=626 step=1 default=156 value=156 flags=inactive
次の問題を引き起こす代替デバイスを試してみると、次のものが返されます。次のエラーにより ioctl が失敗しました。
$ v4l2-ctl --device=/dev/video1 --all
Driver Info (not using libv4l2):
Driver name : uvcvideo
Card type : UNIQUESKY_CAR_CAMERA: Integrate
Bus info : usb-3f980000.usb-1.2.1
Driver version: 4.19.58
Capabilities : 0x84A00001
Video Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04A00000
Streaming
Extended Pix Format
Priority: 2
.
2つのv4l2-ctl出力間の重要な違いは、「ビデオキャプチャ」機能が2番目の/ dev / video *オブジェクトの「Device Caps」の下には存在せず、最初のデバイスの「Device Caps」の下にあることです。確かにウェブカメラデバイスに「ビデオキャプチャ」機能があると予想して要求し、「デバイスキャップ」がないと、IOCTLエラーが発生します。
残念ながら、v4l2-cntl出力は非常に冗長であり、「ビデオキャプチャ」という用語は「機能」の下の2つのリストに表示されます。ただし、1つの場合にのみ「Device Caps」の下に再び表示されます。
これにより、grepのようなものを使用してテストを作成することがより困難になり、これらのレポート形式の変更によってそれに基づくテストが不安定になる可能性があることが心配されます。デバイスキャップのみを検索する方法はありますか?
この機能を備えたカメラのリストを作成したいのですが、どうすればいいかわかりません。現在の最良の解決策は、「ビデオキャプチャ」が2回リストされているものを見つけることです。
答え1
カメラの場合、通常、最初のデバイスは実際のスペースをキャプチャすることです。
したがって、ls /dev/video
リストが生成され、リストの最初の項目がキャプチャされます。