Microsoft DirectX 8.0

CBasePin クラス

CBasePin クラスの階層

汎用ピンを実装する抽象クラス。

宣言 : Amfilter.h

接続処理

フィルタ グラフ マネージャがすべてのピン接続を開始する。アプリケーションが 2 つのピンを接続する必要があるなら、フィルタ グラフ マネージャの IFilterGraph::ConnectDirect メソッドを呼び出すべきだ。

2 つのピンが接続されたとき、接続 ピンと 受信 ピンが存在する。フィルタ グラフ マネージャは接続ピンの IPin::Connect メソッドを呼び出す。これは受信ピンと接続している可能なメディア タイプを指定する。接続ピンは受信ピンの IPin::ReceiveConnection メソッドを呼び出すことで、接続を完了する。受信ピンは接続を受け入れることも拒否することも可能だ。

フィルタ グラフ マネージャがメディア タイプを指定すると、ピンはそのタイプで接続しようとする。そうでなければ、ピンは受け入れ可能なタイプをネゴシエーションする。タイプが一致できないと、接続は失敗する。フィルタ グラフ マネージャはパーシャル メディア タイプを指定する場合もある。パーシャル メディア タイプはメジャー タイプ、サブタイプ、フォーマットに GUID_NULL 値を持つ。この場合、ピンは指定した部分のタイプに合わせようとし、GUID_NULL はワイルドカードとして働く。

Microsoft® DirectShow® の実装では、接続ピンは必ず出力ピンで、受信ピンは必ず入力ピンである。

CBasePin が IPin::Connect を実装する方法

ピンが接続を受け入れることができるかを検証することによって CBasePin::Connect メソッドは開始する。たとえば、それはピンが既に接続されていることをチェックする。次に、接続処理の残りの部分を protected クラス メソッド AgreeMediaType に委任する。それ以降のすべては AgreeMediaType によって実行される。

メディア タイプが完全に指定されたら、ピンは AttemptConnection メソッドを呼び出す。そうでなければ、次の手順でピンは複数のメディア タイプを試す。

  1. 受信ピンが優先するタイプ。
  2. 接続ピンが優先するタイプ。

注意   この順番は m_bTryMyTypesFirst フラグを TRUE に設定することによって逆にできる。

それぞれの場合で、ピンは IPin::EnumMediaTypes を呼び出して、列挙オブジェクトを取得する。それは TryMediaTypes メソッドに列挙オブジェクトを渡す。このメソッドは列挙子が提供するすべてのメディア タイプについてループし、各タイプに AttemptConnection を呼び出す。

AttemptConnection 内で、接続ピンは次のメソッドを呼び出す :

以下に注意 :

これらのステップが失敗すると、ピンは BreakConnect メソッドを呼び出して、CheckConnect によって行われたステップをすべて元に戻す。

受信サイドでは、ReceiveConnection は受信ピンの CheckConnectCompleteConnect メソッドを呼び出す。これらのどちらかが失敗すると、接続の試みがまた失敗となる。

フィルタ状態の移行

ピンは、接続しているフィルタの状態が移行するたびに通知を受ける。次の表に示すように、フィルタはそれぞれの状態移行について、ピンの対応するメソッドを呼び出す。

フィルタ状態CBasePin メソッド
停止非アクティブ
ポーズアクティブ
実行実行

派生クラスはこれらのメソッドをオーバーライドし、状態移行に対応すべきである。フィルタによって、ピンはサンプルの出力、メモリ アロケータのコミット、コミット等を行うワーカースレッドを使う場合もある。

CBasePin からの派生

CBasePin を使ってピンを実装するには、基底クラスから新しいクラスを派生し、いくつかのメソッドをオーバーライドしなければならない。オーバーライドしなければならないのは、次のメソッドである。

次のメソッドについても、オーバーライドが必要である可能性が高い。

最後に、必ず IPin::BeginFlush メソッドと IPin::EndFlush メソッドを実装しなければならない。

CBaseInputPinCBaseOutputPin のように、これらのメソッドのいくつかは CBasePin から派生した基底クラスに実装されている。

