Microsoft DirectX 8.0 |
汎用ピンを実装する抽象クラス。
宣言 : Amfilter.h
フィルタ グラフ マネージャがすべてのピン接続を開始する。アプリケーションが 2 つのピンを接続する必要があるなら、フィルタ グラフ マネージャの IFilterGraph::ConnectDirect メソッドを呼び出すべきだ。
2 つのピンが接続されたとき、接続 ピンと 受信 ピンが存在する。フィルタ グラフ マネージャは接続ピンの IPin::Connect メソッドを呼び出す。これは受信ピンと接続している可能なメディア タイプを指定する。接続ピンは受信ピンの IPin::ReceiveConnection メソッドを呼び出すことで、接続を完了する。受信ピンは接続を受け入れることも拒否することも可能だ。
フィルタ グラフ マネージャがメディア タイプを指定すると、ピンはそのタイプで接続しようとする。そうでなければ、ピンは受け入れ可能なタイプをネゴシエーションする。タイプが一致できないと、接続は失敗する。フィルタ グラフ マネージャはパーシャル メディア タイプを指定する場合もある。パーシャル メディア タイプはメジャー タイプ、サブタイプ、フォーマットに GUID_NULL 値を持つ。この場合、ピンは指定した部分のタイプに合わせようとし、GUID_NULL はワイルドカードとして働く。
Microsoft® DirectShow® の実装では、接続ピンは必ず出力ピンで、受信ピンは必ず入力ピンである。
ピンが接続を受け入れることができるかを検証することによって CBasePin::Connect メソッドは開始する。たとえば、それはピンが既に接続されていることをチェックする。次に、接続処理の残りの部分を protected クラス メソッド AgreeMediaType に委任する。それ以降のすべては AgreeMediaType によって実行される。
メディア タイプが完全に指定されたら、ピンは AttemptConnection メソッドを呼び出す。そうでなければ、次の手順でピンは複数のメディア タイプを試す。
注意 この順番は m_bTryMyTypesFirst フラグを TRUE に設定することによって逆にできる。
それぞれの場合で、ピンは IPin::EnumMediaTypes を呼び出して、列挙オブジェクトを取得する。それは TryMediaTypes メソッドに列挙オブジェクトを渡す。このメソッドは列挙子が提供するすべてのメディア タイプについてループし、各タイプに AttemptConnection を呼び出す。
AttemptConnection 内で、接続ピンは次のメソッドを呼び出す :
以下に注意 :
これらのステップが失敗すると、ピンは BreakConnect メソッドを呼び出して、CheckConnect によって行われたステップをすべて元に戻す。
受信サイドでは、ReceiveConnection は受信ピンの CheckConnect と CompleteConnect メソッドを呼び出す。これらのどちらかが失敗すると、接続の試みがまた失敗となる。
ピンは、接続しているフィルタの状態が移行するたびに通知を受ける。次の表に示すように、フィルタはそれぞれの状態移行について、ピンの対応するメソッドを呼び出す。
フィルタ状態 | CBasePin メソッド |
---|---|
停止 | 非アクティブ |
ポーズ | アクティブ |
実行 | 実行 |
派生クラスはこれらのメソッドをオーバーライドし、状態移行に対応すべきである。フィルタによって、ピンはサンプルの出力、メモリ アロケータのコミット、コミット等を行うワーカースレッドを使う場合もある。
CBasePin を使ってピンを実装するには、基底クラスから新しいクラスを派生し、いくつかのメソッドをオーバーライドしなければならない。オーバーライドしなければならないのは、次のメソッドである。
次のメソッドについても、オーバーライドが必要である可能性が高い。
最後に、必ず IPin::BeginFlush メソッドと IPin::EndFlush メソッドを実装しなければならない。
CBaseInputPin と CBaseOutputPin のように、これらのメソッドのいくつかは 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 | 外部の品質マネージャを設定する。 |
ピン名。
構文
WCHAR *m_pName;
注意
The QueryPinInfo メソッドはこの文字列をピン名として返し、QueryId メソッドはそれをピン ID として返す。しかし一般的には、ピン名とピン ID は同じであると要求されてはいない。ピン ID はグラフで使用される。詳細については、「IBaseFilter::FindPin」を参照すること。
このピンに接続しているピンへのポインタ。
構文
IPin *m_Connected;
ピンの向き。
構文
PIN_DIRECTION m_dir;
クリティカル セクション オブジェクトへのポインタ。
構文
CCritSec *m_pLock;
ランタイム エラーが起きたかどうかを示すフラグ。
構文
bool m_bRunTimeError;
注意
このフラグはデフォルトでは FALSE である。ストリーミング中にランタイム エラーが起きたら、このフラグを TRUE に設定すること。Inactive メソッドがこのフラグを FALSE に再設定する。
ピンが動的再接続をサポートするかどうかを示すフラグ。
構文
bool m_bCanReconnectWhenActive;
注意
このフラグはデフォルトでは FALSE である。
ピンが受信ピンの許容するメディア タイプの前に自分自身のそれを試みるかどうかを示すフラグ。
構文
bool m_bTryMyTypesFirst;
注意
このフラグはデフォルトでは FALSE である。このフラグが TRUE なら、AgreeMediaType メソッドはメディア タイプを試みる順番を逆転させる。
ピンを作成したフィルタへのポインタ。
構文
CBaseFilter *m_pFilter;
品質メッセージを扱うオブジェクトへのポインタ。
構文
IQualityControl *m_pQSink;
許容メディア タイプ セットの現在のバージョン。
構文
LONG m_TypeVersion;
現時のピン接続のメディア タイプ。
構文
CMediaType m_mt;
セグメント開始タイム。
構文
CRefTime m_tStart;
セグメント終了タイム。
構文
CRefTime m_tStop;
セグメント レート。
構文
double m_dRate;
ピンにフィルタが今アクティブであることを通知する。
構文
virtual HRESULT Active(void);
戻り値
S_OK を返す。
注意
フィルタが停止からポーズになるとき、CBaseFilter クラスは、フィルタの接続されたすべてピンにこのメソッドを呼び出す。
このメソッドは基底クラスでは何もしない。派生クラスはこのメソッドをオーバーライドできる、たとえば、ピンがアロケータをデコミットしたり、ハードウェア リソースを取得したり。
フィルタ グラフ マネージャの内部状態はこのメンバ関数が返るまでアップデートされないので、このメソッドから状態をテストすべきではない。
ピン接続をするメディア タイプを調べる。
構文
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 あるいはパーシャル メディア タイプなら、このメソッドは次の順でメディア タイプを試みる :
- 受信ピンの許容するメディア タイプ。
- このピンの許容するメディア タイプ。
許容されたメディア タイプは EnumMediaTypes メソッドで列挙され、列挙された結果は TryMediaTypes メソッドに渡される。
指定したメディア タイプを使用している他のピンへの接続。
構文
virtual HRESULT AttemptConnection( IPin *pReceivePin, const CMediaType *pmt );
パラメータ
- pReceivePin
- 受信ピンの IPin インターフェイスへのポインタ。
- pmt
- メディア タイプを指定する CMediaType オブジェクトへのポインタ。
戻り値
HRESULT 値を返す。次の表は、可能な値を示している。
S_OK 成功。 VFW_E_TYPE_NOT_ACCEPTED メディア タイプが受け入れられなかった。
注意
このメソッドは指定したメディア タイプで 2 つのピンを接続しようとする。そのタイプが受け入れられないと、このメソッドは他のメディア タイプを試みることなく失敗する。
メディア タイプが受け入れられたなら、このメソッドは受信ピンの IPin::ReceiveConnection メソッドを呼び出す。次に CompleteConnect メソッドを呼び出して、接続を完了する。
接続からピンを解放する
構文
virtual HRESULT BreakConnect(void);
戻り値
S_OK を返す。
注意
このメソッドは Disconnect メソッドによってピンが接続解除している間に呼び出される。CheckConnect メソッドが失敗すると、接続を試みる間にも呼び出される。
このメソッドは CheckConnect メソッドが取得したすべてのリソースをフリーにしなければならない。たとえば、CheckConnect でメモリを割り当てたなら、BreakConnect でメモリをフリーにすべきだ。CheckConnect でインターフェイスの接続ピンを問い合わせたなら、BreakConnect でインターフェイスをフリーにすべきだ。
ピンが動的再接続をサポートするかどうかを問い合わせる。
構文
bool CanReconnectWhenActive(void);
戻り値
ピンが動的再接続可能かどうかを示すブール値を返す。TRUE なら、ピンは動的再接続可能。
注意
デフォルトでは、ピンの再接続をする前にフィルタを停止しなければならない。しかし、ピンが動的再接続をサポートするなら、フィルタがアクティブな間に再接続が可能である。詳細については、「動的グラフ作成」を参照すること。
コンストラクタ メソッド。
構文
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(void);
ピン接続が適切かどうかを確認する。
構文
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 を使用すること。たとえば、CheckConnect が QueryInterface メソッドを呼び出すなら、BreakConnect はそのインターフェイスを解放しなければならない。
ピンが指定したメディア タイプを受け入れるかをたずねる。
構文
virtual HRESULT CheckMediaType( const CMediaType *pmt ) PURE;
パラメータ
- pmt
- 提案されたメディア タイプ含む CMediaType オブジェクトへのポインタ。
戻り値
提案されたメディア タイプが受け入れられるなら S_OK を返す。そうでなければ S_FALSE かエラー コードを返す。
注意
派生クラスはこの純粋仮想メソッドをオーバーライドしなければならない。
他のピンへの接続を完了する。
構文
virtual HRESULT CompleteConnect( IPin *pReceivePin );
パラメータ
- pReceivePin
- 他のピンの IPin インターフェイスへのポインタ。
戻り値
S_OK を返す。
注意
このメソッドは接続処理の終わりに両方のピンで呼び出される。接続ピンは CBasePin::Connect 内から呼び出し、受信ピンは CBasePin::ReceiveConnection 内から呼び出す。
基底クラスでは、このメソッドはただ S_OK を返すだけである。派生クラスが接続を完了する要求を持っているなら、このメソッドをオーバーライドすべきだ。たとえば、CBaseOutputPin クラスはこのメソッドを使用して、メモリ アロケータを決定する。
このメソッドが失敗すると、すべての接続の試みも失敗し、ピンは受信ピンから切り離される。
ピンを他のピンに接続する。 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>
もしあれば、このピンに接続しているピンを取得する。 IPin::ConnectedTo メソッドの実装。
構文
HRESULT ConnectedTo( IPin **ppPin );
パラメータ
- ppPin
- 他のピンの IPin インターフェイスへのポインタを取得する変数のアドレス。
戻り値
HRESULT 値を返す。次の表は、可能な値を示している。
S_OK 成功。 E_POINTER NULL ポインタ引数。 VFW_E_NOT_CONNECTED ピンが接続されていない。
注意
このメソッドが成功すると、それが返す IPin インターフェイスには参照カウントが残る。解放時には注意が必要。
もしあれば、現在のピン接続のメディア タイプを取得する。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::NewSegment メソッドによってセットされたセグメント レートを取得する。
構文
double CurrentRate(void);
戻り値
m_dRate の戻り値。
CBasePin::NewSegment メソッドによってセットされたセグメント開始タイムを取得する。
構文
REFERENCE_TIME CurrentStartTime(void);
戻り値
m_tStart の戻り値。
CBasePin::NewSegment メソッドによってセットされたセグメント終了タイムを取得する。
構文
REFERENCE_TIME CurrentStopTime(void);
戻り値
m_tStop の値を返す。
現在のピン接続を解除する。 IPin::Disconnect メソッドの実装。
構文
HRESULT Disconnect(void);
戻り値
HRESULT 値を返す。次の表は、可能な値を示している。
S_FALSE ピンが接続されていない。 S_OK 成功。 VFW_E_NOT_STOPPED フィルタがアクティブで、ピンは動的再接続をサポートしていない。
注意
基底クラスは仕事の大部分を DisconnectInternal メソッドに委任する。
現在のピン接続を解除する。
構文
HRESULT DisconnectInternal(void);
戻り値
HRESULT 値を返す。次の表は、可能な値を示している。
S_FALSE ピンが接続されていない。 S_OK 成功。 VFW_E_NOT_STOPPED フィルタがアクティブで、ピンは動的再接続をサポートしていない
注意
Disconnect メソッドは接続処理をこのメソッドに委任する。このメソッドは BreakConnect メソッドを呼び出す。それはまた m_Connected メンバ変数によって保持されている他のピンの参照カウントを解放する。
デバッグ中にピン接続をトレースする。
構文
void DisplayPinInfo( IPin *pReceivePin );
パラメータ
- pReceivePin
- 受信ピンへのポインタ
注意
デバッグ ビルドでは、このメソッドは DbgLog 関数を呼び出し、接続の試みをトレースする。リテール ビルドではこのメソッドは何もしない。
デバッグ中にメディア タイプ情報を表示する。
構文
void DisplayTypeInfo( IPin *pPin, const CMediaType *pmt );
パラメータ
- pPin
- 無視される。
- pmt
- メディア タイプを指定する CMediaType オブジェクトへのポインタ。
注意
デバッグ ビルドでは、このメソッドは DbgLog 関数を呼び出し、接続の試みをトレースする。リテール ビルドではこのメソッドは何もしない。
ピンに追加データはもうないことを通知する。 IPin::EndOfStream メソッドの実装。このメソッドは入力ピンでのみ呼び出すこと。
構文
HRESULT EndOfStream(void);
戻り値
S_OK を返す。
注意
フィルタはエンドオブストリーム通知ダウンストリームをフィルタに接続している入力ピンに渡すべきである。フィルタがレンダラなら、EC_COMPLETE イベント通知をフィルタ グラフ マネージャに送るべきである。詳細については、「フィルタ開発者が使用するデータ フロー」を参照すること。
基底クラスでは、このメソッドは何もしない。派生クラスはこのメソッドをオーバーライドすべきである。
ピンの許容するメディア タイプを列挙する。IPin::EnumMediaTypes メソッドの実装。
構文
HRESULT EnumMediaTypes( IEnumMediaTypes **ppEnum );
パラメータ
- ppEnum
- IEnumMediaTypes インターフェイスへのポインタを受け取る変数のアドレス。
戻り値
HRESULT 値を返す。次の表は、可能な値を示している。
S_OK 成功。 E_OUTOFMEMORY メモリ不足。 E_POINTER NULL ポインタ引数。
注意
入力ピンは許容できるタイプの列挙を要求されない。出力ピンは少なくとも 1 つの許容タイプを列挙しなければならない。そうしないと、両方のピンに許容可能なタイプがなくなり、接続が不可能になる。
標準的な COM 列挙子と同様に IEnumMediaTypes インターフェイスは動作する。詳細については、「フィルタ グラフ内のオブジェクトの列挙」を参照すること。メソッドが成功すると、IEnumMediaTypes インターフェイスには参照カウントが残る。解放時には注意が必要。
CEnumMediaTypes 基底クラスは IEnumMediaTypes を実装する。それはピンの CBasePin::GetMediaType メソッドを呼び出して、メディア タイプを列挙する。
このピンに接続しているピンを取得。
構文
IPin *GetConnected(void);
戻り値
他のピンの IPin インターフェイスへのポインタを返す。
注意
ピンが接続していなければ、このメソッドは NULL を返す。CBasePin::IsConnected メソッドを呼び出して、ピンが接続されているかどうかを確認すること。
許容するメディア タイプをインデックス値で取得する。
構文
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 を返す。派生クラスでこのメソッドをオーバーライドすること。
許容するメディア タイプ セットのバージョン数を取得。
構文
virtual LONG GetMediaTypeVersion(void);
戻り値
m_TypeVersion メンバ変数を返す。
注意
CBasePin コンストラクタはバージョン数を 1 で初期化する。基底クラスでは、この数は決して変化しない。ピンが動的に許容可能なメディア タイプのリストを変更するなら、リストが変更されるたびにバージョン数をインクリメントするべきである。バージョン数をインクリメントするには、IncrementTypeVersion メソッドを呼び出すこと。
CEnumMediaTypes クラスによって実装されるメディア タイプ列挙子は、バージョン数を使ってそれ自身とピンとの同期を保つ。
ピンにフィルタが今既にアクティブではないことを通知する。
構文
virtual HRESULT Inactive(void);
戻り値
S_OK を返す。
注意
フィルタが停止すると、CBaseFilter クラスはフィルタに接続されたのすべてのピンで、このメソッドを呼び出す。
このメソッドは基底クラスでは何もしない。派生クラスはこのメソッドをオーバーライドし、Active メソッドが取得したすべてのリソースをフリーにすべきである、たとえばピンのアロケータをデコミットにする。
フィルタ グラフ マネージャの内部状態はこのメソッドが返るまでアップデートされないので、このメソッドから状態をテストしてはならない。
許容するメディア タイプ セットのバージョン数をインクリメントする。
構文
void IncrementTypeVersion(void);
注意
このメソッドは m_TypeVersion メンバ変数をインクリメントする。ピンが動的に許容するメディア タイプのリストを変更するなら、リストが変更されるたびにこのメソッドを呼び出すこと。詳細については、「GetMediaTypeVersion」を参照すること。
ピンが他のピンと接続しているかどうかを確認する。
構文
BOOL IsConnected(void);
戻り値
ピンが接続されていれば TRUE を返す。そうでなければ FALSE を返す。
このピンを含むフィルタが停止しているかどうかを確認する。
構文
BOOL IsStopped(void);
戻り値
フィルタが停止していれば TRUE を返す。そうでなければ FALSE を返す。
注意
CBasePin コンストラクタ メソッド内からこのメソッドを呼び出してはならない、なぜならフィルタはまだ初期化されていない可能性があるからである。
ピンの識別名を取得する。
構文
LPWSTR Name(void);
戻り値
m_pName メンバ変数の値を返す。
セグメントとしてこの呼び出しがグループ化された後でメディア サンプルを受け取ったことをピンに知らせる。 IPin::NewSegment メソッドの実装。
構文
HRESULT NewSegment( REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate );
パラメータ
- tStart
- セグメントの開始メディア位置、100 ミリ秒単位。
- tStop
- セグメントの終了メディア位置、100 ミリ秒単位。
- dRate
- セグメントが処理されるべきレート、オリジナル レートのパーセンテージ。
戻り値
S_OK を返す。
注意
このメソッドは m_tStart と m_tStop と m_dRate メンバ変数を設定する。派生クラスでは、このメソッドをオーバーライドして、通知ダウンストリームに渡すこと。
品質変更が要求されたことをピンに通知する。IQualityControl::Notify メソッドの実装。
構文
HRESULT Notify( IBaseFilter *pSelf, Quality q );
パラメータ
- pSelf
- 品質コントロール メッセージを出力するフィルタの IBaseFilter インターフェイスへのポインタ。
- q
- 品質コントロール メッセージを含む Quality 構造体。
戻り値
基底クラスは E_NOTIMPL を返す。
注意
出力ピンはこのメソッドをオーバーライドして品質コントロール メッセージを受けれるべきである。
外部の品質コントロール マネージャがインストールされているなら (「SetSink」を参照)、メッセージをその品質マネージャに渡すこと。そうでなければ、フィルタはそのメッセージを自分自身で扱う、あるいはメッセージ アップストリームに送るべきである。詳細については、「品質コントロールの管理」を参照すること。
ピンが指定したメディア タイプを受け入れるかどうかを確認する。IPin::QueryAccept メソッドの実装。
構文
HRESULT QueryAccept( const AM_MEDIA_TYPE *pmt );
パラメータ
- pmt
- メディア タイプを指定する AM_MEDIA_TYPE 構造体へのポインタ。
戻り値
メディア タイプが受け入れ可能なら S_TRUE を返す。そうでなければ、S_FALSE を返す。
注意
基底クラスでは、このメソッドは CheckMediaType メソッドに委任する。CheckMediaType が失敗すると、QueryAccept は S_FALSE を返す。
このメソッドはピンのクリティカル セクション (m_pLock) を保持しない。派生クラスで動的に許容可能なメディア タイプ セットを修正するなら、このメソッドをオーバーライドしてクリティカル セクションをホールドすべきである。
ピンの向き (入力か出力か) を取得する。 IPin::QueryDirection メソッドの実装。
構文
HRESULT QueryDirection( PIN_DIRECTION *pPinDir );
パラメータ
- pPinDir
- PIN_DIRECTION 列挙型のメンバを受け取る変数へのポインタ。
戻り値
S_OK あるいは E_POINTER を返す。
ピンの ID を取得する。 IPin::QueryId メソッドの実装。
構文
HRESULT QueryId( LPWSTR *Id );
パラメータ
- Id
- ピンの ID へのポインタ。
戻り値
HRESULT 値を返す。次の表は、可能な値を示している。
S_OK 成功。 E_OUTOFMEMORY メモリ不足。 E_POINTER NULL ポインタ引数。
注意
このメソッドは m_pName メンバ変数を返す。
(フィルタ内で) 内部的にこのピンに接続しているピンを取得する。 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 をかえす。
ピンについての情報を取得する。IPin::QueryPinInfo メソッドの実装。
構文
HRESULT QueryPinInfo( PIN_INFO *pInfo );
パラメータ
- pInfo
- ピン情報を受け取る PIN_INFO 構造体へのポインタ。
戻り値
S_OK あるいは E_POINTER を返す。
注意
このメソッドはPIN_INFO 構造体の achName メンバに対して m_pName メンバ変数を使う。
メソッドが返るとき、PIN_INFO 構造体の pFilter メンバが NULL 以外なら、参照カウントが残っている。そのインターフェイスを解放する際には注意が必要。
他のピンからの接続を受け入れる。 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 指定したメディアタイプは受け入れられない。
注意
接続を始めようとするピンは受信ピンでこのメソッドを呼び出す。受信ピンがエラー コードを返すなら、接続は失敗する。
基底クラスでは、このメソッドは次のステップを実行する :
- ピンが既に接続していないかどうかチェックする。
- フィルタが停止していないかどうかチェックする。
- CheckConnect メソッドを呼び出して接続ピンが適切かどうかテストする。
- Calls CheckMediaType メソッドを呼び出してメディア タイプが受け入れ可能かどうかテストする。
これらのすべてのステップが成功すると、このメソッドは CompleteConnect メソッドとSetMediaType メソッドを呼び出して接続を完了する。CheckConnect か CheckMediaType が失敗すると、このメソッドは BreakConnect メソッドを呼び出す。
フィルタが今実行中であることをピンに知らせる。
構文
HRESULT Run( REFERENCE_TIME tStart );
パラメータ
- tStart
- フィルタの IMediaFilter::Run メソッドに送られる開始タイム。
戻り値
S_OK を返す。
注意
フィルタがポーズから実行になるとき、CBaseFilter クラスはフィルタのすべてのピンでこのメソッドを呼び出す。
このメソッドは基底クラスでは何もしない。派生クラスはこのメソッドをオーバーライドできる。たとえば、あるピンはサンプルを出力するワーカー スレッドを開始するかもしれない。
フィルタ グラフ マネージャの内部状態はこのメンバ関数が返るまでアップデータされないので、このメソッドから状態をテストしてはならない。
接続するメディア タイプを設定する。
構文
virtual HRESULT SetMediaType( const CMediaType *pmt );
パラメータ
- pmt
- メディア タイプを指定する CMediaType オブジェクトへのポインタ。
戻り値
S_OK を返す。
注意
このメソッドはピン接続のフォーマットを確立する。このメソッドを呼び出す前に、ピンは CBasePin::CheckMediaType メソッドを呼び出してメディア タイプが受け入れ可能かどうかを確認する。したがって、pmt パラメータは受け入れ可能なメディアタイプとして仮定されている。
基底クラスでは、このメソッドは m_mt メンバ変数をセットし、S_OK を返す。メディア タイプがセットされたとき派生クラスが通知を要求するなら、その派生クラスはこのメソッドをオーバーライドできる。
ピンが動的再接続をサポートするかどうかを指定する。
構文
void SetReconnectWhenActive( bool bCanReconnect );
パラメータ
- bCanReconnect
- ピンが動的再接続をサポートするかどうかを示すブール値。TRUE ならピンは動的再接続が可能。
注意
デフォルトではピンへの再接続の前にフィルタを停止させなければならない。フィルタがアクティブな間に再接続できるのなら、このメソッドを値を TRUE にして呼び出すこと。詳細については、「動的グラフ作成」を参照すること。
外部の品質マネージャを設定する。 IQualityControl::SetSink メソッドの実装。
構文
HRESULT SetSink( IQualityControl *piqc );
パラメータ
- piqc
- 品質マネージャの IQualityControl インターフェイスへのポインタ。
戻り値
S_OK を返す。
注意
このメソッドを呼び出して品質コントロール マネージャを外部の品質マネージャにリダイレクトすること。詳細については、「品質コントロールの管理」を参照すること。
メディア タイプのリストを与え、それらのタイプの 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 値は「ワイルドカード」値のようにどんなタイプとも適合する。