UVC デバイス用の DShow Bridge 実装ガイダンス

このトピックでは、USBビデオ クラス (UVC) 仕様に準拠するカメラとデバイス用に DShow Bridge を構成するための実装ガイダンスを提供します。 このプラットフォームは、USB バス標準の Microsoft OS 記述子を使用して DShow Bridge を構成します。 拡張プロパティ OS 記述子は USB の標準的な記述子の拡張機能です。標準仕様では有効にされない Windows 固有のデバイス プロパティを返すために、USB デバイスによって使用されます。

概要

Microsoft カメラ キャプチャ スタックは、DirectShow と呼ばれるレガシー フレームワーク スタックと、Multimedia Foundation と呼ばれる最新のフレームワークで構成されます。 IHV と OEM は、両方のパイプ ラインを満たすために、デバイスのコンポーネントを作成する必要があります。

DShow Bridge は、Media Foundation プラットフォームを使用して DShow パイプラインをブリッジすることを目的として作成されました。 これにより、真のユニバーサル ドライバーが実現します。IHV と OEM は、Windows バージョン 1607 以降で MediaFoundation および DShow アプリケーションで実行できるドライバーを作成できます。 DShow Bridge オプトインを有効にすると、DShowアプリケーションと共有アプリケーションは、同じカメラ ハードウェアを同時に共有できます。

IHV と OEM は、DShow パイプラインを管理するポリシーからの免除が必要になる場合があります。 パートナーは、OS 記述子を使用して次の機能を有効にすることができます。

  • DShow Bridge のオプトインまたはオプトアウト: デバイスは、よりニーズに適したパイプラインへのブリッジをオプトインまたはオプトアウトすることができます。 最新のパイプラインは、より徹底的に文書化され、複数のリリースで OS に追加された機能を利用しています。 レガシ パイプラインは、メインテナント モードにあるため、遅れています。

  • FrameServerでの MJPEG 圧縮解除: FrameServer は、カメラ デバイスを仮想化するサービスです。 これにより、デバイスのピンを複数のクライアント間で共有できます。 最適化された Media Foundation 圧縮解除機能を備えたアーキテクチャでは、この機能を使用して FrameServer で MJPEG をデコードできます。 変換された非圧縮メディア形式 (YUY2) は、複数のアプリケーションに提供されます。 ストリームは、複数の可能なクライアントに対して 1 回だけ圧縮解除されます。 これにより、アプリケーションのパフォーマンスが向上します。 次の図は、カメラ キャプチャ パイプラインを示しています。

camera capture pipeline.

USB カメラ デバイスをパッケージ化する OEM と IHV は、USB バス標準の拡張プロパティ OS 機能記述子仕様を使用して、UVC ドライバの INF ファイルを変更することなく、DShow Bridge を設定できます。

OS 記述子を使用すると、デバイスは USB デバイスまたは複合デバイスのレジストリ プロパティを定義できます。

USB OS 記述子を使用して DShow Bridges を構成するには、ホスト ソフトウェアは、各 USB デバイス インターフェイスに対して次のレジストリ キーを作成する必要があります。

HKLM\SYSTEM\CurrentControlSet\Enum\USB\<DeviceVID&PID>\<DeviceInstance>\デバイス パラメータ

DWORD: EnableDshowRedirection

EnableDshowRedirection レジストリ値は、次の表で説明するように、DShow Bridge を構成するために使用できるビット マスク値です。

ビット マスク 説明 解説
0x00000001 DShow Bridge にオプトインする 0 – オプトアウト
1 – オプトイン
0x00000002 FrameServer で MJPEG デコードを一度有効にします (下記の注を参照してください)。 0 – MJPEG 圧縮メディア タイプが公開されています (操作なし)。
1 – MJPEG (YUY2) から変換された非圧縮メディアタイプを公開します。

Note

FrameServer で MJPEG デコードを 1 回有効にし、変換された非圧縮メディア形式 (YUY2) が複数のアプリケーションに提供されます。 ストリームは、複数の可能なクライアントに対して 1 回だけ圧縮解除されます。 これにより、アプリケーションのパフォーマンスが向上します。

レイアウトの例

次の仕様の例を以下に示します。

  • Microsoft OS 拡張記述子仕様 1.0

  • Microsoft OS 2.0 記述子仕様

