Microsoft DirectX 8.0

IPin インターフェイス

このインターフェイスはすべての入力ピン、出力ピンによって公開される。

フィルタ グラフ マネージャはこのインターフェイスを使ってピンと接続し、フラッシュ処理を行う。アプリケーションはこのインターフェイスを使ってピンの情報を問い合わせることができる。アプリケーションは IPin メソッドを呼び出して、ConnectDisconnectBeginFlushEndFlush のようなピンの状態の変更を起こってはならない。ピンを接続するには、アプリケーションは IGraphBuilder 内のメソッドを使用しなければならない。

フィルタ 開発者 : CBasePinCBaseInputPinCBaseOutputPin クラスはこのインターフェイスを実装する。他の基底クラスはこれら 3 つのクラスから派生する。

Vtable 順のメソッド

IUnknown メソッド説明
QueryInterface サポートされているインターフェイスへのポインタを返す。
AddRef 参照カウントをインクリメントする。
Release 参照カウントをデクリメントする。
IPin メソッド説明
Connectピンを他のピンと接続する。
ReceiveConnection他のピンからの接続を許可する。
Disconnect現在のピン接続を解除する。
ConnectedToこのピンに接続しているピンを取得する。
ConnectionMediaType現在のピン接続のメディア タイプを取得する。
QueryPinInfo名前、所有者フィルタ、向きなどのピンについての情報を取得する。
QueryIdピン識別子を取得する。
QueryAccept指定したメディアタイプをピンが許容するかどうかを確認する。
EnumMediaTypesピンの優先メディアタイプを列挙する。
QueryInternalConnectionsこのピンに (フィルタ内で) 内部的に接続しているピンを取得する。
EndOfStream追加データはもうないことをピンに通知する。
BeginFlushフラッシュ処理を開始する。
EndFlushフラッシュ処理を終了する。
NewSegmentこの呼び出しの後に受け取ったメディア サンプルがセグメント グループであることをピンに通知する。
QueryDirectionピンの向き (入力ピンか出力ピンか) を取得する。

IPin::BeginFlush

IPin インターフェイス

フラッシュ処理を開始する。

構文

HRESULT BeginFlush(void);

戻り値

成功なら S_OK を返す、あるいはエラーの原因を示す HRESULT 値を返す。

注意

フラッシュ処理中に、フィルタはそれが処理したどのデータをも廃棄する。フラッシュが完了するまで新しいデータは拒絶される。アップストリーム ピンが IPin::EndFlush を呼び出すと、フラッシュは完了する。フラッシュによってイベントが通常のデータフローを変更するときのフィルタ グラフのレスポンスが改善される。たとえば、シーク中にフラッシュは行われる。

BeginFlush が呼び出されると、フィルタ グラフは以下のステップを行う :

  1. IPin::BeginFlush 呼び出しをダウンストリームに渡す。
  2. IMemInputPin::Receive のようなすべてのデータ ストリーミング メソッドを失敗させる内部フラグを設定する。
  3. すべてのブロックが Receive メソッドへの呼び出しを返す。

BeginFlush 通知が レンダラ フィルタに届くと、レンダラは保持しているすべてのサンプルを解放する。

BeginFlush が呼び出された後、IPin::EndFlush メソッドが呼び出されるまで、ピンはアップストリームからのすべてのサンプルを受け付けずに S_FALSE を返す。

参照

フィルタ開発者が使用するデータ フロー

IPin::Connect

IPin インターフェイス

ピンを他のピンと接続する。

構文

HRESULT Connect(
    IPin *pReceivePin,
    const AM_MEDIA_TYPE *pmt
);

パラメータ

pReceivePin
[in] ピンの IPin インターフェイスを受け取るポインタ。
pmt
[in] 接続のメディア タイプを指定する AM_MEDIA_TYPE 構造体へのポインタ。NULL が可能。

戻り値

HRESULT 値を返す。以下のいずれかの値。