Protected メンバ変数
m_pNameピン名。
m_Connectedこのピンに接続しているピンへのポインタ。
m_dir ピンの向き。
m_pLock クリティカル セクション オブジェクトへのポインタ。
m_bRunTimeErrorランタイム エラーが起きたかどうかを示すフラグ。
m_bCanReconnectWhenActiveピンが動的再接続をサポートするかどうかを示すフラグ。
m_bTryMyTypesFirstピンが受信ピンの許容するメディア タイプの前に自分自身のそれを試みるかどうかを示すフラグ。
m_pFilter ピンを作成したフィルタへのポインタ。
m_pQSink 品質メッセージを扱うオブジェクトへのポインタ。
m_TypeVersion 許容メディア タイプ セットの現在のバージョン。
m_mt現時のピン接続のメディア タイプ。
m_tStart セグメント開始タイム。
m_tStop セグメント終了タイム。
m_dRateセグメント レート。
Protected メソッド
DisplayPinInfoデバッグ中にピン接続をトレースする。
DisplayTypeInfoデバッグ中にメディア タイプ情報を表示する。
AttemptConnection指定したメディア タイプを使用している他のピンへ接続する。
TryMediaTypesメディア タイプのリストを与え、それらのタイプの 1 つを使用して接続を完了しようと試みる。
AgreeMediaTypeピン接続をするメディア タイプを調べる。
DisconnectInternal現在のピン接続を解除する。
Public メソッド
CBasePinコンストラクタ メソッド。
~CBasePinデストラクタ メソッド。 仮想。
IsConnectedピンが他のピンと接続しているかどうかを確認する。
GetConnectedこのピンに接続しているピンを取得。
IsStoppedこのピンを含むフィルタが停止しているかどうかを確認する。
GetMediaTypeVersion許容するメディア タイプ セットのバージョン数を取得。 仮想。
IncrementTypeVersion許容するメディア タイプ セットのバージョン数をインクリメントする。
Activeピンにフィルタが今アクティブであることを通知する。 仮想。
Inactiveピンにフィルタが今既にアクティブではないことを通知する。 仮想。
Runフィルタが今実行中であることをピンに知らせる。仮想。
SetMediaType接続するメディア タイプを設定する。 仮想。
CheckConnectピン接続が適切かどうかを確認する。 仮想。
BreakConnect接続からピンを解放する。 仮想。
CompleteConnect他のピンへの接続を完了する。仮想。
GetMediaType許容するメディア タイプをインデックス値で取得する。仮想。
CurrentStopTimeセグメント終了タイムを取得する。
CurrentStartTimeセグメント開始タイムを取得する。
CurrentRateセグメント レートを取得する。
Nameピンの識別名を取得する。
SetReconnectWhenActiveピンが動的再接続をサポートするかどうかを指定する。
CanReconnectWhenActiveピンが動的再接続をサポートするかどうかを問い合わせる。
Pure Virtual メソッド
CheckMediaTypeピンが指定したメディア タイプを受け入れるかを確認する。
IBasePin メソッド
Connectピンを他のピンに接続する。
ReceiveConnection他のピンからの接続を受け入れる。
Disconnect現在のピン接続を解除する。
ConnectedToこのピンに接続しているピンを取得する。
ConnectionMediaTypeもしあれば、現在のピン接続のメディア タイプを取得する。
QueryPinInfoピンについての情報を取得する。
QueryDirectionピンの向き(入力か出力か)を取得する。
QueryIdピンの ID を取得する。
QueryAcceptピンが指定したメディア タイプを受け入れるかどうかを確認する。
EnumMediaTypesピンの許容するメディア タイプを列挙する。
QueryInternalConnections(フィルタ内で) 内部的にこのピンに接続しているピンを取得する。
EndOfStreamピンに追加データはもうないことを通知する。
NewSegmentセグメントとしてこの呼び出しがグループ化された後でメディア サンプルを受け取ったことをピンに知らせる。
IQualityControl メソッド
Notify品質変更が要求されたことをピンに通知する。
SetSink外部の品質マネージャを設定する。

CBasePin.m_pName

CBasePin クラス

ピン名。

構文

WCHAR *m_pName;

注意

The QueryPinInfo メソッドはこの文字列をピン名として返し、QueryId メソッドはそれをピン ID として返す。しかし一般的には、ピン名とピン ID は同じであると要求されてはいない。ピン ID はグラフで使用される。詳細については、「IBaseFilter::FindPin」を参照すること。

CBasePin.m_Connected

CBasePin クラス

このピンに接続しているピンへのポインタ。

構文

IPin *m_Connected;

CBasePin.m_dir

CBasePin クラス

ピンの向き。

構文

PIN_DIRECTION m_dir;

CBasePin.m_pLock

CBasePin クラス

クリティカル セクション オブジェクトへのポインタ。

構文

CCritSec *m_pLock;

CBasePin.m_bRunTimeError

CBasePin クラス

ランタイム エラーが起きたかどうかを示すフラグ。

構文

bool m_bRunTimeError;

注意

このフラグはデフォルトでは FALSE である。ストリーミング中にランタイム エラーが起きたら、このフラグを TRUE に設定すること。Inactive メソッドがこのフラグを FALSE に再設定する。

CBasePin.m_bCanReconnectWhenActive

CBasePin クラス

ピンが動的再接続をサポートするかどうかを示すフラグ。

構文

bool m_bCanReconnectWhenActive;

注意

このフラグはデフォルトでは FALSE である。

CBasePin.m_bTryMyTypesFirst

CBasePin クラス

ピンが受信ピンの許容するメディア タイプの前に自分自身のそれを試みるかどうかを示すフラグ。

構文

bool m_bTryMyTypesFirst;

注意

