Google Meet ハードウェア USB Video Class Extension Unit API

このドキュメントでは、Google Meet 会議システムでインテリジェントなカメラ機能を有効にするために使用される、サポートされている USB Video Class Extension Unit(XU)API について概説します。この仕様の作成目的は、これらの機能を有効にする方法に影響を与え、パートナーが非同期スケーラビリティとテストを改善できるようにすることです。

このドキュメントの最新の変更内容については、リリースノートをご覧ください。

テスト施設

パートナーがこの仕様に準拠していることを確認できるように、デベロッパー モードで設定された Chromebox-for-Meetings デバイスにテスト機能を用意しています。ファイル システムへの書き込みを有効にします。/etc/chrome_dev.conf に次の行を追加します。

--enable-logging
--log-level=0

デバイスを再起動し、カメラと USB キーボードを接続して Ctrl-Alt-X を押すと、アクティブなカメラの仕様への準拠が確認され、/home/chronos/user/log/chrome に記録されます。

リトル エンディアン規則

USB はリトル エンディアン標準です。このドキュメント内:

  • マルチバイト数はビッグエンディアンで表示され(リトルエンディアンで送信されます)。
  • バイト配列はリトル エンディアンのメモリ レイアウトです。

たとえば、0x12345678[0x78, 0x56, 0x34, 0x12] と同じです。

拡張ユニットの GUID

この Meet XU コントロール仕様をサポートする拡張ユニットは、この GUID を使用する必要があります。

拡張ユニット GUID
周辺機器制御 XU {74D7E924-49C9-4A45-98A3-8A9F60061E83}

周辺機器制御の XU セレクタ

これらは、定義されたペリフェラル制御 XU セレクタです。

コントロール セレクタ
GOOGXU_FRAME_STRATEGY 0x01
GOOGXU_REFRAME 0x02
GOOGXU_OCCUPANCY_COUNTING_TOGGLE 0x03
GOOGXU_OCCUPANCY_COUNTING_READ 0x04
GOOGXU_STATUS_INFO 0x05
GOOGXU_STATUS_RESET 0x06
GOOGXU_PRESETS 0x07
GOOGXU_PAN_TILT_ABSOLUTE 0x08
GOOGXU_PAN_TILT_RELATIVE 0x09

コントロール リクエストのタイプ

制御リクエストのタイプは、UVC 1.5 クラス仕様の第 4 章「クラス固有のリクエスト」で定義されています。

オペレーション UVC コントロール
GET GET_CURGET_MINGET_MAXGET_RESGET_LENGET_INFOGET_DEF
SET SET_CUR

カメラモード

カメラモードは、会議室内の個人をフレームに収めるために使用され、次のいずれかのtupleです。

  • 戦略(カメラビュー)
  • バイアス(スピーカーまたは部屋)
  • フィード(単一または複数のストリーム)

各ディメンションには、次のセクションで説明する値を指定できます。

オート フレーミング戦略

機能 説明
なし カメラでは、すべてのインテリジェント フレーミング機能が無効になり、クライアントは PTZ 値を自由に制御できます。
注: このフレーミング戦略に設定すると、カメラの現在のパン、チルト、ズームの位置が維持されます。
追尾フレーミング(CAZ) フレーミング バイアスに基づいて、カメラは部屋内の人物を継続的に追跡します。
注: このモードでは PTZ は無効になります。
分割フレーム カメラは、必要な数の動画ビューを作成します。[フィードのオート フレーミング] オプションに基づいて、フィードを 1 つのストリームでタイルに分割するか、視聴ごとに個別の動画ストリームを作成します。
注: このモードでは PTZ は無効になります。
動的ビュー 1 つ以上のカメラが部屋のベストショットを撮影しようとします。複数のフィードを 1 つに合成するか、現在の部屋の「興味深い」視点を提供するかを決定できます。
このビューの目的は、会議に参加している部屋内の参加者を最も公平に表示することです。
注:
  • ほとんどの会議でこの戦略を使用する必要があります。
  • このモードでは PTZ は無効になります。

オート フレーミングのバイアス

