Microsoft DirectX 8.0

CPullPin クラス

CPullPin クラスの階層

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 非同期リーダーからのデータの受信を処理する。

CPullPin::Active

CPullPin クラス

非同期リーダーからデータを引き出し始めるようにピンに指示する。

構文

HRESULT Active(void);

戻り値

HRESULT 値を返す。

注意

このメンバ関数を呼び出す前に、リーダー インターフェイスを取得し、アロケータを決定しなければならない。この処理は CPullPin::Connect メンバ関数によって行われる。

CPullPin::AlignDown

CPullPin クラス

LONGLONG 型の値をすぐ下の LONG 境界にそろえる。

構文

LONGLONG AlignDown(
LONGLONG ll,
LONG lAlign
    );

パラメータ

ll
そろえる要素。
lAlign
アラインメント境界。

戻り値

lAlign にそろえた ll 値を返す。

注意

下位への整列は切り捨て処理である。

CPullPin::AlignUp

CPullPin クラス

LONGLONG 型の値をすぐ上の LONG 境界にそろえる。

構文

LONGLONG AlignUp(
LONGLONG ll,
LONG lAlign
    );

パラメータ

ll
そろえる要素。
lAlign
アラインメント境界。

戻り値

HRESULT 値を返す。

CPullPin::BeginFlush

CPullPin クラス

オーバーライドしてこのピンおよびすべてのダウンストリーム ピンをフラッシュする。

構文

virtual HRESULT BeginFlush(void);

戻り値

HRESULT 値を返す。

注意

このメンバ関数は、シーク処理に先立ってスレッドをポーズする前に CPullPin::Seek メンバ関数によって呼び出される。このメンバ関数を実装して、接続されたダウンストリーム ピンについて IPin::BeginFlush メソッドを呼び出す必要がある。

CPullPin::Connect

CPullPin クラス

このピンから非同期リーダーへの接続を開始する。

構文

HRESULT Connect(
IUnknown *pUnk,
IMemAllocator *pAlloc,
BOOL bSync
    );

パラメータ

pUnk
非同期リーダー (IAsyncReader) の存在を問い合わせるオブジェクトへのポインタ。
pAlloc
必要に応じて、優先アロケータとして指定するオプションのアロケータへのポインタ。
bSync
リーダーが非同期リーダーではなく、同期リーダーを使用する場合は TRUE に設定する。

戻り値

pUnk で指定されたオブジェクトから IAsyncReader インターフェイスに正常に接続された場合は S_OK を返す。

CPullPin::CPullPin

CPullPin クラス

CPullPin オブジェクトを作成する。

構文

CPullPin(void);

戻り値

戻り値なし。

CPullPin::DecideAllocator

CPullPin クラス

非同期リーダーと使用するアロケータをネゴシエートする。

構文

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 メソッドを呼び出してアロケータをネゴシエートする。

CPullPin::Disconnect

CPullPin クラス

非同期リーダーへの接続を切断する。

構文

HRESULT Disconnect(void);

戻り値

接続がない場合は NOERROR を返す。

注意

このメンバ関数は、CPullPin::Connect メソッドで作成された非同期ファイル リーダーへの接続を切断する。

CPullPin::Duration

CPullPin クラス

メディア ストリームの時間幅を取得する。

構文

HRESULT Duration(
REFERENCE_TIME *ptDuration
    );

パラメータ

ptDuration
UNIT (10,000,000) を乗算したバイト単位の時間幅へのポインタ。

戻り値

HRESULT 値を返す。

CPullPin::EndFlush

CPullPin クラス

オーバーライドしてフラッシュ処理の終了を通知する。

構文

virtual HRESULT EndFlush(void) PURE;

戻り値

HRESULT 値を返す。

注意

このメンバ関数は、シーク処理に先立ってスレッドをポーズした後に CPullPin::Seek メンバ関数によって呼び出される。このメンバ関数を実装して、接続されたダウンストリーム ピンについて IPin::EndFlush メソッドを呼び出す必要がある。

CPullPin::EndOfStream

CPullPin クラス

オーバーライドしてエンドオブストリーム通知をダウンストリームに送信する。

構文

virtual HRESULT EndOfStream(void) PURE;

戻り値

HRESULT 値を返す。

注意

このメンバ関数は、受信したサンプルの処理中に、ストリームの最後に到達した場合に呼び出される。このメンバ関数を実装して、接続されたダウンストリーム ピンについて IPin::EndOfStream メソッドを呼び出す必要がある。

CPullPin::GetReader

CPullPin クラス

非同期リーダーを取得する。

構文

IAsyncReader* GetReader(void);

戻り値

参照カウントされた IAsyncReader インターフェイスを返す。

CPullPin::Inactive

CPullPin クラス

非同期リーダーからデータを引き出しを終了するようにピンに指示する。

構文

HRESULT Inactive(void);

戻り値

HRESULT 値を返す。

注意

このメンバ関数は、IAsyncReader::BeginFlush メソッドを呼び出し、スレッドを終了して、IAsyncReader::EndFlush メソッドを呼び出して、アロケータをデコミットする。

CPullPin::OnError

CPullPin クラス

オーバーライドして引き出しを停止させる実行時エラーを処理する。

構文

virtual void OnError(
HRESULT hr
) PURE;

パラメータ

hr
トラップされたエラーの HRESULT 値。

戻り値

戻り値なし。

注意

これらのエラーはアップストリーム フィルタ (非同期リーダー) から返される。アップストリーム フィルタは既にエラーをフィルタ グラフ マネージャにレポート済みである。このメンバ関数は、エラーをトラップするときに複数の CPullPin メンバ関数から呼び出されるので、実装しなければならない。

CPullPin::Receive

CPullPin クラス

このメンバ関数をオーバーライドして、非同期リーダーからのデータの受信を処理する。

構文

virtual HRESULT Receive(
IMediaSample *pSample
) PURE;

パラメータ

pSample
[in] メディア サンプルへのポインタ。

戻り値

HRESULT 値を返す。S_OK 以外の値を返すと、データは終了する。

注意

派生クラスでこのメンバ関数を実装しなければならない。このメンバ関数は、サンプル ストリームの処理中に新しいサンプルを受信したときに必ず呼び出される。入力ピンの IMemInputPin::Receive メソッドと同じ方法で記述する必要がある。

CPullPin::Seek

CPullPin クラス

メディア ストリームの開始および終了タイムを設定する。

構文

HRESULT Seek(
REFERENCE_TIME tStart,
REFERENCE_TIME tStop
    );

パラメータ

tStart
開始タイム (デフォルトは 0)。
tStop
終了タイム (デフォルトは CPullPin::Duration の値)。

戻り値

HRESULT 値を返す。

注意

フィルタ グラフが実行中 (アクティブ) である場合、メディア レンダリングは tStart によって定義された新しい位置から直ちに開始される。