このフラグはデフォルトでは FALSE である。このフラグが TRUE なら、AgreeMediaType メソッドはメディア タイプを試みる順番を逆転させる。

CBasePin.m_pFilter

CBasePin クラス

ピンを作成したフィルタへのポインタ。

構文

CBaseFilter *m_pFilter;

CBasePin.m_pQSink

CBasePin クラス

品質メッセージを扱うオブジェクトへのポインタ。

構文

IQualityControl *m_pQSink;

CBasePin.m_TypeVersion

CBasePin クラス

許容メディア タイプ セットの現在のバージョン。

構文

LONG m_TypeVersion;

CBasePin.m_mt

CBasePin クラス

現時のピン接続のメディア タイプ。

構文

CMediaType m_mt;

CBasePin.m_tStart

CBasePin クラス

セグメント開始タイム。

構文

CRefTime m_tStart;

CBasePin.m_tStop

CBasePin クラス

セグメント終了タイム。

構文

CRefTime m_tStop;

CBasePin.m_dRate

CBasePin クラス

セグメント レート。

構文

double m_dRate;

CBasePin::Active

CBasePin クラス

ピンにフィルタが今アクティブであることを通知する。

構文

virtual HRESULT Active(void);

戻り値

S_OK を返す。

注意

フィルタが停止からポーズになるとき、CBaseFilter クラスは、フィルタの接続されたすべてピンにこのメソッドを呼び出す。

このメソッドは基底クラスでは何もしない。派生クラスはこのメソッドをオーバーライドできる、たとえば、ピンがアロケータをデコミットしたり、ハードウェア リソースを取得したり。

フィルタ グラフ マネージャの内部状態はこのメンバ関数が返るまでアップデートされないので、このメソッドから状態をテストすべきではない。

CBasePin::AgreeMediaType

CBasePin クラス

ピン接続をするメディア タイプを調べる。

構文

virtual HRESULT AgreeMediaType(
    IPin *pReceivePin,
    const CMediaType *pmt
);

パラメータ

pReceivePin
受信ピンの IPin インターフェイスへのポインタ。
pmt
メディア タイプを指定する CMediaType オブジェクトへのポインタ、あるいは NULL。

戻り値

HRESULT 値を返す。次の表は、可能な値を示している。

S_OK成功。
VFW_E_NO_ACCEPTABLE_TYPES受け入れ可能なメディア タイプは見つからなかった。

注意

pmt パラメータが NULL 以外で、メディア タイプを完全に指定したなら、このメソッドはそのメディア タイプを使って接続をしようとする。これが失敗すると、このメソッドはエラーを返す。

pmt パラメータが NULL あるいはパーシャル メディア タイプなら、このメソッドは次の順でメディア タイプを試みる :

  1. 受信ピンの許容するメディア タイプ。
  2. このピンの許容するメディア タイプ。

許容されたメディア タイプは EnumMediaTypes メソッドで列挙され、列挙された結果は TryMediaTypes メソッドに渡される。

CBasePin::AttemptConnection

CBasePin クラス

指定したメディア タイプを使用している他のピンへの接続。

構文

virtual HRESULT AttemptConnection(
    IPin *pReceivePin,
    const CMediaType *pmt
);

パラメータ

pReceivePin
受信ピンの IPin インターフェイスへのポインタ。
pmt
メディア タイプを指定する CMediaType オブジェクトへのポインタ。

戻り値

HRESULT 値を返す。次の表は、可能な値を示している。

S_OK成功。
VFW_E_TYPE_NOT_ACCEPTEDメディア タイプが受け入れられなかった。

注意

このメソッドは指定したメディア タイプで 2 つのピンを接続しようとする。そのタイプが受け入れられないと、このメソッドは他のメディア タイプを試みることなく失敗する。

メディア タイプが受け入れられたなら、このメソッドは受信ピンの IPin::ReceiveConnection メソッドを呼び出す。次に CompleteConnect メソッドを呼び出して、接続を完了する。

CBasePin::BreakConnect

CBasePin クラス

接続からピンを解放する

構文

virtual HRESULT BreakConnect(void);

戻り値

S_OK を返す。

注意

このメソッドは Disconnect メソッドによってピンが接続解除している間に呼び出される。CheckConnect メソッドが失敗すると、接続を試みる間にも呼び出される。

このメソッドは CheckConnect メソッドが取得したすべてのリソースをフリーにしなければならない。たとえば、CheckConnect でメモリを割り当てたなら、BreakConnect でメモリをフリーにすべきだ。CheckConnect でインターフェイスの接続ピンを問い合わせたなら、BreakConnect でインターフェイスをフリーにすべきだ。

CBasePin::CanReconnectWhenActive

CBasePin クラス

ピンが動的再接続をサポートするかどうかを問い合わせる。

構文

bool CanReconnectWhenActive(void);

戻り値

ピンが動的再接続可能かどうかを示すブール値を返す。TRUE なら、ピンは動的再接続可能。

