[このページに関連付けられている機能である DirectShow はレガシ機能です。 これは、 MediaPlayer、 IMFMediaEngine、 メディア ファンデーションの Audio/Video Captureに置き換えられました。 これらの機能は、Windows 10 および Windows 11 用に最適化されています。 Microsoftは、新しいコードでは、可能な限り DirectShowではなく、Media Foundation の MediaPlayer、IMFMediaEngine、および Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存コードを、新しい API を使用するように可能であれば書き直すことを提案しています。]
この記事では、Microsoft DirectShow 基本クラス ライブラリについて説明します。 このライブラリはフィルター開発者向けですが、アプリケーション ライターはヘルパー クラスとデバッグ ユーティリティの一部が役立つ場合があります。 ただし、DirectShow プログラミングには基底クラス ライブラリは必要ありません。
次のセクションでは、ライブラリ内の最も重要な基底クラスの概要を示します。
COM オブジェクト クラス
次のクラスは、COM オブジェクトの作成をサポートしています。
| クラス | 説明 |
|---|---|
| CBaseObject | 基本オブジェクト クラス。 |
| CUnknown | IUnknown インターフェイスを実装します。 |
DirectShow クラスのほとんどは 、CBaseObject から派生します。 このクラスは、実行時に DLL 内のすべてのアクティブ オブジェクトの数を保持することでデバッグ支援を提供します。 デバッグ ビルドでは、オブジェクト数が 0 より大きい間に DLL がアンロードされるとアサートされます。 これにより、参照カウントの問題によって発生するリークを簡単に追跡できます。
COM インターフェイスをサポートするすべての基底クラスは、CBaseObject を継承する CUnknown から派生します。 CUnknown クラスは、参照カウント、QueryInterface、および集計をサポートします。 詳細については、「 IUnknown を実装する方法」を参照してください。
クラスのフィルターとピン留め
次のクラスは、DirectShow フィルターとピン 留めオブジェクトの作成をサポートしています。
| クラス | 説明 |
|---|---|
| CBaseFilter | フィルターの基本クラス。 IBaseFilter インターフェイスを実装します。 |
| CBasePin | ピンの基本クラス。 IPin インターフェイスと IQualityControl インターフェイスを実装します。 |
| CBaseInputPin | ローカル メモリ トランスポートを使用する入力ピンの基本クラス。 IMemInputPin インターフェイスを実装します。 このクラスは CBasePin から派生します。 |
| CBaseOutputPin | IMemInputPin 接続を使用する出力ピンの基本クラス。 このクラスは CBasePin から派生します。 |
次のクラスは、より特殊な種類のフィルターを作成するのに役立ちます。
| クラス | 説明 |
|---|---|
| CSource | ソース フィルターの基本クラス。 このクラスは、プッシュ ソースを作成するために設計されています。 ファイル リーダーなどのプル ソースには適していません。 このクラスの出力ピンを作成するには、 CSourceStream クラスを使用します。 |
| CTransformFilter | 変換フィルターの基本クラス。 このクラスは、データに対してコピーを実行します。 このクラスのピンは CTransformInputPin と CTransformOutputPin です。 |
| CTransInPlaceFilter | データをコピーしない変換フィルターの基本クラス。 このクラスは、ダウンストリームに渡す前に、入力データに対して直接データ処理を実行します。 このクラスのピンは 、CTransInPlaceInputPin と CTransInPlaceOutputPin です。 |
| CVideoTransformFilter | ビデオ変換フィルターの基本クラス。 このクラスは CTransformFilter から派生し、品質管理のサポートを追加します。 |
| CBaseRenderer | レンダラー フィルターの基本クラス。 このクラスの入力ピンは CRendererInputPin です。 |
| CBaseVideoRenderer | ビデオ レンダラーの基本クラス。 このクラスは CBaseRenderer から派生します。 |
これらのクラスを使用するには、独自のクラスを派生させ、フィルターに固有の機能をサポートするコードを記述する必要があります。 基底クラスの特殊化が多いほど、派生クラスで記述する必要があるコードが少なくなります。
ヘルパー オブジェクト
次のクラスは、フィルターとピンで使用されるヘルパー オブジェクトを実装します。 これらのクラスのほとんどは、そこから新しいクラスを派生させずに使用できます。
| クラス | 説明 |
|---|---|
| CPullPin | パーサー フィルターの入力ピンのヘルパー オブジェクト。 プル ソースを使用した IAsyncReader 接続をサポートします。 |
| COutputQueue | ワーカー スレッドで配信するためにサンプルをキューに格納する出力ピンのヘルパー オブジェクト。 |
| CSourceSeeking | ちょうど1つの出力ピンを持つソースフィルターでシークを実装するためのヘルプオブジェクト。 (このクラスは、パーサーなどの複数のピンを持つフィルター用には設計されていません。 |
| CEnumPins | フィルターのピンを列挙するための列挙子オブジェクト。 IEnumPins インターフェイスを実装します。 |
| CEnumMediaTypes | ピンの優先メディアの種類を列挙するための列挙子オブジェクト。 IEnumMediaTypes インターフェイスを実装します。 |
| CMemAllocator | メモリ アロケーター オブジェクト。 IMemAllocator インターフェイスを実装します。 |
| CMediaSample | メディア サンプル オブジェクト。 IMediaSample2 インターフェイスを実装します。 |
| CBaseReferenceClock | 参照クロックの基本クラス。 IReferenceClock インターフェイスを実装します。 |
| CMediaType | AM_MEDIA_TYPE構造体を操作するためのヘルパー オブジェクト。 |