= ピンの実装 (QPin) = 本フィルターでは、2つの固定的出力ピンを持つ。 一つは、Video 用 (QPinVideo) もう一つは、Audio 用 (QPinAudio) となる。 == IPin * Connect() 接続を行う。(下記参照) * ReceiveConnection() 出力ピンでは、インプリメントされない。 * Disconnect() 接続を解除する。動的再接続はサポートしない。 * ConnectedTo() * ConnectionMediaType() 接続状態の情報を返す。 * QueryPinInfo() * QueryDirection() * QueryId() ピンの情報を返す。 * QueryAccept() 下流フィルターからの MediaType 変更を受け付ける。 Video Renderer は、出力サーフェイスの都合で、ビットマップの Stride (Pitch) を変更 する場合がある。 * EnumMediaTypes() 出力可能な MediaType を提示する。 * QueryInternalConnections() 内部接続されたピンはない。 * EndOfStream() * BeginFlush() * EndFlush() * NewSegment() 出力ピンでは、インプリメントされない。 == 接続処理の実装 フィルターグラフから、接続要求があった場合、出力ピンに対して、IPin::Connect() が 呼び出される。このメソッドで、接続処理を行う必要がある。 BaseClasses では、接続ネゴシエーションの複雑なロジックが実装されているが、ここでは、 簡易的な実装を行うものとする。 === MediaType フォーマット指定 To be implemented. === 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 を確定する。 接続プロセスを完了する。 === その他 なお、本フィルターでは、動的再接続はサポートしない。