注意

デフォルトでは、ピンの再接続をする前にフィルタを停止しなければならない。しかし、ピンが動的再接続をサポートするなら、フィルタがアクティブな間に再接続が可能である。詳細については、「動的グラフ作成」を参照すること。

CBasePin::CBasePin

CBasePin クラス

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

構文

CBasePin(
    TCHAR *pObjectName,
    CBaseFilter *pFilter,
    CCritSec *pLock,
    HRESULT *phr,
    LPCWSTR pName,
    PIN_DIRECTION dir
);

パラメータ

pObjectName
オブジェクトのピン名が入る文字列のポインタ。詳細については、「CBaseObject」を参照すること。
pFilter
このピンを作成したフィルタへのポインタ。
pLock
CCritSec ロックへのポインタ、状態移行を継続するために用いられる。フィルタ ロック CBaseFilter.m_pLock として同じクリティカル セクションでありうる。
phr
メソッドの成功・失敗を示す HRESULT 値を受け取る変数へのポインタ。この値を S_OK に初期化してから、オブジェクトを作成する。この値は、エラーが発生した場合にだけ変更される。
pName
オブジェクトのピン名が入る Unicode™ 文字列。ピンの識別名はグラフ継続性をサポートする。詳細については、「QueryPinInfo」を参照すること。
dir
ピンの向きを指定する PIN_DIRECTION 列挙のメンバ。

注意

pLock によって指定されたクリティカル セクションはピンの状態を継続する、状態とは接続状態、アロケータの選択、メディア タイプ、フィラッシュ操作の状態を含む。このクリティカル セクションをストリーミング操作の継続に使ってはならない。詳細については、「フィルタ開発者が使用するデータ フロー」を参照すること。

フィルタはそのコンストラクタ メソッドでピンを作成する可能性があるので、この時 pFilter ポインタは有効なオブジェトを参照しない場合がある。ポインタをストアすること、しかしピンのコンストラクタ内の間はそれを再参照してはならない。

CBasePin::~CBasePin

CBasePin クラス

デストラクタ メソッド。

構文

CBasePin(void);

CBasePin::CheckConnect

CBasePin クラス

ピン接続が適切かどうかを確認する。

構文

virtual HRESULT CheckConnect(
    IPin *pPin
);

パラメータ

pPin
他のピンの IPin インターフェイスへのポインタ。

戻り値

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

S_OK成功。
VFW_E_INVALID_DIRECTIONピンの向きに互換性がない。

注意

このメソッドは接続処理の終了時に両方のピンを呼び出される。接続ピンは CBasePin::Connect メソッドから呼び出し、受信ピンは CBasePin::ReceiveConnection メソッドから呼び出す。

このメソッドを使って pPin パラメータによって指定されたピンが接続に適しているかどうかを確認すること。両方のピンが同じ向き(両方とも入力、あるいは両方とも出力)なら、基底クラスはエラーを返す。派生クラスはこのメソッドをオーバーライドし、ピン内の他の機能を検証することができる。たとえば、CBaseOutputPin クラスは入力ピンにその IMemInputPin インターフェイスを問い合わせる。

このメソッドが失敗すると、接続は失敗しピンは BreakConnect メソッドを呼び出す。CheckConnect で取得したリソースをフリーにするには BreakConnect を使用すること。たとえば、CheckConnectQueryInterface メソッドを呼び出すなら、BreakConnect はそのインターフェイスを解放しなければならない。

CBasePin::CheckMediaType

CBasePin クラス

ピンが指定したメディア タイプを受け入れるかをたずねる。

構文

virtual HRESULT CheckMediaType(
    const CMediaType *pmt
) PURE;

パラメータ

pmt
提案されたメディア タイプ含む CMediaType オブジェクトへのポインタ。

戻り値

提案されたメディア タイプが受け入れられるなら S_OK を返す。そうでなければ S_FALSE かエラー コードを返す。

注意

派生クラスはこの純粋仮想メソッドをオーバーライドしなければならない。

CBasePin::CompleteConnect

CBasePin クラス

他のピンへの接続を完了する。

構文

virtual HRESULT CompleteConnect(
    IPin *pReceivePin
);

パラメータ

pReceivePin
他のピンの IPin インターフェイスへのポインタ。

戻り値

S_OK を返す。

注意

このメソッドは接続処理の終わりに両方のピンで呼び出される。接続ピンは CBasePin::Connect 内から呼び出し、受信ピンは CBasePin::ReceiveConnection 内から呼び出す。

基底クラスでは、このメソッドはただ S_OK を返すだけである。派生クラスが接続を完了する要求を持っているなら、このメソッドをオーバーライドすべきだ。たとえば、CBaseOutputPin クラスはこのメソッドを使用して、メモリ アロケータを決定する。

このメソッドが失敗すると、すべての接続の試みも失敗し、ピンは受信ピンから切り離される。

CBasePin::Connect

CBasePin クラス