S_OK成功。
VFW_E_ALREADY_CONNECTEDピンは既に接続されている。
VFW_E_NO_ACCEPTABLE_TYPES許可されたメディア タイプを見つけることができなかった。
VFW_E_NOT_STOPPEDフィルタがアクティブで、ピンが動的再接続をサポートしていない。
VFW_E_TYPE_NOT_ACCEPTED指定したメディア タイプは許可されない。

注意

pmt パラメータは NULL が可能。メジャー タイプやサブタイプやフォーマットに GUID_NULL の値を入れて部分的メディアタイプを指定することも可能。

このメソッドは接続が可能なことを検証する。ピンが接続を拒否すれば、メソッドは失敗する。受信ピンで IPin::ReceiveConnection を呼び出すことで、接続ピンはメディア タイプを提案する。

IPin::ConnectedTo

IPin インターフェイス

もしあれば、このピンに接続しているピンを取得する。

構文

HRESULT ConnectedTo(
    IPin **ppPin
);

パラメータ

ppPin
[out] 他のピンの IPin インターフェイスへのポインタを受け取る変数のアドレス。NULL は不可。

戻り値

HRESULT 値を返す。以下のいずれかの値。

S_OK成功。
E_POINTERNULL ポインタ引数。
VFW_E_NOT_CONNECTEDピンが接続されていない。

注意

メソッドが成功すれば、それを返す IPin インターフェイスは参照カウントが残る。使用後、解放に注意。

IPin::ConnectionMediaType

IPin インターフェイス

現在のピン接続のメディア タイプを取得する。

構文

HRESULT ConnectionMediaType(
    AM_MEDIA_TYPE *pmt
);

パラメータ

pmt
[out] メディア タイプを受け取る AM_MEDIA_TYPE 構造体へのポインタ。

戻り値

HRESULT 値を返す。以下のいずれかの値。

S_OK成功。
E_POINTER NULL ポインタ引数。
VFW_E_NOT_CONNECTEDピンが接続されていない。

注意

ピンが接続されると、このメソッドは pmt にが指定する AM_MEDIA_TYPE 構造体にメディア タイプをコピーする。呼び出し元はメディア タイプのフォーマット ブロックを解放しなければならない。Microsoft® Win32® CoTaskMemFree 関数か、FreeMediaType ヘルパー関数が使用できます。

ピンが接続されないと、このメソッドは pmt が指定するメディア タイプをクリアし、エラー コードを返す。

IPin::Disconnect

IPin インターフェイス

現在のピン接続を解除する。

構文

HRESULT Disconnect(void);

戻り値

HRESULT 値を返す。以下のいずれかの値。

S_FALSEピンが接続されていなかった。
S_OK成功。
VFW_E_NOT_STOPPEDフィルタがアクティブ。

注意

フィルタがポーズか実行中なら、このメソッドは失敗する。ピンが IPinConnection インターフェイスをサポートするなら、フィルタがポーズか実行中のとき、IPinConnection::DynamicDisconnect を呼び出してピンの接続を解除すること。

ピンはこのメソッドを使って接続解除をしてはならない。

IPin::EndFlush

IPin インターフェイス

フラッシュ処理を終了する。

構文

HRESULT EndFlush(void);

戻り値

成功なら S_OK を返す、あるいはエラーの原因を示す HRESULT 値を返す。

注意

このメソッドが呼び出されるとき、フィルタは以下の処理が行われる :

  1. キューにあるすべてのサンプルの廃棄を待つ。
  2. バッファにあるすべてのデータを解放する。
  3. 残っている EC_COMPLETE 通知をクリアする。
  4. EndFlush ダウンストリームを呼び出す。

メソッドが返ると、ピンは新しいサンプルを許可する。

参照

フィルタ開発者が使用するデータ フロー

IPin::EndOfStream

IPin インターフェイス

新しい実行コマンドがフィルタに発行されるまでは、追加データはもうないことをピンに通知する。

構文

HRESULT EndOfStream(void);

戻り値

以下の HRESULT 値の 1 つを返す。

