Microsoft DirectX 8.0

CBaseOutputPin クラス

CBaseOutputPin クラスの階層

出力ピンを実装する抽象基底クラス。

宣言 : Amfilter.h

このクラスは CBasePin から派生する。以下の面で CBasePin とは異なる。

ピンが接続するとき、入力ピンからのメモリ アロケータを要求する。それが失敗すると、新しいアロケータ オブジェクトを作成する。出力ピンはアロケータ プロパティを設定する責任がある。純粋仮想メソッド DecideBufferSize を通してこれを行う。派生クラスではこのメソッドをオーバーライドする。入力ピンがバッファ要求を持つとき、その要求は DecideBufferSize メソッドに渡される。

空白のメディア サンプルを取得するには GetDeliveryBuffer を呼び出すこと。サンプル ダウンストリームを出力するには Deliver を呼び出すこと。

Protected メンバ変数
m_pAllocatorメモリ アロケータへのポインタ。
m_pInputPinこのピンに接続する入力ピンへのポインタ。
Public メソッド
CBaseOutputPinコンストラクタ メソッド。
CompleteConnect入力ピンへの接続を完了する。仮想。
DecideAllocatorメモリ アロケータを選択する。仮想。
GetDeliveryBuffer空白バッファを持つメディア サンプルを取得。仮想。
Deliverメディア サンプルを接続した入力ピンに出力する。仮想。
InitAllocatorメモリ アロケータを作成。仮想。
CheckConnectピン接続が適切かどうか確認する。
BreakConnect接続からピンを解放する。
Activeフィルタが現在アクティブであることをピンに通知する。
Inactiveフィルタがもうアクティブではないことをピンに通知する。
DeliverEndOfStreamエンドオブストリーム通知を接続する入力ピンに出力する。仮想。
DeliverBeginFlush接続する入力ピンにフラッシュ処理の開始を要求する。仮想。
DeliverEndFlush接続した入力ピンにフラッシュ処理の終了を要求する。仮想。
DeliverNewSegment新セグメント通知を接続する入力ピンに出力する。 仮想。
Pure Virtual メソッド
DecideBufferSizeバッファ要求を設定する。
IPin メソッド
BeginFlushフラッシュ処理を開始する。
EndFlushフラッシュ処理を終了する。
EndOfStream以降のデータはないことをピンに伝える。

CBaseOutputPin.m_pAllocator

CBaseOutputPin クラス

メモリ アロケータへのポインタ。

構文

IMemAllocator *m_pAllocator;

CBaseOutputPin.m_pInputPin

CBaseOutputPin クラス

このピンに接続する入力ピンへのポインタ。

構文

IMemInputPin *m_pInputPin;

CBaseOutputPin::Active

CBaseOutputPin クラス

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

構文

HRESULT Active(void);

戻り値

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

S_OK成功。
VFW_E_NO_ALLOCATOR利用可能なメモリ アロケータがない。

注意

このメソッドは CBasePin::Active メソッドをオーバーライドする。アロケータの IMemAllocator::Commit メソッドを呼び出して、バッファにメモリを割り当てる。

このメソッドをオーバーライドするなら、そのオーバーライドする メソッドから基底クラス メソッドを呼び出すこと。

CBaseOutputPin::BeginFlush

CBaseOutputPin クラス

フラッシュ処理を開始する。IPin::BeginFlush メソッドの実装。

構文

HRESULT BeginFlush(void);

戻り値

E_UNEXPECTED を返す。

注意

このメソッドは入力ピンでのみ呼び出されるべきなので、CBaseOutputPin を実装すると E_UNEXPECTED を返す。

CBaseOutputPin::BreakConnect

CBaseOutputPin クラス

接続からピンを解放する。

構文

HRESULT BreakConnect(void);

戻り値

成功なら S_OK を返す、失敗ならエラーの原因を示す HRESULT 値を返す。

注意

このメソッドはCBasePin::BreakConnect メソッドをオーバーライドする。アロケータをデコミットにし、IMemAllocatorIPin インターフェイスを解放する。

このメソッドをオーバーライドするなら、そのオーバーライドする メソッドから基本メソッドを呼び出すこと。そうしないとメモリ リークの可能性がある。

CBaseOutputPin::CBaseOutputPin

CBaseOutputPin クラス

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

構文

CBaseOutputPin(
    TCHAR *pObjectName,
    CBaseFilter *pFilter,
    CCritSec *pLock,
    HRESULT *phr,
    LPCWSTR pName
);

パラメータ

pObjectName
オブジェクトのデバッグ名が入る文字列。詳細については、「CbaseObject」を参照すること。
pFilter
このピンを作成したフィルタへのポインタ。
pLock
CCritSec ロックへのポインタ、状態移行を継続するために使用。これはフィルタ ロック CBaseFilter.m_pLock と同様のクリティカル セクションになり得る。
phr
メソッドの成功・失敗を示す HRESULT 値を取得する変数へのポインタ。
pName
(ピン ID としても使われる)ピン名が入る Unicode™ 文字列。

