Microsoft DirectX 8.0

CTransInPlaceFilter クラス

CTransInPlaceFilter クラスの階層

インプレイス変換フィルタを実装する基底クラス。

宣言 : Transfrm.h

CTransInPlaceFilter クラスはデータ変換を、バッファ間のデータ コピーをせずに、インプレイスで行うフィルタ用に設計されている。

可能な限り、フィルタは 1 つのアロケータを使う。詳細については、CompleteConnect」を参照すること。

このクラスを使うには、CTransInPlaceFilter から新しいクラスを派生し。以下のメソッドを実装すること :

このフィルタは入力ピンに CTransInPlaceInputPin クラスを使い、出力ピンに CTransInPlaceOutputPin クラスを使う。通常、これらのピンクラスをオーバーライドする必要はない。フィルタは両ピンを GetPin メソッドで作成する。ピンクラスをオーバーライドするなら、カスタム ピンを作る GetPin をオーバーライドしなければならない。

Protected メソッド
Copyメディア サンプルをコピーする。
InputPinフィルタの入力ピンへのポインタを取得する。
OutputPinフィルタの出力ピンへのポインタを取得する。
TypesMatch入力メディア タイプが出力メディア タイプと一致するかどうか確認する。
UsingDifferentAllocators入力ピンと出力ピンが異なるアロケータを使っているかどうかを確認する。
Public メソッド
CTransInPlaceFilterコンストラクタ メソッド。
GetPinピンを取得する。
GetMediaType出力ピン用の優先メディア タイプを取得する。
DecideBufferSize出力ピンのバッファ要求を設定する。
CheckTransform入力メディア タイプが出力メディア タイプと互換性があるかどうかをチェックする。
CompleteConnectピン接続を完了する。
Receiveメディア サンプルを受け取り、それを処理し、ダウンストリーム フィルタに出力する。
Pure Virtual メソッド
Transformサンプルをインプレイスで変換する。

CTransInPlaceFilter::CheckTransform

CTransInPlaceFilter クラス

入力メディア タイプが出力メディア タイプと互換性があるかどうかをチェックする。

構文

HRESULT CheckTransform(
    const CMediaType *mtIn,
    const CMediaType *mtOut
);

パラメータ

mtIn
入力タイプを指定する CMediaType オブジェクトへのポインタ。
mtOut
出力タイプを指定する CMediaType オブジェクトへのポインタ。

戻り値

S_OK を返す。

注意

このメソッドは CTransformFilter::CheckTransform メソッドをオーバーライドする。CTransInPlace 内のメソッドは、入力タイプと出力タイプが同じであると仮定して、CheckTransform の代わりに、CTransformFilter::CheckInputType メソッドを呼び出す。

CTransInPlaceFilter::CompleteConnect

CTransInPlaceFilter クラス

ピン接続を完了する。

構文

HRESULT CompleteConnect(
    PIN_DIRECTION direction,
    IPin *pReceivePin
);

パラメータ

direction
フィルタのどのピンが接続を作成しているかを指定する PIN_DIRECTION 列挙型のメンバ。
pReceivePin
この接続を試みている別のピンの IPin インターフェイスへのポインタ。

戻り値

HRESULT 値を返す。以下のテーブルに示されるいずれかの値。

S_OK成功。
VFW_E_NOT_IN_GRAPHフィルタがフィルタ グラフにない。

注意

このメソッドは CTransformFilter::CompleteConnect メソッドをオーバーライドする。

フィルタの振る舞いはピン接続の順番に依存する :

フィルタは CBaseFilter::ReconnectPin メソッドを呼び出すことによって、すべてのピンの再接続を行う。 ReconnectPin メソッドはフィルタ グラフ マネージャの IFilterGraph2::ReconnectEx メソッドを順順に呼び出す。

CTransInPlaceFilter::Copy

CTransInPlaceFilter クラス

メディア サンプルをコピーする。

構文

IMediaSample *CTransInPlaceFilter::Copy(
    IMediaSample *pSource
);

パラメータ

