MSDV ドライバー
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]
MSDV は、DV ビデオカメラ用の Microsoft Windows ドライバー モデル (WDM) ドライバーです。 デバイスが接続されている場合、ドライバーは DirectShow フィルターとして表示されます。 これは、次の 2 つのフィルター カテゴリで列挙されます。
- CLSID_VideoInputDeviceCategory ("ビデオ キャプチャ ソース")
- AM_KSCATEGORY_RENDER ("WDM ストリーミング レンダリング デバイス")
フィルターのフレンドリ名は 、 Microsoft DV Camera and VCR
またはローカライズされた同等の名前です。 一部のデバイスでは、 Description プロパティに特定のモデルの説明が含まれており、汎用フレンドリ名の代わりに使用できます。 詳細については、「 キャプチャ デバイスの選択」を参照してください。
MSDV には 2 つの出力ピンがあります。 1 つのピンは、インターリーブされたオーディオとビデオのデータを含む DV フレームを提供します。 もう 1 つのピンは、オーディオのないビデオのみのフレームを提供します。 MSDV は両方のピンから一度にストリーミングできないため、一度に接続できる出力ピンは 1 つだけです。 DV デバイスからのビデオのキャプチャの詳細については、「DV を ファイルにキャプチャする」を参照してください。
ほとんどの DV ビデオカメラには、テープからコンピューターにデータを送信できるビデオ テープ レコーダー (VTR) サブユニットがあります。 アプリケーションでは、テープからのキャプチャはライブ ビデオのキャプチャと同じように機能します。 唯一の違いは、アプリケーションが外部テープ トランスポート (テープの開始と停止、巻き戻しなど) を制御する必要がある点です。 この目的のために、MSDV は IAMExtDevice、 IAMExtTransport、 IAMTimecodeReader インターフェイスを 公開します。 VTR の制御の詳細については、「 DV ビデオカメラの制御」を参照してください。
また、コンピュータからビデオカメラにDVを送信することができます。 ビデオは、ビデオカメラのオンボード画面で表示するか、テープに記録することができます。 この機能をサポートするために、MSDV にはインターリーブ DV ストリームを受信できる入力ピンがあります。 入力ピンが接続されている場合、MSDV はキャプチャ フィルターではなくレンダラー フィルターとして機能します。 MSDV では、このモードでのシークはサポートされていません。 DV をデバイスに送信する方法の詳細については、「 DV をファイルからテープに送信する」を参照してください。
デバイスが両方向に同時にストリーミングできないため、入力ピンと出力ピンを同時に接続できないことに注意してください。
多くのビデオカメラでは、VTRモードとカメラモードを切り替えると、デバイスがオフになります。 したがって、ユーザーがモードを切り替えると、DirectShow によってデバイスが失われる可能性があります。 デバイスの削除イベントの詳細については、「 デバイスの削除通知」を参照してください。
解説
MSDV ドライバーでサポートされている DV 形式の詳細については、「 DV ビデオ サブタイプ」を参照してください。
MSDV を使用してフィルター グラフを構築する場合のヒントを次に示します。
IGraphBuilder::Render を使用して MSDV に出力ピンをレンダリングすることはできません。 (フィルター グラフ マネージャーは、失敗する MSDV の入力ピンに出力ピンを接続しようとします。代わりに、 IGraphBuilder::Connect または ICaptureGraphBuilder2::RenderStream を使用します。
フィルター グラフに MSDV が含まれている場合、MSDV はグラフの参照クロックを提供する必要があります。 DirectX 8.0 以降、フィルター グラフ マネージャーは参照クロックとして MSDV を自動的に選択します。 以前のバージョンでは、フィルター グラフ マネージャーで IMediaFilter::SetSyncSource メソッドを呼び出す必要があります。 時計の詳細については、「 DirectShow の時刻と時計」を参照してください。
デバイスによっては、 IAMExtDevice、 IAMExtTransport、 IAMTimeCodeReader の一部のメソッドが HRESULT 値ではなく Windows エラー コードを返す場合があります。 考えられるエラー コードは次のとおりです。
エラー コード 説明 ERROR_TIMEOUT 外部デバイス コマンドがタイムアウトしました。 ERROR_REQ_NOT_ACCEP デバイスはこの外部デバイス コマンドを受け入れませんでした。 ERROR_NOT_SUPPORTED デバイスはこの外部デバイス コマンドをサポートしていません。 ERROR_REQUEST_ABORTED 外部デバイス コマンドが中止されました。 デバイスが削除されたか、バスのリセットが発生した可能性があります。
デバイス情報
Windows ミレニアム エディションと Windows XP では、DV フィルターのデバイス モニカーは FriendlyName プロパティに加えて Description プロパティをサポートしています。 このプロパティは、通常、デバイスのブランド名を含む INF ファイルから取得されたデバイスの説明を返します。 ただし、このプロパティは、すべてのデバイス モデルでサポートされているわけではありません。
デバイス モニカーの詳細については、「 システム デバイス列挙子の使用」を参照してください。
クロック時間
MSDV ドライバーは、1394 データ パケットに含まれる 1394 バス クロックを使用してクロックを派生させます。 これらの値を使用して、DV メディア サンプルにタイム スタンプを設定します。 このソース クロックはコンピューター システム クロックではないので、時間は最終的にコンピューター システム クロックからドリフトします。 ただし、前述のように、既定では、フィルター グラフ マネージャーはグラフ参照クロックとして MSDV を選択します。
IAMDroppedFrames インターフェイスは、ドロップされたフレームのドライバーの現在のメジャーを報告します。この値は、特定の時点でドロップされたフレームの実際の数と完全に同期されない場合があります。 フレームが削除されると、システムのバランスが取れていないことを示します (データの生成がデータ消費量を超えています)。 たとえば、DV キャプチャ レートをサポートするには、ユーザーのハード ディスクの速度が十分でない場合があります。
関連トピック