CDynamicOutputPin クラス
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]
クラスは CDynamicOutputPin
、動的再接続と書式変更をサポートする出力ピンを実装します。
このクラスは CBaseOutputPin クラスから派生し、 IPinFlowControl インターフェイスを実装します。 動的グラフの構築に重要ないくつかの操作がサポートされています。
- 動的再接続: フィルターがまだアクティブ (一時停止または実行中) の間に、ピンを切断して再接続できます。
- 動的な形式の変更: ピンは、フィルターがアクティブな間、再接続せずに新しいメディアの種類をネゴシエートできます。
- フロー制御: 所有フィルター (またはアプリケーション) は、フィルターを停止することなく、ピンからのデータ フローをブロックできます。
詳細については、「 動的グラフの作成」を参照してください。
ピンには、ブロック、ブロック解除、保留中の 3 つの状態があります。 保留中の状態では、ピンがブロック状態に切り替わる前に、別のスレッドで何らかの操作が完了するのを待機しています。 ピンがブロックされている間、フィルターはピンを介してデータを配信したり、ピンの接続を変更したりできません。
複数のスレッド間で調整するには、所有フィルターが特定のルールに従う必要があります。 (フィルター グラフのスレッドの詳細については、「 スレッドとクリティカル セクション」を参照してください)。最初に、ストリーミング スレッドは、次のいずれかのメソッドを呼び出す前に、 常に CDynamicOutputPin::StartUsingOutputPin メソッドを呼び出す必要があります。
- CDynamicOutputPin::ChangeOutputFormat
- CDynamicOutputPin::ChangeMediaType
- CDynamicOutputPin::D ynamicReconnect
- CBaseOutputPin::D eliver
- CBaseOutputPin::D eliverEndOfStream
- CBaseOutputPin::D eliverNewSegment
- IMemInputPin::Receive
- IMemInputPin::ReceiveMultiple
- IPin::EndOfStream
- IPin::NewSegment
その後、 CDynamicOutputPin::StopUsingOutputPin メソッドを 呼び出す必要があります。
次に、アプリケーション スレッドは、前の一覧のどのメソッドも呼び出してはなりません。 3 番目に、ストリーミング スレッドは、ピンをブロックまたはブロック解除するクラス メソッドを呼び出してはなりません。 これらのメソッドは、 CDynamicOutputPin::Block、 CDynamicOutputPin::SynchronousBlockOutputPin、 CDynamicOutputPin::AsynchronousBlockOutputPin、 および CDynamicOutputPin::UnblockOutputPin です。
これらの規則により、ストリーミング スレッドがピンを使用している間、アプリケーション スレッドがピンをブロックできなくなります。また、その逆も同様です。 ストリーミング スレッドが StartUsingOutputPin を呼び出した後、ストリーミング スレッドが StopUsingOutputPin を呼び出すまで、ピンはブロックされません。 逆に、ピンがブロックされている場合、 StartUsingOutputPin はピンのブロックが解除されるまで待機します。
StopUsingOutputPin の呼び出しを忘れないようにするには、CAutoUsingOutputPin クラスを使用します。 スコープ外になると 、StopUsingOutputPin が自動的に呼び出されます。
所有するフィルターがフィルター グラフ ( IBaseFilter::JoinFilterGraph メソッド) を結合または脱退する場合は、ピンの CDynamicOutputPin::SetConfigInfo メソッドを呼び出す必要があります。
保護されたメンバー変数 | 説明 |
---|---|
m_BlockStateLock | ブロック状態を保護するクリティカル セクション。 |
m_hUnblockOutputPinEvent | ピンがブロックされていないときに通知されるイベント。 |
m_hNotifyCallerPinBlockedEvent | ピンが正常にブロックされたとき、またはユーザーが保留中のブロックを取り消したときに通知されるイベント。 |
m_BlockState | ブロック状態。 |
m_dwBlockCallerThreadID | このピンで最後に IPinFlowControl::Block メソッドを呼び出したスレッドの識別子。 |
m_dwNumOutstandingOutputPinUsers | このピンを使用したストリーミング スレッドの数。 |
m_hStopEvent | フィルターが停止するか、ピンがデータをフラッシュしたときに通知されるイベント。 |
m_pGraphConfig | 動的再接続を実行するための IGraphConfig インターフェイスへのポインター。 |
m_bPinUsesReadOnlyAllocator | ピンのアロケーターからのサンプルが読み取り専用かどうかを指定するフラグ。 |
プロテクト メソッド | 説明 |
SynchronousBlockOutputPin | ピンをブロックします。は、ピンがブロックされるまで戻りません。 |
AsynchronousBlockOutputPin | ピンをブロックします。ピンがブロックされる前に が返される可能性があります。 |
UnblockOutputPin | ピンのブロックを解除します。 |
BlockOutputPin | ピンをブロックします。 |
WaitEvent | 指定したイベントが通知されるまで待機します。 |
パブリック メソッド | 説明 |
CDynamicOutputPin | コンストラクター メソッド。 |
~CDynamicOutputPin | デストラクター メソッド。 |
SetConfigInfo | IGraphConfig ポインターと停止イベントを指定します。 |
DeliverBeginFlush | 接続された入力ピンにフラッシュ操作を開始するように要求します。 |
DeliverEndFlush | フラッシュ操作を終了するために、接続された入力ピンを要求します。 |
非アクティブ | フィルターが停止したことをピンに通知します。 |
アクティブ | フィルターがアクティブになったことをピンに通知します。 |
CompleteConnect | 入力ピンへの接続を完了します。 仮想。 |
StartUsingOutputPin | ストリーミング操作のピンへのアクセスを取得します。 仮想。 |
StopUsingOutputPin | ストリーミング操作後にピンへのアクセスを解放します。 仮想。 |
StreamingThreadUsingOutputPin | 任意のスレッドがピンに対してストリーミング操作を実行しているかどうかを判断します。 仮想。 |
ChangeOutputFormat | 接続のメディアの種類を動的に変更し、新しいセグメント情報を配信します。 |
ChangeMediaType | 接続のメディアの種類を動的に変更します。 |
DynamicReconnect | 新しいメディアの種類との動的再接続を実行します。 |
IPin メソッド | 説明 |
[接続解除] | 現在のピン接続を切断します。 |
IPinFlowControl メソッド | 説明 |
ブロック | ピンからのデータ フローをブロックまたはブロック解除します。 |
要件
要件 | 値 |
---|---|
ヘッダー |
|
ライブラリ |
|