ピンの実装 (QPin)

本フィルターでは、2つの固定的出力ピンを持つ。

一つは、Video 用 (QPinVideo) もう一つは、Audio 用 (QPinAudio) となる。

IPin

  • Connect()

接続を行う。(下記参照)

出力ピンでは、インプリメントされない。

  • Disconnect()

接続を解除する。動的再接続はサポートしない。

接続状態の情報を返す。

ピンの情報を返す。

下流フィルターからの MediaType 変更を受け付ける。

Video Renderer は、出力サーフェイスの都合で、ビットマップの Stride (Pitch) を変更 する場合がある。

出力可能な MediaType を提示する。

内部接続されたピンはない。

出力ピンでは、インプリメントされない。

接続処理の実装

フィルターグラフから、接続要求があった場合、出力ピンに対して、IPin::Connect() が 呼び出される。このメソッドで、接続処理を行う必要がある。

BaseClasses では、接続ネゴシエーションの複雑なロジックが実装されているが、ここでは、 簡易的な実装を行うものとする。

MediaType フォーマット指定

接続 MediaType が指定された場合、partial format (majortype & subtype) 指定の時は、 その出力フォーマットの候補を検索する。完全指定の場合は、完全一致で検索する。

本フィルターでは、フォーマットの指定は、Video の出力のみにサポートされ、以下の2つのいずれか を指定できる。

  • YUY2 (デフォルト)
  • YV12

MediaType ネゴシエーション

ピンの持つ出力 MediaType が入力ピンに受け入れられるかテスト (IPin::QueryAccept()) する。

入力ピンの IPin::ReceiveConnection() を呼び出す。

MemoryAllocation ネゴシエーション

Push Model で出力を行うため、入力ピンに対して IMemInputPin を要求する。

入力ピンから提供される Allocator を使用するため、入力ピンに Allocator を 要求 (IMemInputPin::GetAllocator()) する。本フィルターからの Allocator の提供は行わない。 (レンダラーは、上流フィルターの Allocator を受け入れない場合がある。)

Allocator に必要なバッファーサイズの要求 (IMemAllocator::SetProperties()) を行う。

接続先のフィルターによっては、SetProperties() 呼び出しで、 QueryAccept() により、MediaType の修正が求められる場合がある。

IMemInputPin::NotifyAllocator() を呼び出し、Allocator を確定する。

接続プロセスを完了する。

その他

なお、本フィルターでは、動的再接続はサポートしない。