ピンを他のピンに接続する。 IPin::Connect メソッドの実装。

構文

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

パラメータ

pReceivePin
受信ピンの IPin インターフェイスへのポインタ。
pmt
接続のメディア タイプを指定する AM_MEDIA_TYPE 構造体へのポインタ。

戻り値

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 値にすることで、それはパーシャル メディア タイプをも指定し得る。

基底クラスでは、このメソッドはピンがすでに接続されているか、フィルタが停止しているかをテストする。接続処理の残りは AgreeMediaType メソッドに委任する。/P>

CBasePin::ConnectedTo

CBasePin クラス

もしあれば、このピンに接続しているピンを取得する。 IPin::ConnectedTo メソッドの実装。

構文

HRESULT ConnectedTo(
    IPin **ppPin
);

パラメータ

ppPin
他のピンの IPin インターフェイスへのポインタを取得する変数のアドレス。

戻り値

HRESULT 値を返す。次の表は、可能な値を示している。

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

注意

このメソッドが成功すると、それが返す IPin インターフェイスには参照カウントが残る。解放時には注意が必要。

CBasePin::ConnectionMediaType

CBasePin クラス

もしあれば、現在のピン接続のメディア タイプを取得する。IPin::ConnectionMediaType メソッドの実装。

構文

HRESULT ConnectionMediaType(
    AM_MEDIA_TYPE *pmt
);

パラメータ

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

戻り値

HRESULT 値を返す。次の表は、可能な値を示している。

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

注意

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

もしピンが接続されていないなら、このメソッドは pmt によって指定されたメモリ ブロックをゼロにし、エラー コードを返す。

CBasePin::CurrentRate

CBasePin クラス

CBasePin::NewSegment メソッドによってセットされたセグメント レートを取得する。

構文

double CurrentRate(void);

戻り値

m_dRate の戻り値。

CBasePin::CurrentStartTime

CBasePin クラス

CBasePin::NewSegment メソッドによってセットされたセグメント開始タイムを取得する。

構文

REFERENCE_TIME CurrentStartTime(void);

戻り値

m_tStart の戻り値。

CBasePin::CurrentStopTime

CBasePin クラス

CBasePin::NewSegment メソッドによってセットされたセグメント終了タイムを取得する。

構文

REFERENCE_TIME CurrentStopTime(void);

戻り値

m_tStop の値を返す。

CBasePin::Disconnect

CBasePin クラス

現在のピン接続を解除する。 IPin::Disconnect メソッドの実装。

構文

HRESULT Disconnect(void);

戻り値

HRESULT 値を返す。次の表は、可能な値を示している。

S_FALSEピンが接続されていない。
S_OK成功。
VFW_E_NOT_STOPPED フィルタがアクティブで、ピンは動的再接続をサポートしていない。

注意

基底クラスは仕事の大部分を DisconnectInternal メソッドに委任する。

CBasePin::DisconnectInternal

CBasePin クラス

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

構文

HRESULT DisconnectInternal(void);

戻り値

HRESULT 値を返す。次の表は、可能な値を示している。

S_FALSEピンが接続されていない。
S_OK成功。
VFW_E_NOT_STOPPEDフィルタがアクティブで、ピンは動的再接続をサポートしていない

注意

Disconnect メソッドは接続処理をこのメソッドに委任する。このメソッドは BreakConnect メソッドを呼び出す。それはまた m_Connected メンバ変数によって保持されている他のピンの参照カウントを解放する。

CBasePin::DisplayPinInfo

CBasePin クラス

デバッグ中にピン接続をトレースする。

構文

void DisplayPinInfo(
    IPin *pReceivePin
);

パラメータ

pReceivePin
受信ピンへのポインタ

注意

デバッグ ビルドでは、このメソッドは DbgLog 関数を呼び出し、接続の試みをトレースする。リテール ビルドではこのメソッドは何もしない。

CBasePin::DisplayTypeInfo

CBasePin クラス

デバッグ中にメディア タイプ情報を表示する。

構文

void DisplayTypeInfo(
    IPin *pPin,
    const CMediaType *pmt
);

パラメータ

pPin
無視される。
pmt
メディア タイプを指定する CMediaType オブジェクトへのポインタ。

注意

デバッグ ビルドでは、このメソッドは DbgLog 関数を呼び出し、接続の試みをトレースする。リテール ビルドではこのメソッドは何もしない。

CBasePin::EndOfStream

IPin Interface

ピンに追加データはもうないことを通知する。 IPin::EndOfStream メソッドの実装。このメソッドは入力ピンでのみ呼び出すこと。

構文

HRESULT EndOfStream(void);

戻り値

S_OK を返す。

注意

フィルタはエンドオブストリーム通知ダウンストリームをフィルタに接続している入力ピンに渡すべきである。フィルタがレンダラなら、EC_COMPLETE イベント通知をフィルタ グラフ マネージャに送るべきである。詳細については、「フィルタ開発者が使用するデータ フロー」を参照すること。