Microsoft OS 拡張プロパティ記述子仕様バージョン 1.0

拡張プロパティ OS 記述子には、2 つのコンポーネントがあります。

  • 固定長のヘッダー セクション

  • ヘッダー セクションの後に続く 1 つ以上の可変長のカスタム プロパティ セクション

ヘッダー セクション

ヘッダー セクションでは、長さとバージョン番号を含む拡張プロパティ記述子全体について説明します。

オフセット フィールド サイズ (バイト) Value アクリルアミド
0 dwLength 4 0x0000004c 76 進数
4 bcdVersion 2 0x0100 バージョン 1.0
6 wIndex 2 0x005 拡張プロパティ OS 記述子
8 wCount 2 0x0001 1 つのカスタム プロパティ

カスタム プロパティ セクション (1.0 記述子)

USB HID デバイスの拡張プロパティ OS 記述子には、EnableDshowRedirection レジストリ キーを作成するための 1 つのカスタム プロパティ セクションがあります。

オフセット フィールド サイズ (バイト) Value
0 dwSize 4 0x00000042 (このプロパティの場合は 66 バイト)
4 dwPropertyDataType 4 0x00000004 (REG_DWORD_LITTLE_ENDIAN)
8 wPropertyNameLength 2 0x0030
10 bPropertyName 48 EnableDshowRedirection (Unicode 文字列)
58 dwPropertyDataLength 4 0x00000004 (Sizeof(DWORD))
62 bPropertyData 4 0x00000001 (DWORD データ)

Microsoft OS 2.0 記述子仕様

この例では、Microsoft 2.0 記述子セットを使用して、Windows バージョンに適用されるEnableDshowRedirectionの単一の DWORD レジストリ値を提供する方法を示します。

カスタム プロパティ セクション (2.0 記述子)

オフセット フィールド サイズ (バイト) Value
0 wLength 2 この記述子の長さ (バイト単位)
4 wDescriptorType 2 0x00000004 (REG_DWORD_LITTLE_ENDIAN)
8 wPropertyDataType 2 0x0030
wPropertyNameLength 2
10 PropertyName 変数 プロパティ名の長さ。
58 dwPropertyDataLength 2 プロパティ データの長さ
62 PropertyData 変数 プロパティ データ
UCHAR Example2\_MSOS20DescriptorSetForFutureWindows\[0x48\] =
{
    //
    // Microsoft OS 2.0 Descriptor Set Header
    //
    0x0A, 0x00,                 // wLength - 12 bytes
    0x00, 0x00,                 // MSOS20_SET_HEADER_DESCRIPTOR
    0x00, 0x00, 0x0?, 0x06,     // dwWindowsVersion – 0x06030000 for future Windows version
    0x4A, 0x00,                 // wTotalLength – 72 bytes

    //
    // Microsoft OS 2.0 Registry Value Feature Descriptor
    //
    0x3E, 0x00,                 // wLength - 62 bytes
    0x04, 0x00,                 // wDescriptorType – 5 for Registry Property
    0x04, 0x00,                 // wPropertyDataType - 4 for REG_DWORD
    0x30, 0x00,                 // wPropertyNameLength – 48 bytes
    0x45, 0x00, 0x6E, 0x00,     // Property Name - "EnableDshowRedirection"
    0x61, 0x00, 0x62, 0x00,
    0x6C, 0x00, 0x65, 0x00,
    0x44, 0x00, 0x73, 0x00,
    0x68, 0x00, 0x6F, 0x00,
    0x77, 0x00, 0x52, 0x00,
    0x65, 0x00, 0x64, 0x00,
    0x69, 0x00, 0x72, 0x00,
    0x65, 0x00, 0x63, 0x00,
    0x74, 0x00, 0x69, 0x00,
    0x6F, 0x00, 0x6E, 0x00,
    0x00, 0x00, 0x00, 0x00,
    0x04, 0x00,                 // wPropertyDataLength – 4 bytes
    0x00, 0x00, 0x00, 0x00      // PropertyData – 0x00000003 (DShow Bridge is enabled and MJPEG is decoded in FrameServer)
}

リソース

USB デバイスのための Microsoft OS 記述子

USB 汎用親ドライバー (Usbccgp.sys)

USB 仕様