svn時代の表記を修正しただけ。sync-lookaheadでの潜在的な非決定性を修正。これはopen-gopでは真でない。win64上でレッドゾーンを使わないようにした。ここでいうレッドゾーンとは、スタック(メモリ)の危険な領域、ということのようだ。いえばx86-64におけるABIはWindowsとLinux/U*ix系で違うと聞いたような気もする。そこら辺の調整と思われる。インターレースでのtrellisのasmを修正。r2145でのレグレッション。アセンブリは配列が[2][64]であると仮定していたが実際には[2][63]であった。僅かな(〜0.1%)圧縮率の向上。対して(訳注:SSE以下の環境において)単純なnopコードを使用。ace_en)では長いnopコードでSIGILLとなる。一言で言えば、特定の古いx86互換CPUでのクラッシュを修正したということ。nopとは「何もしない」命令のこと。単純に考えると、何もしないというのは一見無駄なようにも思えるが、最適化(例えばスーパースカラによる同時実行性など)を考えるときには、命令の組み合わせを調整するなどのために、意外とよく使用される。ItaniumなどのVLIW系CPUではコンパイル時の命令配置が実行効率に大きく響くため、アーキテクチャ的に、NOPの存在がほぼ必須となっていたりする。その他にもバイナリハックをする場合など、パディングや分岐潰しに使われ、結構重要な命令である。x86系CPUにおいて、NOPのマシン語レベルでの表現にはいくつか方法がある。C6が有名)製のx86互換CPUで、SIGILL(不正命令:普通はクラッシュする)となるものだったので修正された。SSE以下という括りはやや大雑把にも思えるが、簡単に対処したということかと思われる。WinChipはx86命令をRISCで実装するという、これはこれで面白いCPUだったのだが、蛇足すぎるので割愛。2013日付を2013に上げた。tzcntのワークアラウンドをやめた。yasmの要求バージョンを1.2.0に上げたため、不要になった。support.mbtree_propagateのAVX2/FMA3バージョン。最初のAVX2関数のテスト。AVX2サポートのためyasmのバージョンを1.2.0に上げた。AVX関数でVEX符号化命令を使用。AVX/AVX2/XOP/FMA3/FMA4関数では自動的に、VEX符号化バージョンが存在する全ての命令でVEX符号化を使用する。この変更は、既存のコードをAVX2を使用するよう拡張するのをより簡単にする。以前は存在しなかった命令群のAVXエミュレーションのサポートを追加。REP_RETを自動的に有効化するようにした。RETは分岐の直後であるかを調べるようになり、プログラマは条件を追っかける必要がなくなった。REP_RETはまだ、それが分岐ターゲットである場合には手作業が必要であるが、それはとても稀である。実装は大量の疑似ラベルを伴うが、stripするので大丈夫だ、問題ない。PROLOGUEでのスタックメモリの確保と再アラインメントのサポート。10.xなど)それらが使用可能となる。一般ユーザにはあまり関係ない更新。config.subconfig.guessとconfig.subを更新。happens.最初のフレームが非キーフレームを強制されている場合のクラッシュを修正。これは明らかにユーザーの入力が悪いが、その場合でもx264はクラッシュすべきではない。2.23.51.0.6でのARMビルドの修正。GASは最早、vld1内での空白を好まないようであるので、それらを削除。ARMビルドにのみ影響。correct.win32とBeOS上でのpthread_joinのエミュレーションを修正。実際にはx264には影響しないが、より正しい。table.r2222でのタイポ(誤植)の修正。levelテーブルで僅かに間違った値であった。-Wp,-D_FORTIFY_SOURCE=2でのgpacの検出を修正。プロセッサ数を得るためsysconfを使用するようにした。SolarisはCygwinと同じ値を正しく返すため、それを使う。AVFrameを正しく確保するようにした。AVFrameをavcodec_alloc_frame()で正しく確保するように。フレームのextradataを解放しようとする新しめのlibavcodecでクラッシュを起こしていた。X86_64ICLでx86_64向けにコンパイルされたlibx264.dllを使用する際のクラッシュを修正。r2228.仕様外のQP値となる潜在的な問題を修正。r2228での潜在的なレグレッションを修正する。format.2-passモードでPPSのpic_init_qpの最適化を試みるようにした。極端なケースで最大〜0.5%。小さなスライスサイズ(小さな解像度またはslice-max-size)であるほどより有用。この変更は2-passのstatsファイル形式を変更することに注意。compression.スライスヘッダのQP選択を改善。一つ前のスライスの最後のマクロブロックではなく、各スライスの先頭のマクロブロックを使用。最初のスライスに対しても妥当な初期QPを取るように。increment.levelのdpbサイズ計算をより新しいH.264の仕様に適合するよう更新。エンコード動作は実際には変わらないが、より正しくした。高ビット深度と非4:2:0で警告メッセージが精密になったはず。技術的には、x264_level_tを再定義するため、これはAPIバージョンの増加である。extensionsffmpeg/vapoursynthの高ビット深度y4m拡張のサポートを追加。3dnow2を3dnowextに名前変更。"3dnow2"より"3dnowext"という名前のほうが一般的。program_nameをマクロが設定されていない場合のみ定義するようにした。これはファイル外からの値のオーバーライドを可能にする。x86inc.asmがx264以外で使用される場合に有用。x264で使用する場合には特に影響なし。CPUテストを無効化。CPUはパフォーマンスカウンタをサポートしないため、このテストはクラッシュしていた。Apple機器向けのビルドにのみ影響。mbtreeでのクラッシュを修正。mid-stream.crf=0へのreconfigureを修正。現在のところロスレスモードはストリーム途中で有効にできない。libx264の修正。0db2d9.ICL上でのALIGNED_ARRAY_EMUマクロを修正。ICLのプリプロセッサはこれを正しく扱わない。この修正は0db2d9のlibavの修正と同様である。「0db2d9」というのはGitのハッシュ。あるコミットを指すのに、リビジョン番号という概念は広く一般的ではあるが、Gitでは本来ハッシュで表す。このchangelogにもgit-idという形で書いているが、その先頭の数文字を表している。gitコマンド上、ハッシュは一意であれば必ずしも全てを書かなくてもよいため、省略表記されている。call非推奨となったav_close_input_file呼出の使用を修正。linking静的・動的リンクに対してpkg-configを修正。libpthread.OSにlibmがある場合にはconfigureスクリプトでlibmを設定するようにした。この後の、別のconfigureのパッチで必要になる。アイディアはlibpthreadから得た。mb_info_updateを追加。この機能はどのデコードされたマクロブロックが変わったを呼び出され側が知ることができるようにする。先のr2213のpskipの部分を再度修正。applicationとlibx264間のI/Fに対する追加機能で、x264cliを使っている場合には関係ない。threadsでのmb_info_freeを修正。x264はその使用が完全に終わる前にmb_infoを解放しようとしていた。encodes.nalu_processを改善。入力フレームのopaqueなポインタを引数に追加。これは複数同時並行なx264のエンコードを容易にする。要は、1つのプロセス内でlibx264で2本以上のエンコードを同時に行う時、どのエンコードの出力であるかをコールバック関数内で区別できるよう、引数を追加したということ。x264cliを使っている場合には関係ない。zero.mb_infoの固定mb最適化を改善。pskipのMVがゼロではない場合であっても高速なスキップを可能にする。各フレームの平均的な実効CRFをエクスポート。VBVが有効にされている場合にフレームの出力品質の判定に役立つ。x264cliを使っている場合には関係ない。-pthread.OpenBSDに対するpthreadの取り扱いの特殊化をやめた。以前は-pthreadを使うポリシーであったが、OpenBSDは今は-lpthreadを推奨している。いずれにせよlibpthreadなのであり、ポリシーは-pthreadを使うのを止めるように変わった。OpenBSD向けのビルドにのみ影響。pthreadが果たして、システムの一部(OSや標準ライブラリに含まれる)とみなすべきなのか、それとも追加機能のライブラリとみなすべきなのか、は(OpenBSDでの事情はともかく)何かと難しいところ。コンパイラが中途半端に取り込んでしまっているのも混乱の原因と言って良い。pthreadの名前の通りPOSIX標準なのであるから、素人目にはU*ix界隈ではシステムの一部と見なされるべきな気がする。そもそも、コンパイルオプションでマルチスレッドの明示が必要というのも、時代的にそろそろどうなのかという気もするが、まあ...オーバーヘッド量的にまだまだ無視できないのか。YMM命令にvzeroupperを自動的に挿入。libavからのバックポート。x264_encoder_close.フレームの削除時にユーザーによって与えられたデーターをFree(解放)するように。x264_encoder_closeを呼んだ際のメモリリークを廃絶する。libx264に関する修正。x264cliを使っている場合にはプロセス自体が終了するのであまり関係ない。it.r2204をrevert(取り消し)。皆さんのお気に召さないようなのでやめようと思います。i7.subme<3での予測機のチェックを高速化。早期スキップの効果を薄めていたタイポ(誤植)を修正。比較的に予測が不能である分岐を回避。タイポの修正により僅かに出力に変化あり。i7で〜50サイクル速い。comments.sub8x8パーティションが存在する場合にも8x8変換の解析を試行。sub8x8パーティションをoffにし、試行し、ダメだったらonに戻す。p4x4がonの場合に小さな圧縮率の向上(〜0.1-0.5%)関連のコメントを更新。res)マクロブロック・ツリー(mbtree)で、パス間の解像度の変更をサポート。量子化オフセットを再スケールするために基本的な分離バイリニアフィルターを実装。構造はswscaleにインスパイアされているが、固定少数点数でなく浮動小数点数としている。可能な限りというほどの最適化はされていないが、既に十分速い。indicatorエンコード進捗インジケーターで経過時間を表示。video.レートコントロール予測のパラメータをキャップ。比較的に不変な動画が長く続いた後の、VBVの予測ミスを限定的にする。libavからパッチを取り込み。INIT_MMXの許でも、手動でのWIN64_SPILL_XMMの発行は許可。SSEバージョンのmovaはmovdqaよりもmovapsに。YMMバージョンのmovnta。名前付き引数にmpサイズを追加。cglobal外で使われた場合のDEFINE_ARGSを修正。幾つかのcpuflagsを定義。幾つかの命令に対する3引数のラッパー。x86incというのは、x264のx86向けアセンブラコードの、抽象化レイヤーを担うマクロアセンブラコード。同じ目的にCPU種別ごとに違う命令を使う場合でも、同じコードでわかりやすく書くことが出来る。r1309でISCライセンスとなり、libavでも使われているのだが、時々libav側で改善されるとバックポートされてくる。x86incが改善されたからといって必ずしもユーザーに直結するメリットがあるとは限らないが、x264の多くのCPUに最適化されたコードはx86incの基盤があってこそのものである。0でのクラッシュを修正。幾つかの整数オーバーフローを修正し、入力パラメータをよくチェックするように。demuxer情報の表示時の誤った型指定を修正した。threads.スレッド化lookahead(先読み)。各lookaheadフレーム解析の呼び出しを複数のスレッドに分割。品質に小さな影響があるが、定常的に悪いというわけでもないようだ。threads(訳注:スライス単位ではなくフレーム単位でのスレッド化でx264ではデフォルトの方式)でのボトルネックを緩和するのに役立つ。多くのケースで、これは多コアシステム上でのパフォーマンスを劇的に増大させる。veryfastでの1080pエンコードが100%以上速い。slowでのリアルタイム1080p30が実現可能だろう。sliced-threadsに対しては、このパッチは設定に関わらず速いはず(〜10%)である。デフォルトでは、lookaheadスレッドは通常のスレッドの1/6である。これは厳密なものではないが、実際のシステム上で全てのプリセットに対しよく効くようだ。sliced-threadsではエンコードスレッドの数と同じである。--lookahead-threadsオプションが追加。デフォルトであるエンコードスレッドの1/6という計算は切り捨て。最低値は1、最大値は16。表記してある以外にもdereferenceを減少させるなどの変更も含む。いくつかアセンブラ化の余地がありそうな部分も見受けられる。Perl5.010001。