注意

すべてのパラメータは直接 CBasePin コンストラクタに送られる。

CBaseOutputPin::CheckConnect

CBaseOutputPin クラス

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

構文

HRESULT CheckConnect(
    IPin *pPin
);

パラメータ

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

戻り値

次の HRESULT 値の 1 つを返す。

S_OK成功。
E_NOINTERFACE入力ピンは IMemInputPinをサポートしていない。
VFW_E_INVALID_DIRECTIONピンの向きに互換性がない。

注意

このメソッドは基底クラス CBasePin::CheckConnect メソッドを呼び出し、次に IMemInputPin インターフェイスに入力ピンを問い合わせる。

CBaseOutputPin::CompleteConnect

CBaseOutputPin クラス

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

構文

virtual HRESULT CompleteConnect(
    IPin *pReceivePin
);

パラメータ

pReceivePin
入力ピンへのポインタ。

戻り値

成功なら S_OK を返す、失敗ならエラーの原因を示す HRESULT 値を返す。

注意

このメソッドは CBasePin::CompleteConnect メソッドをオーバーライドする。この接続に使用するメモリ アロケータを選択する DecideAllocator メソッドを呼び出す。

CBaseOutputPin::DecideAllocator

CBaseOutputPin クラス

メモリ アロケータを選択する。

構文

virtual HRESULT DecideAllocator(
    IMemInputPin *pPin,
    IMemAllocator **pAlloc
);

パラメータ

pPin
入力ピンの IMemInputPin インターフェイスへのポインタ。
pAlloc
アロケータの IMemAllocator インターフェイスへのポインタを取得する変数のアドレス。

戻り値

成功なら S_OK を返す、失敗ならエラーの原因を示す HRESULT 値を返す。

注意

このメソッドはピン接続プロセスの最後に呼び出される。次のステップで実行する :

  1. もしあれば、IMemInputPin::GetAllocatorRequirements メソッドを呼び出し、入力ピンのバッファ要求を取得する。
  2. IMemInputPin::GetAllocator メソッドを呼び出して、入力ピンからアロケータを要求する。その入力ピンがアロケータを提供しなければ、出力ピンは InitAllocator クラス メソッドを呼び出してアロケータを作成する。
  3. DecideBufferSize クラス メソッドを呼び出して、アロケータ プロパティを設定する。これは純粋仮想メソッドである、派生クラスはこれを実装しなければならない。
  4. IMemInputPin::NotifyAllocator メソッドを呼び出し、アロケータの使用を入力ピンに通知する。

CBaseOutputPin::DecideBufferSize

CBaseOutputPin クラス

バッファ要求を設定する。

構文

virtual HRESULT DecideBufferSize(
    IMemAllocator *pAlloc,
    ALLOCATOR_PROPERTIES *ppropInputRequest
) PURE;

パラメータ

pAlloc
アロケータの IMemAllocator インターフェイスへのポインタ。
ppropInputRequest
入力ピンのバッファ要求を含む ALLOCATOR_PROPERTIES 構造体へのポインタ。入力ピンが何の要求も指定しないなら、呼び出し元はこの構造体のメンバをゼロにするべである。

戻り値

成功なら S_OK を返す、失敗ならエラーの原因を示す HRESULT 値を返す。

注意

このメソッドを派生クラスでオーバーライドすること。バッファ要求を付けて IMemAllocator::SetProperties メソッドを呼び出す。通常派生クラスは入力バッファの要求を尊重するが、必ずしもそれをする必要はない。

CBaseOutputPin::Deliver

CBaseOutputPin クラス

メディア サンプルを接続した入力ピンに出力する。

構文

virtual HRESULT Deliver(
    IMediaSample *pSample
);

パラメータ

pSample
サンプルの IMediaSample インターフェイスへのポインタ。

戻り値

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

S_OK成功。
VFW_E_NOT_CONNECTEDピンが接続されていない。

注意

このメソッドは入力ピンの IMemInputPin::Receive メソッドを呼び出す。IMemInputPin::ReceiveCanBlock メソッドが S_OK を返すなら、Receive はブロックする可能性がある。

このメソッドを呼び出した後で、サンプルを解放すること。入力ピンはサンプルの参照カウントを持ったままなので、サンプルを再使用してはならない。必ず GetDeliveryBuffer メソッドを呼び出して、新しいサンプルを取得する。

このメソッドを呼び出す前にフィルタのクリティカル セクションをホールドすること。そうしないと、そのピンはメソッド 呼び出し中に非接続になる可能性がある。フィルタがワーカー スレッドを使ってサンプルを出力するなら、フィルタがサンプルを出力可能になったとき、クリティカル セクションをホールドする。そうでなければ、フィルタの IMemInputPin::Receive メソッドでクリティカル セクションをホールドする、そこでフィルタはサンプルを処理する。

