07/12/16 07:04:18 R54hvxBE
MP4 での CTS/DTS ではどうなるかですが、DirectShow ではそもそも表示時間しか
渡すことができないので
I0 [st:0.066 sec] -> I0 として [st:0.066 sec で] 出力
P4 [st:0.200 sec] -> デコードだけしてまだ出力しない
B2 [st:0.133 sec] -> デコードだけでまだ出力しない
b1 [st:0.100 sec] -> b1 として [st:0.100 sec で] 出力
b3 [st:0.166 sec] -> ここで B2 を [st:0.133 sec で] 出力
P8 [st:0.333 sec] -> b3 を [st:0.166 sec で] 出力
…途中略…
EoS 通知 -> バッファ分を順次出力
という処理になっているはずです。
# stts が 1000/30 で単調増加で、ctts で I/P には 2 フレーム分の遅延が、
# 参照 B には 1 フレーム分の遅延が追加、非参照 B (小文字の b) は遅延 0
# という状況を想定
こちらでは、そのフレームに付加されていたタイムスタンプをデコーダが管理して
そのフレームを下流 (レンダラー) に渡す際に正しく付与するという形になります。