refがそれぞれ異なって計算されるために、現在のmacrolockがprogressiveまたはinterlacedであるケースに対して2つのテーブルを計算する必要がある。ref_idxの計算に両左マクロブロックを使用。初めのedgeのdeblocking。左edgeのdeblocking関数を実装。structuredeblock強度構造体にデータを追加。deblockingのサポート。deblock関数から一般的なコードを移動。mbaffのdeblock強度計算を追加。deblock強度の計算を一箇所に保つためdeblock_strengthの呼び出しをx264_macroblock_deblock_strengthに移動。x264_cabac_mvd_sum_mmxextが大きなMVDで動作するように更新。MVDを33ではなく66でかしめる(訳注:クリップ)するように。skipのCABAC符号化。デコーダーが使用しているインターレース判断を追跡。MVのクリッピングの修正。mvyはY方向(縦方向)のMVということかな。予測されたインターレースフラグが不正であろう箇所でskipを不許可。Interのサポート。intra境界を正しくバックアップし、近傍計算を数倍長くした。mbaff.などとある。2つ左のマクロブロックへの参照を格納。左への参照をテーブルに格納。0が使用されている場合、適応的MBAFFを無効化。全マクロブロックに対するインターレースの判断を保存(訳注:コード上で変数に保存)。MBAFFは本来その名のとおりadaptiveなものであるが、これまでのx264は、interlacedと指定された場合には全MBをfieldとしてエンコードしていた。これを本当にadaptiveにしてframe/fieldを使い分けようというのが今回の一連のパッチ。インターレースエンコードのRD(画質・サイズ比)が向上する。Field)という方式も存在する。MBAFFはMBごとに「インターレース用の符号化を行うか否か(frame/field)」を選択するが、PAFFはピクチャごとに選択する、より簡易的な方式。x264がadaptiveでない従前のMBAFFを実装した当時は、商用エンコーダーの多くがPAFFのみ対応であったため、MBAFFを解釈できないデコーダーもあったと仄聞するが、現在はどうなのだろうか。ちなみにfake-interlacedとは、field構造のMBが存在しうるとヘッダで宣言(frame_mbs_only_flag=0)しておきながら、実際にはframe構造しか使用しないことを指す。それなりに温められて来たとは言え、まぁ当然かなりの規模のパッチ群なわけで、自分(訳者)だったら本番エンコード用にはしばらく様子見する。fails.NALバッファリサイズのバグを修正。NALバッファリサイズに失敗した場合に、正しく中止するように。frames).zoneのビットレート定数を修正し2-passモードでQPを強制。以前はzoneの変更が与えられたフレーム範囲の外のフレーム(約20の隣接フレーム)に影響し得た。4.5.qpの丸めにfloat定数を仕様。僅かに性能を向上し、gcc3.4と4.5の出力の僅かな違いを修正する。reconfigurationのバグを修正。いくつかのパラメータの初期化がなかったか、または他のスレッドと同期していなかった。--me-range.入力パラメータの検査を強化。umhと異常な--me-rangeでのクラッシュを修正する。strcpyでのバッファオーバーフローによって発生していた。demuxerでの不正なpixfmtsを検査。新たな日本人committerに乾杯。slice-max-size/slice-max-mbs.r1944でのレグレッションを修正。slice-max-size/slice-max-mbsを壊していた。slices.CABACの初期化コンテキストを事前計算。多スライス時に僅かにエンコードを高速化。costの初期化で冗長なlog2fの呼び出しを回避。x264の初期化で約1億クロックサイクルを節約。ついでに全てのハンガリアン記法も殲滅。cabac_encode_bypassから命令を1つ削減。psy_rd/trellis.入力パラメータをより注意深く検証。encoder_reconfigの呼び出しにおける冗長な警告を除去。encoder_reconfigがpsy_rd/trellisをoffにしてしまうのを回避。25.VFR時のMB-treeが意図したように動くよう修正。25fpsよりかなり大きな、または小さなFPSでの質を改善するはず。versionsより最近のGPACのバージョンをサポート。zones正の--chroma-qp-offsetとzonesでデコーダの同期ズレを修正。53.廃止予定のCODEC_TYPE_VIDEOの代わりにAVMEDIA_TYPE_VIDEOを使用。fake-interlacedの場合にpic-structを強制。no-psyno-psyでのopen-gopを修正。asmasmが無効化されている場合のビルドを修正。minigop.Blu-rayの規格適合性を向上。B-frameが当該minigop外のフレームを参照することを許可しない。いえばminigopって用語を正確には知らないな、と思った。猫研的理解としては連続するBフレームとそれを挟んでいるIDR/I/Pフレームのセットを指すと思っているのだが、正確な定義はなんだろう。書いていたら、*_maniac氏が見つけてきてくれた。etc).Blu-rayのhackを--bluray-compatに集約。Blu-ray互換にはこのオプションが必要となった。blurayはなくなった(bluray-compatとopen-gopの併用がBlu-ray互換のopen-gopを示すようになった)。このオプションは全ての観点(例えば解像度、フレームレート、levelなど)で自動的にBlu-ray互換を確保するものではない。weightp<=simpleに強制するものになっている。内部的には他にも--bluray-compatを基準に設定されているものがある(例えばMinCR)ので、他のオプションの組み合わせで--bluray-compatと同等にはできない。Blu-ray互換エンコードでは--bluray-compatは単なる便利オプションではなく、必須である。このオプションの使用はSEIにも記録される。--open-gopは引数を取らない単項オプションになった。versions.16-byteの格納に対してrectangle.hにSSEのサポートを付加。GCCのベクタ命令を使用;特に古いGCCのバージョンでは恐らく非最適だろう。equivalents.Intelコンパイラにx86のmmx以前のアーキテクチャへのターゲッティングを強制しないようにした。gccの同等のものに比して速度への悪影響を引き起こしていた。test.--tune(psnr|ssim)なしで--(psnr|ssim)が使用されている場合にユーザーに警告。psnr/ssimをご都合的に「忘れ」てx264をテスト上絞め付ける、信じがたいほどおかしなx264のpsnr/ssim「ベンチマーク」が横行していることに対する反撃である。PSNR/SSIMは画質の一つの指標ではあるが、絶対的な画質を表すものではない。x264では視覚心理的な画質の最適化が多くなされており、これらはPSNR/SSIMなどの数値には悪影響を与えるものが少なくない。psnrまたはssimを与えなければ公平ではない。psnr/ssimを使用せずに他のエンコーダとの比較を行い、x264を扱き下ろすことに耐えかねたのだろう。昨年から話題の某コーデック(と呼ぶべきかフォーマットと呼ぶべきか)がPSNRの上昇に異常な執着心を燃やしているため、これと比較されたら堪らない。PSNRが画質の指標としては若干古く、必ずしも正しくないことはこの業界の人間なら知っているはずなのだが、数値として出るものは事前知識のない人間にインパクトを与えやすい。Pentium4時代の高クロック競争と同じく、本質を離れて尤もらしい数値による印象操作がなされていると言っても過言ではない。analysisweightpの解析における冗長なmbcmpの呼び出しを除去。calculationfillerサイズの計算に整数演算を使用。--no-progress--no-progressでのFFMS入力で進捗表示を無効化。incorrect.intra-refreshのレートコントロールのバグを修正。SATDは僅かに正しくなかった。-Wsign-compareコスメティックス:-Wsign-compareで発見されたいくつかの符号問題を修正。x86_64.小規模な修正。コメントのタイポ(誤植)を修正。配列を適正にアライン。x264_scan8を非アラインにした:x86_64上で大量のmovsxd命令を省略。movsxdは符号拡張付き転送命令らしいですよ。cases.configureのC99のサポートに関するチェックを改善。Intelコンパイラでのいくつかのケースにおける設定を修正。codeのオーバーフローの可能性を排除。それが発生する場合には、適合するまで単により高いQPでMBを再エンコードする。SSE2/SSSE3/SSE4/AVXの実装。mc_weightmc_weightのAltivecバージョンを追加。faster.mbcmp_x関数のAltivecバージョンを追加。これらはマージされたバージョンではなく、単に既存のasmコードを呼ぶ。マージされた実装は勿論より速いだろう。cygwin.mingwにターゲッティングしていない場合、cygwinをそれ自体として認識。cygwin上での壊れたスレッド検出を修正。this.インテルのCPUディスパッチャをパッチ。インテルコンパイラの非インテルCPUに対するバイアスを削減。これをどのように行うかの元情報をくれたAgnerに非常に感謝。patch.インテルコンパイラのサポート。consistentコスメティックス:構造体定義のカッコを一貫させた。indexingWindowsにおいてffmsのインデックス化でのコンソールタイトルの復元を修正。muxerの潜在的なバッファオーバーフローを修正。LLVM.LLVMのアセンブラでサポートされないインラインアセンブラシンタックスを除去。LLVM以外でのコンパイル出力には影響しない。hpel).r1912での10Lを修正。(hpelにおいて)SSSE3のコードがMMX/SS2で使われており、逆も同様だった。useful3つ以上の引数のコマンドが有効なAVXの関数を追加。AVXでは3オペランド命令が追加されているので、これを利用した関数を指しているのだろう。players.3Dのフレームパッキング:scenecutを右のviewに置かない。いくつかのプレーヤーで問題を起こしていた。failed.slice-max-sizeのエスケープバイトの処理を改善。現在のアルゴリズムが失敗するような少数の憎々しいコーナーケースの取り扱いに役立つ。writingヘッダの書き込みで、可能な場所では全てbs_write1を使用。code使われなくなったmvcostの初期化コードを削除。flushed全てのフレームがflushされていない場合の、エンコーダのcloseでのメモリリークを修正。rules.CPU検出において有符号となっていたバグを修正。幸運にもCの有符号のルールによって影響はなかった。ここで言う「符号」は+/-の符号の意味。effect.余計なセミコロンにより発生していたくだらないバグを修正。reductionが不正に実行されてしまっていたが、恐らく影響はなかった。semicolonとは、C言語において、文の中身がないのに文の区切り文字であるセミコロン(";")だけがある事を指している。これは空文と呼び、文法的には有効で、特に係り受けのない箇所ではなんの影響もない。ここではif文の直後にあったため、条件分岐で実行されたりされなかったりするはずの部分が、常に実行されていた。Solaris.ゼロサイズのmallocを修正。Solarisのようにmalloc(0)でNULLポインタを返すシステム上で、x264がいくつかの設定に失敗するようになっていた。muxerでのクラッシュを修正。variableの警告を修正。variableは以前に説明した気がするので略。warningsIntelコンパイラの警告をいくつか修正。initted.r1886での10Lを修正。アスペクト比はSPSが初期化される前に設定され得ない。Perl5.010001。