ワーカー スレッドはデッドロックの可能性を作成し得る。スレッドがクリティカル セクションをホールドするとき、フィルタの状態移行を待つかもしれない。同時に、状態移行はスレッドが完了するのを待っているかもしれない。これを避けるために、状態移行コードはスレッドを終わらせるイベントを通知し、次にスレッドがその通知を完了するまで待つこと。

CBaseOutputPin::DeliverBeginFlush

CBaseOutputPin クラス

接続する入力ピンにフラッシュ処理の開始を要求する。

構文

virtual HRESULT DeliverBeginFlush(void);

戻り値

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

S_OK成功。
VFW_E_NOT_CONNECTEDピンが接続されていない。

注意

このメソッドは入力ピンの IPin::BeginFlush メソッドを呼び出す。

CBaseOutputPin::DeliverEndFlush

CBaseOutputPin クラス

接続した入力ピンにフラッシュ処理の終了を要求する。

構文

virtual HRESULT DeliverEndFlush(void);

戻り値

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

S_OK成功。
VFW_E_NOT_CONNECTEDピンが接続されていない。

注意

このメソッドは入力ピンの IPin::EndFlush メソッドを呼び出す。

CBaseOutputPin::DeliverEndOfStream

CBaseOutputPin クラス

エンドオブストリーム通知を接続する入力ピンに出力する。

構文

virtual HRESULT DeliverEndOfStream(void);

戻り値

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

S_OK成功。
VFW_E_NOT_CONNECTEDピンが接続されていない。

注意

このメソッドは入力ピンの IPin::EndOfStream メソッドを呼び出す。

CBaseOutputPin::DeliverNewSegment

CBaseOutputPin クラス

新セグメント通知を接続する入力ピンに出力する。

構文

virtual HRESULT DeliverNewSegment(
    REFERENCE_TIME tStart,
    REFERENCE_TIME tStop,
    double dRate
);

パラメータ

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

戻り値

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

S_OK成功。
VFW_E_NOT_CONNECTEDピンが接続されていない。

注意

このメソッドは入力ピンの IPin::NewSegment メソッドを呼び出す。

CBaseOutputPin::EndFlush

IPin Interface

フラッシュ処理を終了する。IPin::EndFlush メソッドの実装。

構文

HRESULT EndFlush(void);

戻り値

E_UNEXPECTED を返す。

注意

このメソッドは入力ピンでのみ呼び出されるべきなので、CBaseOutputPin を実装すると E_UNEXPECTED を返す。

CBaseOutputPin::EndOfStream

IPin Interface

以降のデータはないことをピンに伝える。 IPin::EndOfStream メソッドの実行。

構文

HRESULT EndOfStream(void);

戻り値

E_UNEXPECTED を返す。

注意

このメソッドは入力ピンでのみ呼び出されるべきなので、CBaseOutputPin を実装すると E_UNEXPECTED を返す。

CBaseOutputPin::GetDeliveryBuffer

CBaseOutputPin クラス

空白バッファを持つメディア サンプルを取得。

構文

virtual HRESULT GetDeliveryBuffer(
    IMediaSample **ppSample,
    REFERENCE_TIME *pStartTime,
    REFERENCE_TIME *pEndTime,
    DWORD dwFlags
);

パラメータ

ppSample
バッファの IMediaSample インターフェイスのポインタを取得する変数のアドレス。
pStartTime
サンプルの開始タイムへのポインタ、あるいは NULL 。
pEndTime
サンプルの終了タイムへのポインタ、あるいは NULL 。
dwFlags
IMemAllocator::GetBuffer インターフェイスによってサポートされる、フラグのビットごとの組み合わせ。

戻り値

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

S_OK成功。
E_NOINTERFACE有効なメモリ アロケータがない。

注意

このメソッドは、アロケータの IMemAllocator::GetBuffer メソッドを呼び出し、このメソッドにパラメータを渡す。

CBaseOutputPin::Inactive

CBaseOutputPin クラス

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

構文

HRESULT Inactive(void);

戻り値

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

S_OK成功。
VFW_E_NO_ALLOCATOR有効なメモリ アロケータがない。

注意

このメソッドは CBasePin::Inactive メソッドをオーバーライドする。IMemAllocator::Decommit メソッドを呼び出して、メモリ アロケータをデコミットにする。

このメソッドをオーバーライドするなら、そのオーバーライドするメソッドから基底クラス メソッドを呼び出すこと。

CBaseOutputPin::InitAllocator

CBaseOutputPin クラス

メモリ アロケータを作成。

構文

virtual HRESULT InitAllocator(
    IMemAllocator **ppAlloc
);

パラメータ

ppAlloc
アロケータの IMemAllocator インターフェイスへのポインタを取得する変数のアドレス。

戻り値

成功なら S_OK を返す、失敗なら CoCreateInstance 関数からのエラーコードを返す。

注意

入力ピンがメモリ アロケータを提供しないなら、DecideAllocator メソッドはこのメソッドを呼び出し、アロケータを作成する。