r2000-r2099このページの全ては誤っているかもしれません。x264関連の記事に関してを読んでください。r2000-r2099r2000-r2099のchangelogの日本語訳。その他のリビジョンと注意事項についてはx264-changelog-jpへどうぞ。faster.i4x4/i8x8エンコードをintra解析内にインライン化。コードサイズが大きくなるが、より高速。パイプラインの通りを良くするの(インライン化)とキャッシュ効率を上げるの(コード縮小)のどちらが高速化するかはケースバイケース。今回はインライン化したほうが速かったということらしい。Bulldozerにおける初期的なXOPとFMA4のサポート。アダマール関数(SATD/SA8D/hadamard_ac)の〜10%高速化するのに加えその他の改善。deblock関数をNV12ピクセルフォーマットに更新。compliance.Solarisでは/usr/lib/{64/}values-xpg6.oを$LDFLAGSに追加。これはPOSIX.1-2001の規格適合に要求されている。'impure'.-Bsymbolicに対するリンカのテストを修正。modeでコンパイルされたオブジェクト(つまりsharedオブジェクト)に対してのみ-Bsymbolicを受け付けるため、gccに-sharedを指定。加えて、未解決のtextrels(textのリロケーション)がリンカエラーを引き起こすため、x86_32に対しては.textセクションを'impure'とマーク。ここで言うtextはいわゆるテキストファイルなどの「文字データー」という意味でのtextではなく、実行モジュール(Windowsでいう.exeや.dll)のある領域の名前(領域の種類)を指している。variable$SOFLAGSをエクスポートされるmakeのSOFLAGS変数に追加。needed.コンパイル時にchromaフォーマットを設定可能とした。一つのchroma形式のみ必要である場合には、僅かに速度向上と有意なバイナリサイズの削減となる。builds.profileのヘルプを改善。high422/high444をリストに含め、高ビット深度のビルドでは非高ビット深度のプロファイルを表示しない。v1ファイルの解析での無限ループを修正。encodes.IOCによって発見された幾つかの整数オーバーフロー/符号ミスを修正。ここで実際にバグとなるのはslicetype.cにおいてのみで、実際のエンコードには影響したかもしれないし、してないかもしれない。compression.4:2:2エンコーディングでのpixel_var2を修正。アーティファクト、または非最適なchroma圧縮を引き起こしていたかもしれない。intra解析を修正。RDO内での未初期化のMVの使用を修正。arch(アーキテクチャ)の検出を修正。全てのループカウンタのテストをその条件ジャンプの直前に置いたということ。CPUの高速化技術の名前。Pentium以降、Intelチップはx86命令を内部でμOPsと呼ばれるRISC的命令に変換して実行しているのは以前にも書いた。x86命令1個に複数のμOPsが対応するだけでなく、複数のx86命令にまたがる1つのμOPが存在する。これを有効に活用するために、条件分岐命令の前にループカウンタのチェックを置いたということだ。CAVLCとRDのビット計数がいくらか高速に。CABACとRDのビット計数がいくらか高速に。asm幾つかの初期的なx86の4:2:2のasm。support4:2:2エンコードのサポート。アナログ時代のソースでは4:2:2色空間のものも多かったので、役に立つこともあるかもしれない。他には4:2:0→RGB→縮小→4:2:2と変換するなど、色差情報の密度が上がるケースか。code.SSSE3/SSE4の9-wayの完全に統合されたi4x4解析(sad/satd_x9)。古いコード(fastプリセット))ではそれらの幾つかを検査した後に、打ち切り処理を行いうるものだった。slowプリセットでは体系的な違いはないが、それでも時に、均衡を破る。デバッグの容易性のため、satd_x9と将来の同様のコードを無効にする"--cpu-independent"のオプションを追加。打ち切り処理は「こんだけ有用なデータが得られたし、もーいいだろ」と途中で解析をやめて速度を稼ぐ処理だが、それをせずに「いや、最後まで探す」としたにもかかわらず、PenrynでもSandyBridgeでも二倍前後のオーダーで高速化しているということ。これがSSSE3以上を備えたCPUではfasterプリセットでも行われるようになった。functions.十分なasmのないバージョンのintra_mbcmp_x3を高速化。ラッパー関数の中でより賢くasmサブルーチンを選択。17->13x86のintra_predict_4x4と8x8を最適化。checkasmcheckasmでintra予測ベンチマークに対し実質的なアラインメントを使用。仕様によれば、frame_packing_arrangement_typeが0に等しい場合、quincunx_sampling_flagは1となる。WINDOWS/CYGWINSYSがWINDOWS/CYGWINの場合の共有ライブラリのinstall/uninstallを修正。configureHurdのサポートをconfigureに追加。faster.x86のintra_satd_x3_*を最適化。cosmetics.x86のintra_sa8d_x3_8x8を最適化。その他幾つかの小規模なアセンブラのコスメティックス。predictorに対しインターレースのrefs/mvsをスケール。僅かに圧縮(率)を向上しValgrindのエラーを修正する。false-positivepredict_8x8_filterを最適化、ついでにvalgrindの誤検出を除去。faster.non-flatなAVXのdequant関数をflatなSSE2のものでオーバーライドしないように。false-positivesvalgrindの誤検出を幾つか黙らせた。offB-frames/CABACがOFFの場合の不要な(訳注:メモリの)確保を回避。RD解析内のタイポ(誤植)を修正。不正なインデックスをtrellisに渡していた。16の場合の不正なメモリアクセスを修正。pifmtsの中途変換を修正。4:4:44:4:4でx264_encoder_encodeが返すpic_outを修正。predictorのゼロ化を修正。doesn't.修正:Uが打ち切り(訳注:打ち切り処理)になりVはそうならない場合にweightp解析のためのchromaプレーンが未初期化であった。weightp解析の前に枠の拡張。mc(動き補償)が未初期化のソースのピクセルを使用することを抑制。weightpのバグ修正。helpヘルプのタイポ(誤植)を修正。cosmetics.パス間での解像度のばらつきのサポートを向上。よい質を生み出すはずだが、MB-treeはまだサポートしない。パス間でのinterlacedオプションの一致をチェック。小さなレートコントロールのコスメティックス。シャッフルを4進定数に。意味的に理解しやすいコードにしたということ。yasmが4進数表記をサポートしていたとは...。pixel*sse4.関数ポインタを逸していた既存のasm関数を幾つか有効化。predict_8x8_hd_avxx。prefetch_fenc/ref、そしていくつかのpixel*sse4。dequant_dc_sse4.いくつかの不使用、壊れている、無用である関数を削除。不使用のframe_sort。predict_8x8_vr_mmx2。zigzag_sub_*。dequant_dc_sse4。ABSマクロの全バリエーションをマージ。executable.asmのコスメティックスその2これらの変更は出力される実行ファイルを変更するためにcpuflagsのコミットとは分けられた。INIT_MMX/XMM/YMMがcpuflagsの引数をサポートするように。渡して回るマクロ引数の数を削減。トップレベルにおける%defineにより実装を選択せねばならないのから代わり、マクロが定義される場所においてcpuflagsをチェックするために、任意のマクロ(例えばPALIGNR)の複数の実装を許可。avx"で代替されるためINIT_AVXを削除。このコミットはstripされた実行ファイルを変更しない。コード上で言えば大きく表記の変わる一種のリファクタリングだが、最終的に生成されるコードは一切変わらないということ。libavx86inc.asmのパッチをlibavから取り込み。s/mmxext/mmx2/IRCを使っている人には馴染みのある表記だが素人さんのために一応解説。"s/mmxext/mmx2/"というのはmmxextをmmx2で置換するという意味。Perlというプログラミング言語の置換表記に由来している。U*ix系のOSは歴史的、文化的にテキスト処理が非常に多く、高度なテキスト操作にPerlはよく使われていた。初期のWebはU*ix系サーバーで構成されており、かつテキストが主体だったため、CGIを使った自己更新可能なWebページは、その流れを組んでPerlで作成するのが主流だった。今でこそPHPやASPが多くを占めるものの、Perlは一時代を築いて、今ではU*ix系OSの標準的環境の一部となっている。Perl自体を直接使ったことがなくとも、あなたが使っているシェルスクリプトは中でperlコマンドを叩いているかもしれない。msysgitを使ってソースコードを取得しているなら、実は中でperlが叩かれている。猫研のページはFSWikiを改造して使用している。FSWikiはPerlで書かれている。weightp解析の2つのバグを修正。僅かに圧縮率を低下させていた。sse2fast,fastshuffle,sse4.2,avx"が必要だった。<2.6のサポートを再度追加。newer.非推奨のlibavcodec関数の使用を回避。av_find_stream_infoをavformat_find_stream_infoで置き換え。53.3.0以降が必要になった。MBAFFMBAFFにおいて幾つかのdeblocking関数のアセンブリバージョンを使用。X264_POINTVERをconfig.hからx264_config.hに移動。これは外部プログラムに対しこれらをpublicなAPIの一部として利用可能にする。x264_expand_border_mbpairx264_expand_border_mbpairのパディングのバグを修正。maximum.タイムコード解釈:欠けていた初期化を追加。ptsのmalloc(訳注:メモリ確保)より前にタイムコードファイルの解釈に失敗した場合のクラッシュを修正。H.264の最大値を超過すると思われるユーザーtimebaseの検出を修正。input高ビット深度4:2:0入力でのクラッシュを修正。asmのコスメティックス。しかるべき場所でFDEC_STRIDEBを使用。ロスレスエンコーディングで稀にクラッシュを引き起こしていた。4:4:4におけるレグレッション。improvement.p8x4/4x8の検索判断を改善。p16x8/8x16と同じ閾値を使用。少量の圧縮率の改善のためにp8x4/4x8検索をより頻回に行う。11を追加、解析における全ての打ち切りを無効にする。estimation(trellisモード決定/動き見積もり)パッチに必要。slowestプリセットをレグレッションテストに追加。slowestと言っているのはveryslowとplaceboのこと。patch.RDの閾値に幾つかの些細な変更。次のパッチの出力変化部分。offsetの設定を許可。offsetのフルレンジでの使用を可能にする。terminationsmacroblock_deblock_strengthの最適化、さらなる打ち切りを追加。functionsMBAFFのdeblocking関数を関数ポインタ化。codeMBAFFのdeblockingコードを整理。frame_deblock_rowframe_deblock_rowの最適化。arrays2つの配列を小さくした。x264_picture_allocx264_picture_allocに対し新たな(4:4:4)色空間のサポートを追加。cosmetics色々とコスメティックス。helpconfigureのヘルプを改善。ヘルプの改善なので何も影響しない。options幾つかのconfigureのオプションに$optargを使用。普通はビルドにも影響しない。glibcのマクロを使用。cpu_set_t構造体はopaqueであるとみなされる。「cpusetsizeがカーネルによって使用されるアフィニティマスクのサイズよりも小さい」場合にはsched_getaffinity()エラーのケースも処理。ここでのopaqueは中身のわからないブラックボックスということだろう。changed"を修正。newer.非推奨のlibavcodec関数の使用を修正。avcodec_openをavcodec_open2で置き換え。53.6.0以降を必要とするようになった。HRDHRDでのnalu_processのコールバックを修正。PIX_FMT_YUV444P.幾つかのpixfmtsに対する不正なchromaのスワップを修正。問題はlavf/ffms入力のpixfmtがPIX_FMT_RGB24かPIX_FMT_YUV444Pの場合に起こっていた。pixfmtって固有名詞的に扱うか困る。pixfmtYUVJ*の入力ピクセルフォーマットでのリサイズフィルタのクラッシュを修正。YUVJとは主にJPEGでの利用が想定されるフルレンジYUVのこと、だと思う。ffmpegでも同じyuvjという用語を使っていて、そちらではobsoleteなのにまだ使われ続けているものだった気がする。確認する時間がないです、すみません。framework.RGBエンコーディングのサポート。YUV444よりも格段に低効率ではあるが、YUV444のフレームワークを使用することでサポートが簡単。アチラコチラで話は出ているので今更解説する必要はないと思うけれど、サブサンプリングのない色空間というかカラーチャンネル構成がサポートされた。入力可能フォーマットとしてはこれまでのI420/YV12/NV12に加え、I444/YV24/BGR/BGRA/RGBが加わった。主にはゲーム画面のキャプチャ等のRGBソースをビットレートを盛ってでも綺麗に残したい場合等に絶大な効果を発揮する。他にも使いどころがないことはない(4:2:0ソースでもYを縦横1/2して論理解像度を縮小し入力する場合とか)けど一般人にはそれほど...。そもそも一般に入手可能なデータのほとんどは4:2:0か、良くて4:2:2なので、民生用としては需要が多くはなく、対応していないデコーダも普通に存在することが予想される。個人的にはアップサンプリングしてまで無理に使うのはあまり意味が無いと思う。そのアップサンプラの性能に大きく依存してしまうし、変にいじってビットレート盛って保存するよりサブサンプリング状態のままで表示側に任せる・調整するほうがいい。内部NV12化の時のpengvado氏のパッチも大きかったが、今回も当然すごい量。x264.hに変更はあったが互換性を壊していないのでX264_BUILDは上がっていないようだ。support4:4:4エンコーディングのサポート。