pSource
サンプルの IMediaSample インターフェイスへのポインタ。

戻り値

新しいサンプルの IMediaSample インターフェイスへのポインタを返す。

注意

このメソッドはダウンストリーム アロケータから空のバッファを取得する。それはサンプル内の実際のデータと共に、pSource からすべてのサンプル プロパティを新しいサンプルにコピーする。フィルタが 2 つのアロケータを使っているなら、このメソッドを呼び出して、バッファ間でデータをコピーする。

CTransInPlaceFilter::CTransInPlaceFilter

CTransInPlaceFilter クラス

コンストラクタ メソッド。

構文

CTransInPlaceFilter(
    TCHAR *pObjectName,
    LPUNKNOWN lpUnk,
    REFCLSID clsid,
    HRESULT *phr,
    bool bModifiesData = true
);

パラメータ

pObjectName
フィルタのデバッグ名が入る文字列。詳細については、「CBaseObject」を参照すること。
lpUnk
このオブジェクトの所有者へのポインタ。オブジェクトが集成されているなら、集成オブジェクトの IUnknown へのポインタを渡す。そうでなければ、このパラメータを NULL に設定する。
clsid
フィルタのクラス ID。
phr
無視される。
bModifiesData
フィルタが入力データを修正するかどうかを指定するブール値。TRUE なら、フィルタはデータを修正する。それ以外なら、フィルタはデータを変更せずダウンストリームに渡す。

CTransInPlaceFilter::DecideBufferSize

CTransInPlaceFilter クラス

出力ピンのバッファ要求を設定する。

構文

HRESULT DecideBufferSize(
    IMemAllocator *pAlloc,
    ALLOCATOR_PROPERTIES *pProperties
);

パラメータ

pAlloc
出力ピンが使用する IMemAllocator オブジェクトへのポインタ。
pProperties
要求されたアロケータ プロパティ へのポインタ、それは ALLOCATOR_PROPERTIES に指定されているカウント、サイズ、アラインメントである。

戻り値

HRESULT 値を返す。以下のテーブルに示されるいずれかの値。

S_OK成功。
E_FAIL失敗。

注意

このメソッドは CTransformFilter::DecideBufferSize メソッドをオーバーライドする。それは以前のバージョンの CTransInPlaceFilter 暮らすとの互換性のために存在する。現在のバージョンでは、アップストリーム出力ピンはアロケータのダウンストリーム入力ピンと直接ネゴシエーションする。フィルタの出力ピンはこれに関わらない。

CTransInPlaceFilter::GetMediaType

CTransInPlaceFilter クラス

出力ピン用の優先メディア タイプを取得する。

構文

HRESULT GetMediaType(
    int iPosition,
    CMediaType *pMediaType
);

パラメータ

iPosition
ゼロから始まるインデックス値。
pMediaType
メディア タイプを受け取る CMediaType オブジェクトへのポインタ。

戻り値

E_UNEXPECTED を返す。

注意

このメソッドは CTransformFilter::GetMediaType メソッドをオーバーライドする。CTransInPlaceFilter クラスでは、各ピンは向かいの接続ピンを呼び出し、優先メディア タイプを列挙する。入力ピンはダウンストリーム フィルタの入力ピンを呼び出し、出力ピンはアップストリーム フィルタの出力ピンをアップストリームを呼び出す。それゆえ、フィルタの GetMediaType メソッドは決して呼び出されない。

CTransInPlaceFilter::GetPin

CTransInPlaceFilter クラス

ピンを取得する。

構文

virtual CBasePin *GetPin(
    int n
);

パラメータ

n
指定したピンの数、ゼロから始まるインデックス。このフィルタでは、ピン 0 は入力ピンで、ピン 1 は出力ピンである。

戻り値

ピンを実装する CBasePin オブジェクトへのポインタを返す、メソッドが失敗すると NULL を返す。

注意

このメソッドは CTransformFilter::GetPin メソッドをオーバーライドする。最初にこのメソッドが呼び出されたとき、両方のピンを作成する。

