フィルター基底クラスの概要

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]

この記事では、Microsoft DirectShow 基本クラス ライブラリについて説明します。 このライブラリはフィルター開発者向けですが、アプリケーション ライターはヘルパー クラスとデバッグ ユーティリティの一部が役立つ場合があります。 ただし、DirectShow プログラミングでは基本クラス ライブラリは必要ありません。

次のセクションでは、ライブラリ内で最も重要な基底クラスをまとめます。

COM オブジェクト クラス

次のクラスは、COM オブジェクトの作成をサポートしています。

クラス 説明
CBaseObject 基本オブジェクト クラス。
CUnknown IUnknown インターフェイスを実装します。

 

DirectShow クラスのほとんどは 、CBaseObject から派生します。 このクラスは、実行時に DLL 内のすべてのアクティブ オブジェクトの数を保持することでデバッグ支援を提供します。 デバッグ ビルドでは、オブジェクト数が 0 より大きい間にアンロードされた場合、DLL はアサートします。 これにより、参照カウントの問題によって引き起こされるリークを簡単に追跡できます。

COM インターフェイスをサポートするすべての基底クラスは、CBaseObject を継承する CUnknown から派生します。 CUnknown クラスは、参照カウント、QueryInterface、および aggregration をサポートしています。 詳細については、「 IUnknown を実装する方法」を参照してください。

クラスのフィルターとピン留め

次のクラスは、DirectShow フィルターとピン 留めオブジェクトの作成をサポートしています。

クラス 説明
CBaseFilter フィルターの基本クラス。 IBaseFilter インターフェイスを実装します。
CBasePin ピンの基本クラス。 IPin インターフェイスと IQualityControl インターフェイスを実装します。
CBaseInputPin ローカル メモリ トランスポートを使用する入力ピンの基本クラス。 IMemInputPin インターフェイスを実装します。 このクラスは CBasePin から派生します。
CBaseOutputPin IMemInputPin 接続を使用する出力ピンの基本クラス。 このクラスは CBasePin から派生します。

 

次のクラスは、より特殊な種類のフィルターを作成するのに役立ちます。

クラス 説明
CSource ソース フィルターの基本クラス。 このクラスは、プッシュ ソースを作成するために設計されています。 ファイル リーダーなどのプル ソースには適していません。 このクラスの出力ピンを作成するには、 CSourceStream クラスを使用します。
CTransformFilter 変換フィルターの基本クラス。 このクラスは、データに対してコピーを実行します。 このクラスのピンは CTransformInputPinCTransformOutputPin です
CTransInPlaceFilter データをコピーしない変換フィルターの基本クラス。 このクラスは、ダウンストリームに渡す前に、入力データに対してデータ処理を直接実行します。 このクラスのピンは CTransInPlaceInputPinCTransInPlaceOutputPin です
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構造体を操作するためのヘルパー オブジェクト。