v4l2-ctlで設定できるパラメータ：Logicool C980 の場合

とある事情でWebaCamの明るさとか露出とかを調整したくなった。
がしかし、
* 手持ちのテレ会議用WebCamは露出調整ができない
* 手持ちの古いやつは調整できるが解像度が低い・・・
* ググっても設定できるできないが出てこない[^1]
  * Logitech/Logicool C920 無印とかちょっと古めの記事が多い

[^1]: 私の手持ちのがしょぼいだけで、普通はできるから、なのかも知れない

結局新たに Logicool C980 を買ったので、設定可能なパラメータを晒しておく。

## 環境
* ホストPC
```bash
$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04 LTS"
```
* Webcam
  * Logitech / Logicool StreamCam C980
    * https://www.logicool.co.jp/ja-jp/products/webcams/streamcam.960-001301.html
    * https://www.amazon.co.jp/dp/B086R71LGW

## 準備
v4l2-ctl を使うので v4l-utils パッケージを導入しておく。
```bash
$ sudo apt install -y v4l-tools
$ dpkg -l | grep v4l-utils
ii  v4l-utils                                     1.22.1-2build1                              amd64        Collection of command line video4linux utilities
```

## 設定
### デバイス一覧
```
$ v4l2-ctl --list-devices
Logitech StreamCam (usb-0000:00:0d.0-3.3):
        /dev/video4
        /dev/video5
        /dev/media2

Integrated_Webcam_HD: Integrate (usb-0000:00:14.0-6):
(以下略)
```
今回は /dev/video4 が対象の WebCam
Integrated_Webcam_HD はノートPCの内蔵カメラ(非対象)

### ドライバ情報
```bash
$ v4l2-ctl -d /dev/video4 --info
Driver Info:
        Driver name      : uvcvideo
        Card type        : Logitech StreamCam
        Bus info         : usb-0000:00:0d.0-3.3
        Driver version   : 5.15.35
        Capabilities     : 0x84a00001
                Video Capture
                Metadata Capture
                Streaming
                Extended Pix Format
                Device Capabilities
        Device Caps      : 0x04200001
                Video Capture
                Streaming
                Extended Pix Format
Media Driver Info:
        Driver name      : uvcvideo
        Model            : Logitech StreamCam
        Serial           : ********
        Bus info         : usb-0000:00:0d.0-3.3
        Media version    : 5.15.35
        Hardware revision: 0x00000317 (791)
        Driver version   : 5.15.35
Interface Info:
        ID               : 0x03000002
        Type             : V4L Video
Entity Info:
        ID               : 0x00000001 (1)
        Name             : Logitech StreamCam
        Function         : V4L2 I/O
        Flags            : default
        Pad 0x01000007   : 0: Sink
          Link 0x0200001f: from remote pad 0x100000a of entity 'Processing 3' (Video Pixel Formatter): Data, Enabled, Immutable
```

### パラメータ一覧
```bash
$ v4l2-ctl -d /dev/video4 -L
                     brightness 0x00980900 (int)    : min=0 max=255 step=1 default=128 value=128
                       contrast 0x00980901 (int)    : min=0 max=255 step=1 default=128 value=128
                     saturation 0x00980902 (int)    : min=0 max=255 step=1 default=128 value=128
 white_balance_temperature_auto 0x0098090c (bool)   : default=1 value=1
                           gain 0x00980913 (int)    : min=0 max=255 step=1 default=0 value=255
           power_line_frequency 0x00980918 (menu)   : min=0 max=2 default=2 value=2 (60 Hz)
                                0: Disabled
                                1: 50 Hz
                                2: 60 Hz
      white_balance_temperature 0x0098091a (int)    : min=2000 max=7500 step=1 default=4000 value=4000 flags=inactive
                      sharpness 0x0098091b (int)    : min=0 max=255 step=1 default=128 value=128
         backlight_compensation 0x0098091c (int)    : min=0 max=1 step=1 default=0 value=0
                  exposure_auto 0x009a0901 (menu)   : min=0 max=3 default=3 value=3 (Aperture Priority Mode)
                                1: Manual Mode
                                3: Aperture Priority Mode
              exposure_absolute 0x009a0902 (int)    : min=3 max=2047 step=1 default=250 value=250 flags=inactive
         exposure_auto_priority 0x009a0903 (bool)   : default=0 value=0
                   pan_absolute 0x009a0908 (int)    : min=-36000 max=36000 step=3600 default=0 value=0
                  tilt_absolute 0x009a0909 (int)    : min=-36000 max=36000 step=3600 default=0 value=0
                 focus_absolute 0x009a090a (int)    : min=0 max=255 step=1 default=0 value=0 flags=inactive
                     focus_auto 0x009a090c (bool)   : default=1 value=1
                  zoom_absolute 0x009a090d (int)    : min=100 max=400 step=1 default=100 value=100
```
* brightness: 輝度、明るさ
* contrast: コントラスト
* saturation: 彩度、鮮やかさ
* white_balance_temperature_auto: 自動ホワイトバランス設定
  * 0 で OFF
* gain: ゲイン
* power_line_frequency: 交流電源フリッカ対策
  * 蛍光灯のちらつき対策
* white_balance_temperature: ホワイトバランス色温度
* sharpness: シャープネス、輪郭強調
* backlight_compensation: バックライト補正
  * 0 で無効
* exposure_auto: 自動露出機能
  * 1 でマニュアルモード(固定値)
* exposure_absolute: 露出値
* exposure_auto_priority: 自走露出優先
* pan_absolute: パン
* tilt_absolute: チルト
* focus_absolute: フォーカス値
* focus_auto: 自動フォーカス設定
  * 0 で OFF
* zoom_absolute: ズーム値

## 設定例
暗い部屋の中でテカテカに光るLCDパネルを撮影すると表示物が光りすぎて白飛びする。
自動露出では対応しきれないみたいなので、露出を固定して抑えてやると綺麗に撮影される。
LCD付属のタッチパネルをちょこちょこ操作するとオートフォーカスが過敏に反応するのでこれもOFF。
```bash
## 自動露出停止
$ v4l2-ctl -d /dev/video4 -c exposure_auto=1
## 露出値変更
$ v4l2-ctl -d /dev/video4 -c exposure_absolute=100
## オートフォーカス停止
$ v4l2-ctl -d /dev/video4 -c focus_auto=0
```