次の方法で共有


CDynamicOutputPin クラス

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]

クラスは CDynamicOutputPin 、動的再接続と書式変更をサポートする出力ピンを実装します。

このクラスは CBaseOutputPin クラスから派生し、 IPinFlowControl インターフェイスを実装します。 動的グラフの構築に重要ないくつかの操作がサポートされています。

  • 動的再接続: フィルターがまだアクティブ (一時停止または実行中) の間に、ピンを切断して再接続できます。
  • 動的な形式の変更: ピンは、フィルターがアクティブな間、再接続せずに新しいメディアの種類をネゴシエートできます。
  • フロー制御: 所有フィルター (またはアプリケーション) は、フィルターを停止することなく、ピンからのデータ フローをブロックできます。

詳細については、「 動的グラフの作成」を参照してください。

ピンには、ブロック、ブロック解除、保留中の 3 つの状態があります。 保留中の状態では、ピンがブロック状態に切り替わる前に、別のスレッドで何らかの操作が完了するのを待機しています。 ピンがブロックされている間、フィルターはピンを介してデータを配信したり、ピンの接続を変更したりできません。

複数のスレッド間で調整するには、所有フィルターが特定のルールに従う必要があります。 (フィルター グラフのスレッドの詳細については、「 スレッドとクリティカル セクション」を参照してください)。最初に、ストリーミング スレッドは、次のいずれかのメソッドを呼び出す前に、 常に CDynamicOutputPin::StartUsingOutputPin メソッドを呼び出す必要があります。

その後、 CDynamicOutputPin::StopUsingOutputPin メソッドを 呼び出す必要があります。

次に、アプリケーション スレッドは、前の一覧のどのメソッドも呼び出してはなりません。 3 番目に、ストリーミング スレッドは、ピンをブロックまたはブロック解除するクラス メソッドを呼び出してはなりません。 これらのメソッドは、 CDynamicOutputPin::BlockCDynamicOutputPin::SynchronousBlockOutputPinCDynamicOutputPin::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 メソッド 説明
ブロック ピンからのデータ フローをブロックまたはブロック解除します。

要件

要件
ヘッダー
Amfilter.h (Stream.h を含む)
ライブラリ
Strmbase.lib (小売ビルド);
Strmbasd.lib (デバッグ ビルド)