S_OK 成功。
E_UNEXPECTEDピンはこのメソッドをサポートしていない。

注意

このメソッドは入力ピンでのみ呼び出しすること。出力ピンは E_UNEXPECTED を返す。

このメソッドはエンドオブストリーム (end-of-stream) 通知をピンに送る。ピンはその通知をダウンストリームに送る。IMemInputPin::Receive を呼び出してエンドオブストリーム通知を継続して処理しなければならない。ピンが出力すべきメディア サンプルをキューに入れるなら、エンドオブストリーム通知も同様にキューに入れるべきである。IPin::BeginFlush メソッドはキュー内のすべてのエンドオブストリーム通知をフラッシュする。

IPin::EnumMediaTypes

IPin インターフェイス

ピンの優先メディアタイプを列挙する。

構文

HRESULT EnumMediaTypes(
    IEnumMediaTypes **ppEnum
);

パラメータ

ppEnum
[out] IEnumMediaTypes インターフェイスへのポインタを受け取る変数のアドレス。

戻り値

HRESULT 値を返す。以下のいずれかの値。

S_OK成功。
E_OUTOFMEMORY メモリ不足。
E_POINTER NULL ポインタ引数。

注意

IEnumMediaTypes インターフェイスは標準 COM 列挙子のように動作する。詳細については、「Enumerating Objects in a Filter Graph」を参照すること。メソッドが成功すると、IEnumMediaTypes インターフェイスに参照カウントが残る。使用後、解放に注意。

IPin::NewSegment

IPin インターフェイス

この呼び出しの後に受け取ったメディア サンプルが、共通の開始タイムと終了タイムとレートを持つセグメント グループであることをピンに通知する。

構文

HRESULT NewSegment(
    REFERENCE_TIME tStart,
    REFERENCE_TIME tStop,
    double dRate
);

パラメータ

tStart
セグメントの開始タイム、オリジナル ソースの相対値、100ナノ秒単位。
tStop
セグメントの終了タイム、オリジナル ソースの相対値、100ナノ秒単位
dRate
セグメントが処理されるレート、オリジナル レートのパーセンテージ。

戻り値

成功なら S_OK を返す、あるいはエラーの原因を示す HRESULT 値を返す。

注意

新しいストリームを開始するたびとシーク操作が終わるたびに、ソース フィルタ (あるいはパーサーフィルタ) はこのメソッドを呼び出す。以前のデータバッチを出力した後で、新しいデータで IMemInputPin::Receive を呼び出す前に、それはダウンストリーム フィルタの入力ピンのメソッドを呼び出す。ダウンストリーム フィルタは NewSegment 呼び出しをダウンストリームに継承する。

フィルタはセグメント情報を使ってサンプルを処理する。たとえば、いくつかのフォーマットでは次のフレームなしでデルタ フレームを再構築することはできない。それゆえ、終了タイムがデルタ フレームにあると、ソース フィルタは追加フレームを送らなければならない。デコーダ フィルタはセグメント情報を基に最終フレームを決定する。たとえば、オーディオ レンダラはサンプリング レートとセグメント レートを使って、オーディオ データを正しくレンダリングする。

IPin::QueryAccept

IPin インターフェイス

指定したメディアタイプをピンが許容するかどうかを確認する。

構文

HRESULT QueryAccept(
    const AM_MEDIA_TYPE *pmt
);

パラメータ

pmt
[in] メディア タイプを指定する AM_MEDIA_TYPE 構造体へのポインタ。

戻り値

メディアタイプが許容されるなら S_TRUE を返す。そうでなければ、S_FALSE を返す。

注意

S_OK が返るなら、フィルタ実行中にピンが指定したフォーマットに変更できることが保証される。フィルタ実行中にフォーマットを変更する必要があり、ピンが IPinConnection をサポートするなら、IPinConnection::DynamicQueryAccept メソッドを呼び出すこと。

IPin::QueryDirection

IPin インターフェイス

ピンの向き (入力ピンか出力ピンか) を取得する。

構文

