- 1 名前:デフォルトの名無しさん [2006/11/08(水) 00:25:56 ]
- 前スレ
pc8.2ch.net/test/read.cgi/tech/1026666092/
- 310 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 22:14:45 ]
- 休日の夜中になっても頑張ってるから応援したくなるよ あんまり教えすぎはよくないんだけど
>303 サンプルの流れについて まず上流(キャプチャデバイス)の出力ピンが、変換フィルタの入力ピンCTransformInputPin::Recieveにサンプルを渡す。 入力ピンRecieveはCTranscormFilter::Receiveを呼ぶ。んでTransformメソッドでサンプルを変換した後、 出力ピンから下流(色変換フィルタ)のRecieveを呼び出す(サンプルを渡す) という流れ >289で「Deliverしてる」って表現したのはマズかったかな。要は下流にサンプルを渡すってことなんだ。 下流の入力ピンのReceiveを呼び出す(サンプルを渡す)。コレがDeliverの正体。 CBaseOutputPin::Deliverメソッドのソースを見てみるといいよ(Baseclassesのamfilter.cppな) んでTransformフィルタなんだけど、出力ピンのDeliverメソッドは呼んでいないんだ どうやって送信してるかというと、CTransformFilter::Receiveの中に次のコードがある hr = m_pOutput->m_pInputPin->Receive(pOutSample); これ。ここで送信してる。直訳(?)すると、自分の出力ピンに繋がってる入力ピンのReceiveに Transoformメソッドで変更を加えたサンプルを渡す ってこと。 長いので続く
- 311 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 22:48:26 ]
- 303のカキコミについて説明していくよ
> CTransformFilter::InitializeOutputSample (新しいサンプルを[キャプチャフィルタ]の出力ピンから取得する) InitializeOutputSampleは出力するサンプルの準備をするメソッドなんだ。 ここでは送信するサンプルのバッファをサンプルと結びつける(バッファ自体は出力ピンが確保してる) HRESULT hr = m_pOutput->m_pAllocator->GetBuffer( その後で、上流から受け取ったサンプルのプロパティ(各種フラグと言ったほうがわかりやすいか)や時間情報を 出力するサンプルに設定していく。これがInitializeOutputSampleの役割。 このことから、上流から受けたサンプルと、自分で送るサンプルは全くの別物であるということがわかる。 送信が済んだら、このサンプルをリリースすることでバッファの開放などが行われる (CTransformFilter::Receiveの最後の方 pOutSample->Release(); ) ちなみに上流から受けたサンプルをダイレクトにそのまま下流に出力するのはCTransInPlaceFilterだ つづく
- 312 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 23:10:36 ]
- 早い話、君は2回送ってるつもりでも、3回送っていると思われる
しかも3回目のサンプルの時間情報は上流から受けた時間そのもの
- 313 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 23:13:13 ]
- Transformメソッドはサンプルの内容を変更するだけじゃないと ブー
そういう設計なんでこざいます だからここから送信したら ブーブー TransformInputPin::Receiveをオーバーライドしないとアカンねん
- 314 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 23:23:29 ]
- まちがえた TransformFilter::Receiveな 酒のんでるからすまんの
サンプルのタイムスタンプ見てレンダラが表示のタイミングを待ったり、時には捨てたりするアルよ サンプルの不連続性(Discontinuity)とか同期ポイント(SyncPoint)を示すフラグの扱いとか 注意してくれよ キレイなフィルタを作りましょう。んじゃ頑張れ
|

|