
--------------------------------------------------------------------------------
■ 変更点
--------------------------------------------------------------------------------

2011/11/14  x264itvfr fix r2016  (r1376 → r1471(タイムコードNG) → fix r2016)


1) x264itvfr のビルドオプション化

  configure のオプションに --enable-itvfr を追加、ビルド時に有無を選択。
  itvfr用の処理は HAVE_ITVFR 定義で追加する様にしています。


2) itvfr用処理を機能化し、使用有無を自動選択

  入力ファイルの読み込み後 VfrOut() を実行し使用有無を選択。以降の処理はON/OFF
  をチェックして制御を切り替え。

  これにより、x264itvfr.exe にitvfr未使用の入力を与えても動作可能になります。
  ただし、フレーム毎に判定増となるのでitvfr未使用時は通常の x264.exe を使用
  した方が良いです。

  ※ 実の所、make fprofiled でビルドするのにitvfr未使用でも入力可能にしたかった
     だけだったりする。。

  [補足]
  itvfr のON/OFFを決定後、有効時は競合するオプションを強制的に無効化します。
  ただし、現状の実装では無効化した旨のログ表示は行っていません。
  無効化されるオプションは以下。

　--timebase
  --tcfie-in
  --force-cfr
  --fps


3) タイムコード異常問題への対策

  最重要変更。r1376 より後の x264itvfr でタイムコードがおかしくなる問題を改善。

  [原因]
  内部処理の変数 timecode の管理は120fps精度にて計算しているが、
  mp4出力のDTS、CTS算出に設定するPTS及び TimeScale は 30fps精度(入力fps) としている為、
  24fpsのフレームが出現すると、120fps精度で +5 となるところを30fps精度の 5 / 4 = 1.25 
  を増加分としてPTSに設定する。PTSはint64_t型である為、少数点以下の切り捨てが発生する。

  結果、24fpsのフレームが30fpsのフレーム長で表示され、ドロップフレームの出現で
  表示時間の不足分が補われる様になる。24fps区間は4フレーム中3フレームが
  本来の値からずれたタイムコード値を取る事になる。

  [対策]
  itvfr有効時に TimeScale を120fpsに設定し、PTSには timecode の計算値をそのまま
  設定する事で、DTS、CTSが正確な値で算出される様に修正を行っています。

  [補足]
  x264itvfr r1376 のmp4出力も、厳密にはタイムコードの値が正しくない。
  （raw＋tmc出力のタイムコードと差異がでている事を確認）
  ただし表示に影響がでる差ではない。0.05.... ミリ秒程度です。

  mp4.c の Picture_Delay の計算で調整している模様だが、近似値となっている為。
  （詳細には調べていません、あしからず）

  尚、比較の為に掲示板に書かれていた「mkvは大丈夫」を念の為確認した所、
  x264itvfr r1471 でmkv出力し mkvextractGUI でタイムコードを抽出してみたが、
  mkvもずれた値が設定されている模様。

  mkvも本修正にてタイムコードが正しく設定される様になります。


4) タイムコード出力処理を変更

  現revでは --tcfile-out によってタイムコード出力が可能となっている為、
  vfrout.h のタイムコード関連処理は削除し、内部処理を利用する様にしました。

  又、itvfr有効時は終端に LASTTIME を書き出す処理を追加しています。

  [補足]
  raw出力時に自動生成するtmcファイルの改行コード、CR+LF から LF に変わります。


5) statsファイル出力処理を修正

  現revに合わせて項目追加、
  statsファイル名を内部保持（エンコーダ終了処理でパラメータは解放されてしまう）



--------------------------------------------------------------------------------

以上



maki