normalをデフォルトにした。今やb-pyramidはMB-treeと同時に動き、かつ仕様を満たしているので、デフォルトにしない正統な理由がない。映像によるが、圧縮率を0〜5%改善。none/strict/normalのエイリアス(別名)として0/1/2を使用可能にした(簡潔さのため)。profileをlibx264内に移動。libx264を呼ぶ任意のアプリケーションがこれらを使用可能に。完全なドキュメントと使用方法のガイドラインはx264.hに含まれている。TODO:libx264の使い方に関する記事を立ち上げる。functions.高速でより精密なpsy-RDキャッシング。アダマール変換スコアキャッシュの変数をより多く保持し、必要な場合のみそれらを計算する。計算が多くなるが、lookup(表引き)がより単純に。SATDとSA8D関数内の丸め処理に起因して、僅かに精密になる。saved.かなり高速で効率的なMVD処理。deltaをクリップされた絶対値として格納。これはMVコンテキスト選択において、CABACはもはや絶対値を計算する必要がない事を意味する。これはまた、MVDに費やすメモリを2の係数で削減することを可能にし、(それによって・その結果として)cache_mvdを高速化、メモリ使用量を32*<スレッド数>*<マクロブロック数>バイト減少させる。i7での1080pのエンコードで、これは約3メガバイトの節約になる。modeinterlacedエンコードにtemporal予測器のサポートを追加。interlacedモードにおいて0.5〜1%の圧縮率改善。calculation.マクロブロックパーティションのtrack(追跡)を保持。MVの計算を広くシンプル化可能に。これも注意した方がいいコードに当たるだろうなぁ...。partition_col)>>1);C99ではenum型は最低でもcharと互換性があることになっているので、本当は問題ない。enumを演算に用いるのはあまり好ましくないとされる事が多い。spatialの計算をかなり高速化&シンプル化。注意した方がいいかもしれない表現。i_ref);trueが1であることに依存している。規格では確かに、比較演算子はint型の0/1を生成するので本当は問題ない。規格に従順な処理系ばかりとは限らないし、古い処理系では謎かもしれないので注意した方がいい。C言語以外の処理系との連携を考える場合はtrueが1であるとは限らない。逆に、falseが0であると見なすのは多くの処理系(C言語以外を含む)で、問題ない。ちなみに、C言語のif等の制御構文はtrue/falseではなく非0/0を受け取る。NULLも多くの場合0と見なすことができる。厳密には、0→NULL(0はNULLであると言える)とNULL→0(NULLは0であると言える)では様相が違う。function.と規定されている。constant"と定義されている。NULLポインタの値は実装依存であり、0である保証はない。if(NULL)というコードが通ることを考えれば、筆者の確認していないどこかで規定されているのかも知れない。if(!NULL)という表現に関しても、同様に考えられる。(0==E)."とされている。if(!NULL)はif((0==NULL)!=0)と展開され、...以下同文。mkv出力でヘッダが変わる。checkGPACのバージョンチェックを追加。UTC以降(gf_isom_set_pixel_aspect_ratio()関数)が必要。B-frames.r1430におけるinterlaced時のアホくさいレグレッションを修正。8またはb-pyramidで、配列の過大読込が僅かに不正なBフレームを引き起こしていたかもしれない。frames.スクラッチバッファの過大読込を修正。非mod16なフレームにおいてクラッシュを引き起こしていたかもしれない。SSDチェックにおける整数のオーバーフローを修正。極端な入力における非常に高いquantizerで、不正なスキップを引き起こしていたかもしれない。quantizerには妥当な日本語訳があるのだろうか。「量子化値」が妥当かとも思うが、QP(量子化パラメータ)と紛らわしくなってしまう。enabled.スレッド使用時のI/BフレームのQPを修正。スレッド有効時に丸めエラーが結果として僅かに誤ったQPになっていた。QPが上がり気味になっていたっぽい。ARMARMでのコンパイルを修正。ARMのビルドにのみ影響。globally不要なPICサポートマクロを削除。yasmにはグローバルにPICを有効にするディレクティブがある。モダンなOSでは共有ライブラリ(最も一般的な例で言えばWindowsのDLL)がサポートされている。ビルド時にはこれらがメモリ空間のどこにロードされるか不明であるため、変数や関数のアドレスを参照するコードは、絶対アドレスに依存するものであってはならない(または、依存を解決する手段が必要である)。そのために位置に依存しないコード=PICが利用されるが、アーキテクチャ(CPU・OS)によっては自動でこれに対応せず、明示的にPICの生成を指定する必要があるケースがある(gccにも同様のオプションがある)。x86では一般的にこの指定は不要なことが多いのだが、どうやらx86_64では必要らしい(もちろんOSによる可能性もある)。これを必要時にマクロで個別指定するのではなく、yasmのディレクティブ(指示子:アセンブルオプションをコードで示すようなもの)で一括して解決するようにしたということ。PICの指定は共有ライブラリに必須とは限らず、パフォーマンスに影響するだけの場合もある。これは対象とするアーキテクチャがサポートする共有ライブラリの形式によって、絶対アドレスへの依存問題を解決する方法が異なるためだ。Hacks等の低レベルな技術に必ずしも明るくないので、興味のある方はお使いのOS・プロセッサごとに、ご自身で調べていただきたい。Table)が関連する。dumpbinコマンドのオプション/FIXや/RELOCATIONSなども理解の助けになるかもしれない。temporalを試しもしないように。L0Ref0であるためtemporalを使用することができない。その解析に思い悩まず、単にspatialを使用する。autoの高価が改善するはず。temporalが--b-pyramidで有用であるようにした。これまでは一部のBフレームを参照するBフレーム(b)で不正なMVを参照し、バグに近い動作になっていたと思われる。L0Ref0は、上記の例で言えば最後のPが参照するL0Ref0フレーム(つまり最初のP)と最後のbが参照するL0Ref0(つまり真ん中のB)が違う、という事を言っているようだ。L0Ref0(this)と考えれば良さそう。--disable-asmiPhone向けのコンパイルをサポート。configureオプションに--sysrootを追加。--disable-asmAppleのgasがショボく特殊であるために、通常のgasライクなプリプロセッサをperlで組んでいるというのが面白い。x264でperlのコードを見ることがあろうとは。