基底クラスでは、このメソッドは何もしない。派生クラスはこのメソッドをオーバーライドすべきである。

CBasePin::EnumMediaTypes

CBasePin クラス

ピンの許容するメディア タイプを列挙する。IPin::EnumMediaTypes メソッドの実装。

構文

HRESULT EnumMediaTypes(
    IEnumMediaTypes **ppEnum
);

パラメータ

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

戻り値

HRESULT 値を返す。次の表は、可能な値を示している。

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

注意

入力ピンは許容できるタイプの列挙を要求されない。出力ピンは少なくとも 1 つの許容タイプを列挙しなければならない。そうしないと、両方のピンに許容可能なタイプがなくなり、接続が不可能になる。

標準的な COM 列挙子と同様に IEnumMediaTypes インターフェイスは動作する。詳細については、「フィルタ グラフ内のオブジェクトの列挙」を参照すること。メソッドが成功すると、IEnumMediaTypes インターフェイスには参照カウントが残る。解放時には注意が必要。

CEnumMediaTypes 基底クラスは IEnumMediaTypes を実装する。それはピンの CBasePin::GetMediaType メソッドを呼び出して、メディア タイプを列挙する。

CBasePin::GetConnected

CBasePin クラス

このピンに接続しているピンを取得。

構文

IPin *GetConnected(void);

戻り値

他のピンの IPin インターフェイスへのポインタを返す。

注意

ピンが接続していなければ、このメソッドは NULL を返す。CBasePin::IsConnected メソッドを呼び出して、ピンが接続されているかどうかを確認すること。

CBasePin::GetMediaType

CBasePin クラス

許容するメディア タイプをインデックス値で取得する。

構文

virtual HRESULT GetMediaType(
    int iPosition,
    CMediaType *pMediaType
);

パラメータ

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

戻り値

HRESULT 値を返す。次の表は、可能な値を示している。

S_OK 成功。
VFW_S_NO_MORE_ITEMSインデックスが範囲外である。
E_INVALIDARGインデックスがゼロより小さい。
E_UNEXPECTED予期しないエラー。

注意

ピンが許容可能なメディア タイプのリストから、このメソッドは iPosition 値でそのタイプを返す。CEnumMediaTypes クラスはこのメソッドを呼び出して許容可能なメディア タイプを列挙する。

基底クラスは E_UNEXPECTED を返す。派生クラスでこのメソッドをオーバーライドすること。

CBasePin::GetMediaTypeVersion

CBasePin クラス

許容するメディア タイプ セットのバージョン数を取得。

構文

virtual LONG GetMediaTypeVersion(void);

戻り値

m_TypeVersion メンバ変数を返す。

注意

CBasePin コンストラクタはバージョン数を 1 で初期化する。基底クラスでは、この数は決して変化しない。ピンが動的に許容可能なメディア タイプのリストを変更するなら、リストが変更されるたびにバージョン数をインクリメントするべきである。バージョン数をインクリメントするには、IncrementTypeVersion メソッドを呼び出すこと。

CEnumMediaTypes クラスによって実装されるメディア タイプ列挙子は、バージョン数を使ってそれ自身とピンとの同期を保つ。

CBasePin::Inactive

CBasePin クラス

ピンにフィルタが今既にアクティブではないことを通知する。

構文

virtual HRESULT Inactive(void);

戻り値

S_OK を返す。

注意

フィルタが停止すると、CBaseFilter クラスはフィルタに接続されたのすべてのピンで、このメソッドを呼び出す。

このメソッドは基底クラスでは何もしない。派生クラスはこのメソッドをオーバーライドし、Active メソッドが取得したすべてのリソースをフリーにすべきである、たとえばピンのアロケータをデコミットにする。

フィルタ グラフ マネージャの内部状態はこのメソッドが返るまでアップデートされないので、このメソッドから状態をテストしてはならない。

CBasePin::IncrementTypeVersion

CBasePin クラス

許容するメディア タイプ セットのバージョン数をインクリメントする。

構文

void IncrementTypeVersion(void);

注意

このメソッドは m_TypeVersion メンバ変数をインクリメントする。ピンが動的に許容するメディア タイプのリストを変更するなら、リストが変更されるたびにこのメソッドを呼び出すこと。詳細については、「GetMediaTypeVersion」を参照すること。

CBasePin::IsConnected

CBasePin クラス

ピンが他のピンと接続しているかどうかを確認する。

構文

BOOL IsConnected(void);

戻り値

ピンが接続されていれば TRUE を返す。そうでなければ FALSE を返す。

CBasePin::IsStopped

CBasePin クラス

このピンを含むフィルタが停止しているかどうかを確認する。

構文

BOOL IsStopped(void);

戻り値

フィルタが停止していれば TRUE を返す。そうでなければ FALSE を返す。

注意

