Closed Alalf closed 12 years ago
現状GetLatency()の計算部分がいい加減なので、offsetの値をタイムスタンプへ反映はしていない。
ぱっと考える限りタイムスタンプが動作中に巻き戻るのはまずい気がしている。(タイムスタンプの単調増加が崩れる)
つまりオフセットを指定するのはスレッド開始前でなければならない・・・。設定する場所がないような気がしてきた。
なお、IAMPushSourceの上記機能が使えるのは一部のエンコーダだけのように見える。 (WMEだとGetLatency()がそもそも呼ばれない) これはQCTMのときといっしょか。
わざわざグラフクロックを取得しに行っているのはこういう理由があったわけか・・・
AppDataとレジストリに設定が分散して気持ち悪いなー まあSCFHもレジストリ使ってたのでいいか…
APPから設定できる=エンコード途中に変更できるようにする、なので、ここでフレームのタイムスタンプをずらせてしまうのは間違い。別Issueに移動します。
映像に比べて音声が先行するフレーム遅延が発生した場合音声に遅延をはさむ必要があるが、 これをフレームのタイムスタンプのオフセットを設定するだけで解決できないだろうか?
いちおうIAMPushSourceにはタイムスタンプのオフセットを変えたり最大値を設定するメソッドがある。 http://msdn.microsoft.com/ja-jp/library/cc355052.aspx ただし、これはあくまでDirectShowが遅延の異なる複数のソースフィルタの間で同期を取るためのもので、 ユーザが呼び出すためのものではない。
動作自体はこんな感じ。