Microsoft DirectX 8.0 |
CPullPin クラスは、ソースからダウンストリームを受け取るフィルタがスレッドを作成し、IAsyncReader インターフェイスをサポートする非同期ソース フィルタからメディア ストリームを引き出すために用意されている。通常、このクラスは、パーサー フィルタの入力ピンで実装される。これは、Microsoft® DirectShow® 非同期リーダー フィルタが、ファイルからメディア ストリームを読み取るだけで、解析を行わないからである。
プロテクト データ メンバ
m_pAlloc 接続で使用される IMemAllocator インターフェイスへのポインタ。
メンバ関数
Active 非同期リーダーからデータを引き出し始めるようにピンに指示する。 AlignDown LONGLONG 型の値をすぐ下の LONG 境界にそろえる。 AlignUp LONGLONG 型の値をすぐ上の LONG 境界にそろえる。 Connect このピンから非同期リーダーへの接続を開始する。 CPullPin CPullPin オブジェクトを作成する。 Disconnect 非同期リーダーへの接続を切断する。 Duration メディア ストリームの時間幅を取得する。 GetReader 非同期リーダー インターフェイスを取得する。 Inactive 非同期リーダーからデータを引き出しを終了するようにピンに指示する。 Seek メディア ストリームの開始および終了タイムを設定する。
オーバーライド可能なメンバ関数
BeginFlush このピンおよびすべてのダウンストリーム ピンをフラッシュする。 DecideAllocator 非同期リーダーで使用するアロケータを指定する。 EndFlush フラッシュ処理の終了を通知する。 EndOfStream エンドオブストリーム通知をダウンストリームに送信する。 OnError 引き出しを停止させる実行時エラーを処理する。 Receive 非同期リーダーからのデータの受信を処理する。
非同期リーダーからデータを引き出し始めるようにピンに指示する。
構文
HRESULT Active(void);
戻り値
HRESULT 値を返す。
注意
このメンバ関数を呼び出す前に、リーダー インターフェイスを取得し、アロケータを決定しなければならない。この処理は CPullPin::Connect メンバ関数によって行われる。
LONGLONG 型の値をすぐ下の LONG 境界にそろえる。
構文
LONGLONG AlignDown( LONGLONG ll, LONG lAlign );
パラメータ
- ll
- そろえる要素。
- lAlign
- アラインメント境界。
戻り値
lAlign にそろえた ll 値を返す。
注意
下位への整列は切り捨て処理である。
LONGLONG 型の値をすぐ上の LONG 境界にそろえる。
構文
LONGLONG AlignUp( LONGLONG ll, LONG lAlign );
パラメータ
- ll
- そろえる要素。
- lAlign
- アラインメント境界。
戻り値
HRESULT 値を返す。
オーバーライドしてこのピンおよびすべてのダウンストリーム ピンをフラッシュする。
構文
virtual HRESULT BeginFlush(void);
戻り値
HRESULT 値を返す。
注意
このメンバ関数は、シーク処理に先立ってスレッドをポーズする前に CPullPin::Seek メンバ関数によって呼び出される。このメンバ関数を実装して、接続されたダウンストリーム ピンについて IPin::BeginFlush メソッドを呼び出す必要がある。
このピンから非同期リーダーへの接続を開始する。
構文
HRESULT Connect( IUnknown *pUnk, IMemAllocator *pAlloc, BOOL bSync );
パラメータ
- pUnk
- 非同期リーダー (IAsyncReader) の存在を問い合わせるオブジェクトへのポインタ。
- pAlloc
- 必要に応じて、優先アロケータとして指定するオプションのアロケータへのポインタ。
- bSync
- リーダーが非同期リーダーではなく、同期リーダーを使用する場合は TRUE に設定する。
戻り値
pUnk で指定されたオブジェクトから IAsyncReader インターフェイスに正常に接続された場合は S_OK を返す。
CPullPin オブジェクトを作成する。
構文
CPullPin(void);
戻り値
戻り値なし。
非同期リーダーと使用するアロケータをネゴシエートする。
構文
virtual HRESULT DecideAllocator( IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *pProps );
パラメータ
- pAlloc
- 優先アロケータとして指定するアロケータへのポインタ (オプション)。アロケータを指定しない場合は、NULL を渡す。
- pProps
- アロケータのサイズ、カウント、およびアラインメントへのポインタ (オプション)。アロケータのプロパティを要求しない場合は 0 を渡す。
戻り値
成功した場合は S_OK を返す。eProps に無効なアラインメント プロパティが含まれている場合は VFW_E_BADALIGN を返す。アロケータを作成するために十分なメモリがない場合は E_OUTOFMEMORY を返す。作成した IMemAllocator インターフェイスが無効である場合は E_NOINTERFACE を返す。
注意
このメンバ関数は、IAsyncReader::RequestAllocator メソッドを呼び出してアロケータをネゴシエートする。
非同期リーダーへの接続を切断する。
構文
HRESULT Disconnect(void);
戻り値
接続がない場合は NOERROR を返す。
注意
このメンバ関数は、CPullPin::Connect メソッドで作成された非同期ファイル リーダーへの接続を切断する。
メディア ストリームの時間幅を取得する。
構文
HRESULT Duration( REFERENCE_TIME *ptDuration );
パラメータ
- ptDuration
- UNIT (10,000,000) を乗算したバイト単位の時間幅へのポインタ。
戻り値
HRESULT 値を返す。
オーバーライドしてフラッシュ処理の終了を通知する。
構文
virtual HRESULT EndFlush(void) PURE;
戻り値
HRESULT 値を返す。
注意
このメンバ関数は、シーク処理に先立ってスレッドをポーズした後に CPullPin::Seek メンバ関数によって呼び出される。このメンバ関数を実装して、接続されたダウンストリーム ピンについて IPin::EndFlush メソッドを呼び出す必要がある。
オーバーライドしてエンドオブストリーム通知をダウンストリームに送信する。
構文
virtual HRESULT EndOfStream(void) PURE;
戻り値
HRESULT 値を返す。
注意
このメンバ関数は、受信したサンプルの処理中に、ストリームの最後に到達した場合に呼び出される。このメンバ関数を実装して、接続されたダウンストリーム ピンについて IPin::EndOfStream メソッドを呼び出す必要がある。
非同期リーダーを取得する。
構文
IAsyncReader* GetReader(void);
戻り値
参照カウントされた IAsyncReader インターフェイスを返す。
非同期リーダーからデータを引き出しを終了するようにピンに指示する。
構文
HRESULT Inactive(void);
戻り値
HRESULT 値を返す。
注意
このメンバ関数は、IAsyncReader::BeginFlush メソッドを呼び出し、スレッドを終了して、IAsyncReader::EndFlush メソッドを呼び出して、アロケータをデコミットする。
オーバーライドして引き出しを停止させる実行時エラーを処理する。
構文
virtual void OnError( HRESULT hr ) PURE;
パラメータ
- hr
- トラップされたエラーの HRESULT 値。
戻り値
戻り値なし。
注意
これらのエラーはアップストリーム フィルタ (非同期リーダー) から返される。アップストリーム フィルタは既にエラーをフィルタ グラフ マネージャにレポート済みである。このメンバ関数は、エラーをトラップするときに複数の CPullPin メンバ関数から呼び出されるので、実装しなければならない。
このメンバ関数をオーバーライドして、非同期リーダーからのデータの受信を処理する。
構文
virtual HRESULT Receive( IMediaSample *pSample ) PURE;
パラメータ
- pSample
- [in] メディア サンプルへのポインタ。
戻り値
HRESULT 値を返す。S_OK 以外の値を返すと、データは終了する。
注意
派生クラスでこのメンバ関数を実装しなければならない。このメンバ関数は、サンプル ストリームの処理中に新しいサンプルを受信したときに必ず呼び出される。入力ピンの IMemInputPin::Receive メソッドと同じ方法で記述する必要がある。
メディア ストリームの開始および終了タイムを設定する。
構文
HRESULT Seek( REFERENCE_TIME tStart, REFERENCE_TIME tStop );
パラメータ
- tStart
- 開始タイム (デフォルトは 0)。
- tStop
- 終了タイム (デフォルトは CPullPin::Duration の値)。
戻り値
HRESULT 値を返す。
注意
フィルタ グラフが実行中 (アクティブ) である場合、メディア レンダリングは tStart によって定義された新しい位置から直ちに開始される。