CBasePin コンストラクタ メソッド内からこのメソッドを呼び出してはならない、なぜならフィルタはまだ初期化されていない可能性があるからである。

CBasePin::Name

CBasePin クラス

ピンの識別名を取得する。

構文

LPWSTR Name(void);

戻り値

m_pName メンバ変数の値を返す。

CBasePin::NewSegment

CBasePin クラス

セグメントとしてこの呼び出しがグループ化された後でメディア サンプルを受け取ったことをピンに知らせる。 IPin::NewSegment メソッドの実装。

構文

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

パラメータ

tStart
セグメントの開始メディア位置、100 ミリ秒単位。
tStop
セグメントの終了メディア位置、100 ミリ秒単位。
dRate
セグメントが処理されるべきレート、オリジナル レートのパーセンテージ。

戻り値

S_OK を返す。

注意

このメソッドは m_tStartm_tStopm_dRate メンバ変数を設定する。派生クラスでは、このメソッドをオーバーライドして、通知ダウンストリームに渡すこと。

CBasePin::Notify

CBasePin クラス

品質変更が要求されたことをピンに通知する。IQualityControl::Notify メソッドの実装。

構文

HRESULT Notify(
    IBaseFilter *pSelf,
    Quality q
);

パラメータ

pSelf
品質コントロール メッセージを出力するフィルタの IBaseFilter インターフェイスへのポインタ。
q
品質コントロール メッセージを含む Quality 構造体。

戻り値

基底クラスは E_NOTIMPL を返す。

注意

出力ピンはこのメソッドをオーバーライドして品質コントロール メッセージを受けれるべきである。

外部の品質コントロール マネージャがインストールされているなら (「SetSink」を参照)、メッセージをその品質マネージャに渡すこと。そうでなければ、フィルタはそのメッセージを自分自身で扱う、あるいはメッセージ アップストリームに送るべきである。詳細については、「品質コントロールの管理」を参照すること。

CBasePin::QueryAccept

CBasePin クラス

ピンが指定したメディア タイプを受け入れるかどうかを確認する。IPin::QueryAccept メソッドの実装。

構文

HRESULT QueryAccept(
    const AM_MEDIA_TYPE *pmt
);

パラメータ

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

戻り値

メディア タイプが受け入れ可能なら S_TRUE を返す。そうでなければ、S_FALSE を返す。

注意

基底クラスでは、このメソッドは CheckMediaType メソッドに委任する。CheckMediaType が失敗すると、QueryAccept は S_FALSE を返す。

このメソッドはピンのクリティカル セクション (m_pLock) を保持しない。派生クラスで動的に許容可能なメディア タイプ セットを修正するなら、このメソッドをオーバーライドしてクリティカル セクションをホールドすべきである。

CBasePin::QueryDirection

CBasePin クラス

ピンの向き (入力か出力か) を取得する。 IPin::QueryDirection メソッドの実装。

構文

HRESULT QueryDirection(
    PIN_DIRECTION *pPinDir
);

パラメータ

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

戻り値

S_OK あるいは E_POINTER を返す。

CBasePin::QueryId

CBasePin クラス

ピンの ID を取得する。 IPin::QueryId メソッドの実装。

構文

HRESULT QueryId(
    LPWSTR *Id
);

パラメータ

Id
ピンの ID へのポインタ。

戻り値

HRESULT 値を返す。次の表は、可能な値を示している。

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

注意

このメソッドは m_pName メンバ変数を返す。

CBasePin::QueryInternalConnections

CBasePin クラス

(フィルタ内で) 内部的にこのピンに接続しているピンを取得する。 IPin::QueryInternalConnections メソッドの実装。

構文

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

パラメータ

apPin
IPin ポインタの配列のアドレス。
nPin
入力では、配列のサイズを指定。このメソッドが返るとき、この値は配列に戻ったポインタの数がセットされる。

戻り値

次の HRESULT 値の 1 つが返る。

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

基底クラスは E_NOTIMPL を返す。

注意

いくつかのフィルタでは、入力ピンは固有の出力ピンに対応している。各ピンで、このメソッドは対応するピンのポインタで配列を埋める。すべての入力ピンがすべての出力ピンにデータを提供する場合は E_NOTIMPL をかえす。

CBasePin::QueryPinInfo

CBasePin クラス

ピンについての情報を取得する。IPin::QueryPinInfo メソッドの実装。

構文

HRESULT QueryPinInfo(
    PIN_INFO *pInfo
);

パラメータ

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

戻り値

S_OK あるいは E_POINTER を返す。

注意

このメソッドはPIN_INFO 構造体の achName メンバに対して m_pName メンバ変数を使う。

メソッドが返るとき、PIN_INFO 構造体の pFilter メンバが NULL 以外なら、参照カウントが残っている。そのインターフェイスを解放する際には注意が必要。

CBasePin::ReceiveConnection

CBasePin クラス

他のピンからの接続を受け入れる。 IPin::ReceiveConnection メソッドの実装。