HRESULT QueryDirection(
    PIN_DIRECTION *pPinDir
);

パラメータ

pPinDir
[out] PIN_DIRECTION 列挙型のメンバを受け取る変数へのポインタ。

戻り値

HRESULT 値を返す。以下のいずれかの値。

S_OK成功。
E_POINTERNULL ポインタ引数。

IPin::QueryId

IPin インターフェイス

ピン識別子を取得する

構文

HRESULT QueryId(
    LPWSTR *Id
);

パラメータ

Id
[out] ピン識別子が入る文字列を受け取る変数のアドレス。

戻り値

HRESULT 値を返す。以下のいずれかの値。

S_OK成功。
E_OUTOFMEMORYメモリ不足。
E_POINTERNULL ポインタ引数。

注意

このメソッドはグラフ永続性をサポートする。このメソッドを使用してピンの状態を保存し、IBaseFilter::FindPin メソッドを使ってその状態をリストアすること。ピン識別文字列はフィルタ実装によって定義されている。その識別子はフィルタ内でユニークでなければならない。

   ピン ID は必ずしもQueryPinInfo メソッドが返す ピン名 と同じではない。

フィルタは Microsoft® Win32® CoTaskMemAlloc 関数を使用して返った文字列を割り当てる。呼び出し元は CoTaskMemFree を使ってそれを解放しなければならない。

IPin::QueryInternalConnections

IPin インターフェイス

このピンに (フィルタ内で) 内部的に接続しているピンを取得する。

構文

HRESULT QueryInternalConnections(
    IPin **apPin,
    ULONG *nPin
);

パラメータ

apPin
[out] IPin ポインタの配列のアドレス。
nPin
[in, out] 入力時は配列のサイズを指定する。メソッドが返ると、この値は配列内に返るポインタの数がセットされる。

戻り値

以下の HRESULT 値の 1 つを返す。

S_FALSE不適切な配列サイズ。
S_OK成功。
E_FAIL失敗。
E_NOTIMPL実装されていない。

注意

いくつかのフィルタでは、入力ピンは固有の出力ピンに対応している。各ピンについて、このメソッドは対応するピンへのポインタの配列を書き込む。各入力ピンが各出力ピンにデータを提供するなら、ピンは E_NOTIMPL を返す。

メソッドが成功し、ゼロ以上の *nPin 値を返すと、その配列には IPin インターフェイスへのポインタが入る。使用後、各インターフェイス ポインタの解放に注意すること。

IPin::QueryPinInfo

IPin インターフェイス

ピンについての情報を取得する。

構文

HRESULT QueryPinInfo(
    PIN_INFO *pInfo
);

パラメータ

pInfo
[out] ピン情報を受け取る PIN_INFO 構造体へのポインタ。

戻り値

HRESULT 値を返す。以下のいずれかの値。

S_OK成功。
E_POINTERNULL ポインタ引数。

注意

メソッドが返るとき、PIN_INFO 構造体の pFilter メンバが NULL 以外なら、参照カウントが残る。使用後インターフェイスの解放に注意すること。

IPin::ReceiveConnection

IPin インターフェイス

他のピンからの接続を許可する。

構文

HRESULT ReceiveConnection(
    IPin *pConnector,
    AM_MEDIA_TYPE *pmt
);

パラメータ

pConnector
[in] 接続しているピンの IPin インターフェイスへのポインタ。
pmt
[in] 接続のメディア タイプを指定する AM_MEDIA_TYPE 構造体へのポインタ。

戻り値

HRESULT 値を返す。以下のいずれかの値。

S_OK成功。
E_POINTER NULL ポインタ引数。
VFW_E_ALREADY_CONNECTEDピンは既に接続している。
VFW_E_NOT_STOPPEDフィルタがアクティブな間は接続できない。
VFW_E_TYPE_NOT_ACCEPTED指定したメディア タイプが許可されない。

注意

接続を初期化するピンはこのメソッドを受信ピンで呼び出す。受信ピンがエラー コードを返すなら、接続は失敗する。