手元にある UVC デバイスの構成を dot で書きだして graphviz してみたのがこれ。イメージしやすいかな?
https://www.usb.org/document-library/video-class-v15-document-set
仕様読めば概念はわかりやすい書いてあるので細かく書く必要はないけど、ざっと読んだ感じを記録しておく。
Video のストリーム以外のところ、つまりカメラなどをコントロールするプロトコルを見ていく。
コントロールするインターフェイスには Video Interface Class / Video Control Subclass がついている。
UVC は「Unit」を組合せてデバイスを表現するようになっている。これは USB の仕様にある device / configuration / interface に、さらに加えて存在している。
「Unit」は動画機能の構成する基本ブロックで、1つ以上の入力と、ただ1つの出力を持つ。
「Terminal」は入力または出力いずれか1つしかない Unit の一種。
- Input Terminal (IT)
- Output Terminal (OT)
- Camera Terminal (CT)
- Processing Unit (PU)
- Selector Unit (SU)
- Encoding Unit
- Extension Unit (XU)
Camera Terminal は Input Terminal の一種で、典型的な webcam は以下のような構成になる。
- Camera Terminal → Processing Unit → Output Terminal (→ エンドポイント)
Camera Terminal には以下のような「コントロール」がついており、パラメータを操作することができる。
- Scanning Mode (Progressive or Interlaced)
- Auto-Exposure Mode
- Auto-Exposure Priority
- Exposure Time
- Focus
- Auto-Focus
- Simple Focus
- Iris
- Pan
- Roll
- Tilt
- Digital Windowing
- Region of Interest
- Zoom
Processing Unit は入力を処理して出力するための画像処理 Unit で、以下のようなコントロールがついている。基本的に PC 側でもできるような処理。
- Brightness
- Hue
- Saturation
- Sharpness
- Gamma
- Digital Multiplier (Zoom)
- White Balance Temperature
- White Balance Component
- Backlight Compensation
- Contrast
- Gain
- Power Line Frequency
- Analog Video Standard
- Analog Video Lock Status
プロトコル上、これらのコントロールは属するものが違うので、ちゃんと区別してコントロールする必要がある。