Video4Linux2 に関するドキュメントがこれほど多く見つかるのは驚くべきことですが、内容を実際に説明しているものはありません。 Video4Linux は .
まず、Video4Linux2 は Linux ドライバーのフレームワークです。 .フレームワーク ドライバーは、実際にはデバイスを直接制御しません。代わりに、何らかのクラスのデバイス (この場合はアプリケーションが使用するビデオ デバイス) の抽象モデルを提供します。ドライバー フレームワークには、次の 3 つの主な利点があります。
<オール>したがって、V4L2 ドライバーは、UVC ドライバーを駆動する高レベルのドライバーであり、さらに低レベルのハードウェア ドライバーを駆動している可能性のある USB ドライバーを駆動します。
このマトリョーシカ モデルは、Linux カーネル ドライバー ツリーでは非常に一般的です。 V4L2 はより複雑な例の 1 つです。これは、一部のカメラ デバイスが サブデバイス の大規模なグループにアクセスする必要があるためです。 カメラを制御し、画像プロセッサなどのさまざまなコンポーネント間でカメラの出力をルーティングするいくつかのレイヤーで。
V4L2 ドライバーを経由せずに、デバイス ファイルと「ioctl」システム コールを使用してユーザー空間から UVC ドライバーに直接アクセスできます。また、デバイス ファイルと「ioctl」を使用して、ユーザー空間から基になる USB ドライバーに直接アクセスすることもできます。
V4L2 は幅広いデバイスに共通の機能を提供する一般的なフレームワークであるため、すべてを提供するわけではありません。 UVC ドライバーができる機能の 提供します (デバイスが V4L2 のサポートに必要な以上の UVC 機能を実際に提供していると仮定します)。
したがって、UVC 仕様で指定されたすべての機能を提供する UVC デバイスを使用する場合、これらの機能の一部を実際に使用するには、デバイス ファイルと「ioctl」システムを介して直接 UVC ドライバーにアクセスする必要があります。ただし、Linux カーネル UVC ドライバーが実際にすべての UVC 仕様をサポートしていると仮定します。
ただし、
の意味は <ブロック引用>uvcvideo ドライバーの実装は、V4L2 API のみに準拠しています
現在の Linux カーネルの UVC ドライバーは、実際には V4L2 に必要な以上の UVC 機能サポートを提供していないということです。
カーネルでの V4L2 サポート自体は、UVC または USB のサポート、または低レベルの USB ハードウェアのサポートを提供しません。
USB ビデオ クラス (UVC) は仕様です。 USB Webカメラなどが準拠するはずです。このようにして、UVC 準拠デバイスのサポートを実装する任意のシステムで使用できます。
V4L2 は、Linux UVC 実装が依存する Linux カーネル ビデオ サブシステムです。つまり、カーネル内 UVC サポートには V4L2 が必要ですが、その逆は必要ありません。
V4L2 API は ユーザー空間 を参照します プログラミング インターフェイス、ここに文書化されています。