« 現在のフレーム番号の取得 | メイン | EC_UPDATEイベントと共にフレーム番号を »

September 14, 2004

時間からフレーム番号へ

とりあえず、以下のようなコードで変換。

REFERENCE_TIME TimeStart;
REFERENCE_TIME TimeEnd;
GetSampleTimes( pSample, &TimeStart, &TimeEnd );
double renderTime = TimeStart / 10000000.0;
REFTIME AvgTimePerFrame;
CBaseControlVideo::get_AvgTimePerFrame( &AvgTimePerFrame );
EventParam1 = (LONG)(renderTime / AvgTimePerFrame + 0.5);

なぜか、REFERENCE_TIMEはLONGLONGで、REFTIMEはdouble。
とりあえず、doubleにあわせて計算。
最終的に四捨五入してフレーム番号とする。(レンダリング時間は処理時間を考慮して、少し遅く、もしくは早く設定されている。詳しく言えば、1フレーム目は少し遅く、それ以降は少し早くなっている。はず)
これで、だいたいいい感じのフレーム番号が出ているようだ。
でも、開始直後など時々ドロップフレームがある。
まあ、仕方ないでしょう。
このフレーム数を使って処理する部分は、ドロップフレームが発生する可能性を考慮して作らないといけない。
つまり、何フレーム目でと言う処理で、==とかで比較すると、一生一致しない可能性がある。
この点は気を付けないとな。

投稿者 Takenori : September 14, 2004 12:29 AM

Trackback Pings

このエントリーのトラックバックURL:
http://blog.kaede-software.com/mt-tb.cgi/177

コメント

Total : Today : Yesterday :