機能 説明
ハイステークス プレゼンター(スピーカー トラッキング) カメラは、部屋の中で発言している人を最適なフレーム内に収めようとします。
このシナリオでは、カメラはプレゼンターの方を向ける必要があります。たとえば、会議室でプレゼンテーションを行う CEO などです。
コラボレーション
(部屋の追跡)
カメラは、部屋内のすべての参加者をフレームに収めようとします。このシナリオでは、カメラはすべての参加者を公平に扱う必要があります。ほとんどの会議でこの戦略を使用する必要があります。

オート フレーミング フィード

機能 説明
シングル ストリーム カメラは単一の動画ストリームをホストデバイスに送信します。
マルチストリーム
(開発中)
カメラはストリームを分割し、複数の動画ストリームを作成してホストに送信します。
注: この機能の完全な仕様と想定される動作は審査中であり、このドキュメントの今後の改訂版までサポートされていません

オート フレーミング モードのビットマップ値

空のバイト配列で表されるデフォルトの状態 None を除き、バイト配列の各ビットは、自動フレーミング戦略自動フレーミング バイアス自動フレーミング フィードの特定の組み合わせである、異なるカメラモードを表します。

ビット インデックス CAZ スプリット フレーム ダイナミック -
スピーカー D1
-
-
-
D5
D6
シングル ストリーム
マルチ ストリーム
Room D2
-
D3
D4
D7
D8
[シングルストリーム]
[マルチストリーム]
フレームモード フレームモード値(最下位バイト)
None 0x00
CAZ, Speaker, Single-Stream 0x01
CAZ, Room, Single-Stream 0x02
Split-Frame, Room, Single-Stream 0x04
Split-Frame, Room, Multi-Stream 0x08
Dynamic, Speaker, Single-Stream 0x10
Dynamic, Speaker, Multi-Stream 0x20
Dynamic, Room, Single-Stream 0x40
Dynamic, Room, Multi-Stream 0x80

コントロール: GOOGXU_FRAME_STRATEGY

このコントロールは、自動フレーミング モードのビットマップ値に記載されているように、カメラのフレーミング モードを取得または設定するために使用されます。各モードは、それぞれのビットマップ内のビットで表されます。コマンド GET_RES は、8 バイトの長さのビットマスクを返します。このビットマスクの値は 0 または 1 で、デバイスで機能がサポートされているかどうかを示します。たとえば、カメラが CAZ, Speaker, Single-StreamSplit-Frame, Room, Single-StreamDynamic, Room, Multi-Stream をサポートしていて、他のモードはサポートしていない場合、GET_RES は 0x000000000000000085 を返します(つまり、0b10000101 の後に 0 バイトが 7 つ続きます)。

コマンド SET_CUR は、ビットマップを送信し、どの SINGLE カメラモードを有効にするかをカメラに伝えるために使われます。

コントロール セレクタ 1
オペレーション GET / SET
wLength 8
オフセット フィールド サイズ 説明
0 bActiveMode 8 ビットマップ アクティブ カメラ モードを設定または復元する
注:

サポートされているリクエスト タイプの動作は次のとおりです。

オフセット 0 説明
GET_CUR アクティブ フレーミング カメラ モードを取得する
GET_MIN カメラに依存
GET_MAX カメラに依存
GET_RES サポートされているカメラモードの 8 バイトの長さのビットマスクを返します。
GET_LEN 0x0008 長さ
GET_INFO 0x0B AutoUpdate / Write / Read
GET_DEF 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00
デフォルト値
SET_CUR アクティブ フレーミング カメラモードを設定する

コントロール: GOOGXU_REFRAME

このコントロールは、ワンショット フレーミング(OTAZ)をトリガーするために使用されます。OTAZ がトリガーされると、カメラ ビューは部屋のベスト ビューにスナップされます。その後、クライアントは PTZ 値を再び制御できるようになります。ワンショット フレーミングがサポートされていない場合、カメラでこのコントロールを定義しないでください。

コントロール セレクタ 2
オペレーション SET
wLength 1
オフセット フィールド サイズ 説明
0 bReframe 1 数値 0x01 再フレーム リクエストの実行

サポートされているリクエスト タイプの動作は次のとおりです。

オフセット 0 説明
GET_MIN 0x00
GET_MAX 0x01
GET_RES 0x01
GET_LEN 0x0001
GET_INFO 0x02 書き込みのみ
GET_DEF 0x00
SET_CUR ワンショット フレーミングのリクエストを設定する

在室人数のカウント

座席数カウント(OC)は、カメラの切り抜きビューに関係なく、会議室の参加者数を推定する機能です。