構文

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

パラメータ

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

戻り値

HRESULT 値を返す。次の表は、可能な値を示している。

S_OK成功。
E_POINTER Null ポインタ引数。
VFW_E_ALREADY_CONNECTEDピンは既に接続している。
VFW_E_NOT_STOPPEDフィルタがアクティブで、ピンは動的再接続をサポートしていない
VFW_E_TYPE_NOT_ACCEPTED指定したメディアタイプは受け入れられない。

注意

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

基底クラスでは、このメソッドは次のステップを実行する :

これらのすべてのステップが成功すると、このメソッドは CompleteConnect メソッドとSetMediaType メソッドを呼び出して接続を完了する。CheckConnectCheckMediaType が失敗すると、このメソッドは BreakConnect メソッドを呼び出す。

CBasePin::Run

CBasePin クラス

フィルタが今実行中であることをピンに知らせる。

構文

HRESULT Run(
    REFERENCE_TIME tStart
);

パラメータ

tStart
フィルタの IMediaFilter::Run メソッドに送られる開始タイム。

戻り値

S_OK を返す。

注意

フィルタがポーズから実行になるとき、CBaseFilter クラスはフィルタのすべてのピンでこのメソッドを呼び出す。

このメソッドは基底クラスでは何もしない。派生クラスはこのメソッドをオーバーライドできる。たとえば、あるピンはサンプルを出力するワーカー スレッドを開始するかもしれない。

フィルタ グラフ マネージャの内部状態はこのメンバ関数が返るまでアップデータされないので、このメソッドから状態をテストしてはならない。

CBasePin::SetMediaType

CBasePin クラス

接続するメディア タイプを設定する。

構文

virtual HRESULT SetMediaType(
    const CMediaType *pmt
);

パラメータ

pmt
メディア タイプを指定する CMediaType オブジェクトへのポインタ。

戻り値

S_OK を返す。

注意

このメソッドはピン接続のフォーマットを確立する。このメソッドを呼び出す前に、ピンは CBasePin::CheckMediaType メソッドを呼び出してメディア タイプが受け入れ可能かどうかを確認する。したがって、pmt パラメータは受け入れ可能なメディアタイプとして仮定されている。

基底クラスでは、このメソッドは m_mt メンバ変数をセットし、S_OK を返す。メディア タイプがセットされたとき派生クラスが通知を要求するなら、その派生クラスはこのメソッドをオーバーライドできる。

CBasePin::SetReconnectWhenActive

CBasePin クラス

ピンが動的再接続をサポートするかどうかを指定する。

構文

void SetReconnectWhenActive(
    bool bCanReconnect
);

パラメータ

bCanReconnect
ピンが動的再接続をサポートするかどうかを示すブール値。TRUE ならピンは動的再接続が可能。

注意

デフォルトではピンへの再接続の前にフィルタを停止させなければならない。フィルタがアクティブな間に再接続できるのなら、このメソッドを値を TRUE にして呼び出すこと。詳細については、「動的グラフ作成」を参照すること。

CBasePin::SetSink

CBasePin クラス

外部の品質マネージャを設定する。 IQualityControl::SetSink メソッドの実装。

構文

HRESULT SetSink(
    IQualityControl *piqc
);

パラメータ

piqc
品質マネージャの IQualityControl インターフェイスへのポインタ。

戻り値

S_OK を返す。

注意

このメソッドを呼び出して品質コントロール マネージャを外部の品質マネージャにリダイレクトすること。詳細については、「品質コントロールの管理」を参照すること。

CBasePin::TryMediaTypes

CBasePin クラス

メディア タイプのリストを与え、それらのタイプの 1 つを使用して接続を完了しようと試みる。

構文

virtual HRESULT TryMediaTypes(
    IPin *pReceivePin,
    const CMediaType *pmt,
    IEnumMediaTypes *pEnum
);

パラメータ

pReceivePin
受信ピンの IPin インターフェイスへのポインタ。
pmt
可能なメディア タイプを限定する CMediaType オブジェクトへのポインタ、あるいは NULL。
pEnum
メディア タイプ リストを列挙するのに用いた IEnumMediaTypes インターフェイスへのポインタ。

戻り値

HRESULT 値を返す。次の表は、可能な値を示している。

S_OK成功。
VFW_E_NO_ACCEPTABLE_TYPES受け入れ可能なメディアタイプがない。

注意

IEnumMediaTypes インターフェイスが返した各メディア タイプで、このメソッドは AttemptConnection メソッドを呼び出して接続を試みる。

pmt パラメータが NULL 以外なら、ピンはこのタイプに適合しないメディア タイプをスキップする。pmt パラメータにはパーシャル メディア タイプを指定することができる。パーシャル メディア タイプはメジャー タイプ、サブタイプ、フォーマットのいずれかが GUID_NULL 値を持つ。GUID_NULL 値は「ワイルドカード」値のようにどんなタイプとも適合する。