このメソッドは返ってきたピンの参照カウントをインクリメントしないので、返ったピンは参照カウントを残さない。呼び出し元がそのピンの参照カウントを保持する必要があるなら、そのピンの IUnknown::AddRef メソッドを呼び出すべきである。

フィルタがデフォルトの CTransInPlaceInputPin ピンと CTransInPlaceOutputPin ピンを使うなら、このメソッドをオーバーライドする必要はない。しかし、フィルタがこれらのクラスを拡張したピンを使うなら、このメソッドをオーバーライドしてそのタイプのピンを作成しなければならない。

CTransInPlaceFilter::InputPin

CTransInPlaceFilter クラス

フィルタの入力ピンへのポインタを取得する。

構文

CTransInPlaceInputPin *InputPin(void);

戻り値

CTransformFilter.m_pInput メンバ変数を返す。

CTransInPlaceFilter::OutputPin

CTransInPlaceFilter クラス

フィルタの出力ピンへのポインタを取得する。

構文

CTransInPlaceOutputPin *OutputPin(void);

戻り値

CTransformFilter.m_pOutput メンバ変数を返す。

CTransInPlaceFilter::Receive

CTransInPlaceFilter クラス

メディア サンプルを受け取り、それを処理し、ダウンストリーム フィルタに出力する。

構文

HRESULT Receive(
    IMediaSample *pSample
);

パラメータ

pSample
サンプルの IMediaSample インターフェイスへのポインタ。

戻り値

HRESULT 値を返す。以下のテーブルに示されるいずれかの値。

S_OK成功。
E_UNEXPECTED予期せぬエラー。

注意

フィルタの入力ピンはサンプルを取得するとき、このメソッドを呼び出す。フィルタは Transform メソッドを呼び出す、派生クラスはそれを実装しなければならない。Transform メソッドはデータを処理する。フィルタが 1 つのアロケータだけを使っているなら、pSample を直接 Tranform メソッドに渡す。それ以外なら、pSample をコピーして、そのコピーを渡す。

Transform メソッドが S_FALSE を返すと、Receive メソッドはサンプルをドロップする。最初にドロップされたサンプルでは、フィルタは EC_QUALITY_CHANGE イベントをフィルタ グラフ マネージャに送る。一方、Transform メソッドが S_OK を返すと、フィルタは出力サンプルを出力する。それを行うため、ダウンストリーム入力ピンの IMemInputPin::Receive メソッドを呼び出す。

CTransInPlaceFilter::Transform

CTransInPlaceFilter クラス

サンプルをインプレイスで変換する。

構文

virtual HRESULT Transform(
    IMediaSample *pSample
) PURE;

パラメータ

pSample
サンプルの IMediaSample インターフェイスへのポインタ。

戻り値

HRESULT 値を返す。以下のテーブルに示されるいずれかの値。

S_FALSEこのサンプルを出力できない。
S_OK成功。

注意

派生クラスはこのメソッドを実装しなければならない。サンプル データをインプレイスで変換すること。フィルタが 2 つのアロケータを使っているなら、入力サンプルから新しいサンプルにデータをコピーし、そのコピーをこのメソッドに渡す。

(たとえば、品質管理をサポートするために)フィルタがこのサンプルを出力するべきでないなら、メソッドは S_FALSE を返すべきである。

CTransInPlaceFilter::TypesMatch

CTransInPlaceFilter クラス

入力メディア タイプが出力メディア タイプと一致するかどうか確認する。

構文

BOOL TypesMatch(void);

戻り値

入力メディア タイプと出力メディア タイプが同じなら TRUE を返し、それ以外なら FALSE を返す。

CTransInPlaceFilter::UsingDifferentAllocators

CTransInPlaceFilter クラス

入力ピンと出力ピンが異なるアロケータを使っているかどうかを確認する。

構文

BOOL UsingDifferentAllocators(void) const;

戻り値

入力ピンと出力ピンが違うアロケータを使っているなら TRUE を返し、それ以外なら FALSE を返す。