次の表に、OC コントロールの想定される動作と、カメラの動画ストリームとカメラの LED インジケータとの相互作用を示します。

利用人数のカウントが カメラの動画ストリームが次の状態である場合: カメラの LED インジケーターは GOOGXU_OCCUPANCY_COUNTING_TOGGLE GET_CUR GOOGXU_OCCUPANCY_COUNTING_READ GET_CUR
有効 ストリーミングされておらず、ミュートされていない オン 0x01 カメラの全視野に写っている人物の数。
有効 ストリーミング オン 0x01 カメラの全視野に写っている人物の数。
有効 ミュート中 オフ 0x01 通知 OFF
通知 OFF ストリーミングされておらず、ミュートされていない オフ 0x00 通知 OFF
通知 OFF ストリーミング オン 0x00 通知 OFF
通知 OFF ミュート中 オフ 0x00 通知 OFF

コントロール: GOOGXU_OCCUPANCY_COUNTING_TOGGLE

このコントロールは、部屋の居住者をカウントする機能を有効または無効にするために使用します。値を 0 に設定するとこの機能は無効になり、1 に設定するとこの機能が有効になります。この機能がサポートされていない場合、カメラはこのコントロールを定義しないでください。

コントロール セレクタ 3
オペレーション GET / SET
wLength 1
オフセット フィールド サイズ 説明
0 bOccupancy 1 ブール値 在室人数カウント機能を設定
0x00 機能をオフ
0x01 機能をオン

サポートされているリクエスト タイプの動作は次のとおりです。

オフセット 0 説明
GET_CUR 利用人数のカウントがオンかどうかを返します
GET_MIN 0x00
GET_MAX 0x01
GET_RES 0x01
GET_LEN 0x0001
GET_INFO 0x0B AutoUpdate / Write / Read
GET_DEF 0x00
SET_CUR 占有者数カウント機能を有効または無効にする

コントロール: GOOGXU_OCCUPANCY_COUNTING_READ

このコントロールは、利用人数のカウントが有効になっているときに、カメラから報告される部屋内の参加者数を読み取るために使用されます。利用人数のカウントが無効になっている場合、カメラはこのコントロールを無効にする必要があります。在室人数のカウントがサポートされていない場合、カメラはこのコントロールを定義しないでください。

コントロール セレクタ 4
オペレーション GET
wLength 2
オフセット フィールド サイズ 説明
0 bNumPeople 2 数値 検出された室内にいる人数。(読み取り専用)

サポートされているリクエスト タイプの動作は次のとおりです。

オフセット 0 説明
GET_CUR 検出された居住者の数を返す
GET_MIN 0x0000
GET_MAX 0x00FF
GET_RES 0x0001
GET_LEN 0x0002
GET_INFO 0x09 AutoUpdate / Read
GET_DEF 0x0000

デバイスのテレメトリーと診断

これらのコントロールは、Meet ハードウェアでより優れたデバッグ方法を促進することを目的としており、通常はユーザー向けではありません。

コントロール: GOOGXU_STATUS_INFO

このコントロールは、ホストカメラから情報をクエリして、デバッグのためにパートナーと共有するために使用されます。

コントロール セレクタ 5
オペレーション GET
wLength 8
オフセット フィールド サイズ 説明
0 bNumCameras 1 数値 ホストに返されるカメラ ストリームに影響する可能性がある、メインカメラに接続されている追加の衛星の数。
1 bIsMoving 1 ビットマップ カメラがアイドル状態のときは 0、PTZ 値が変化しているときはゼロ以外です。ベンダーは、異なる軸やモーターを異なるビットに自由にマッピングできます。
2 Undef 6 未定義 今後延長予定。

サポートされているリクエスト タイプの動作は次のとおりです。

オフセット 0 1 2 説明
GET_MIN 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00
GET_MAX 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF
GET_RES 0x01 0x01 0x01 0x00 0x00
0x00 0x00 0x00
GET_LEN 0x08 0x00 0x0008
GET_INFO 0x09 AutoUpdate / Read
GET_DEF 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00

コントロール: GOOGXU_STATUS_RESET

このコントロールは、カメラにリセット リクエストを発行するために使用されます。値を 1 に設定すると、カメラの再起動がリクエストされます。前回の再起動以降にカメラの再起動リクエストがない場合、カメラはゼロ(0)を返します。再起動中の場合は 1 を返します。リセットによってカメラの再起動がトリガーされる必要があります。(これは、USB 接続を強制的に切断してホットプラグをエミュレートしても意味がない自給型デバイスに必要です)。

コントロール セレクタ 6
オペレーション GET / SET
wLength 1
オフセット フィールド サイズ 説明
0 bResetRequest 1 ブール値 ホストと接続されたカメラにリセット リクエストを送信します。
前回の再起動以降にリセット リクエストが発行された場合は 0x01、それ以外の場合は 0x00 を返します。

サポートされているリクエスト タイプの動作は次のとおりです。

オフセット 0 説明
GET_MIN 0x00
GET_MAX 0x01
GET_RES 0x01
GET_LEN 0x0001
GET_INFO 0x03 書き込み / 読み取り
GET_DEF 0x00

PTZ プリセット

カメラの画角を構成して、プリセットの位置に復元するために使用します。

コントロール: GOOGXU_PRESETS

このコントロールは、カメラのパン、チルト、ズーム(PTZ)の値をプリセット構成に設定するために使用します。

Preset Action は、コマンドの目的のアクションを指定するために使用されます。値を 1 に設定すると、現在のパン、チルト、ズームの値が指定されたプリセット インデックスにマッピングされます。値を 2 に設定すると、カメラのパン、チルト、ズームが、指定されたインデックスに対して以前にマッピングされた値、またはデフォルトの工場座標(まだマッピングされていない場合)に移行されます。値を 3 に設定すると、インデックスは出荷時のデフォルトの座標にリセットされます。

Preset Index は、インデックスにマッピングされた PTZ 座標を指定するために使用されます。Preset index がゼロ(0)の場合、ホーム座標にマッピングされ、GOOGXU_FRAME_STRATEGYNONE に設定されている場合、カメラの起動時のデフォルトの位置になります。

コントロール セレクタ 7
オペレーション SET
wLength 2
オフセット フィールド サイズ 説明
0 bPresetAction 1 数値 0x01: プリセット
を保存します。 0x02: プリセット
を復元します。 0x03: プリセットをデフォルトにリセットします。(デフォルトは有効なプリセット座標です)。
1 bPresetIndex 1 数値 アクティブなプリセットのインデックス。0 ~ N-1
。0 はデフォルトのカメラ開始位置と見なされ、N-1 はプリセット数のベンダー定義定数です。

サポートされているリクエスト タイプの動作は次のとおりです。

オフセット 0 1 説明
GET_MIN 0x00 0x00
GET_MAX 0x03 N-1 サポートされる最大プリセット数
GET_RES 0x01 0x01
GET_LEN 0x02 0x00 0x0002
GET_INFO 0x02 書き込みのみ
GET_DEF 0x00 0x00

パンとチルトの補助マッピング

カメラによっては、メカニカル カメラ用のモーターやデジタル PTZ 機能など、特別なコンポーネントが搭載されています。これらに対応するには、パン、チルト、ズームに標準の V4L2 コントロールを使用します。

コントロール: GOOGXU_PAN_TILT_ABSOLUTE(非推奨)

パンとチルトの補助マッピング コントロールは、UVC 1.5 クラス仕様の第 4 章: クラス固有のリクエスト セクション 4.2.2.1.14 パンチルト(絶対)コントロールで定義されています。

コントロール: GOOGXU_PAN_TILT_RELATIVE(非推奨)

パンとチルトの補助マッピング コントロールは、UVC 1.5 クラス仕様の第 4 章: クラス固有のリクエスト、セクション 4.2.2.1.15 パンチルト(相対)コントロールで定義されています。

リリースノート

これらのリリースノートには、このドキュメントの各リビジョンにおける改善点と新機能が反映されています。

2024 年 5 月 21 日

2023 年 11 月 15 日

有効なフレーミング モードを確認して解釈するようにテスト スクリプトを更新しました。バイト表現を明確にしました。

2023 年 7 月 21 日

パートナーがこの仕様に準拠しているかどうか実装を検証するためのテスト スクリプトを追加しました。

2023 年 5 月 25 日

プリセットの数に関する GOOGXU_PRESETS の注記を修正しました。N-1 ではなく N にする必要があります。

2023 年 4 月 17 日

初回リリース。