Friday, November 26, 2010

[x264] Revision 1793, 1796, 1797 and 1802

今回のコミットのうち、4つに何らかの形で関わることになりました。
一番大きいのはr1802ですけど、順番通りに一つ一つ触れます。

まずr1793
これはr1796が関係しています。
r1796のパッチで
HAVE_LAVF ? "/libavformat" : ""

HAVE_FFMS ? "/ffmpegsource" : ""
などを使用していますが、これがエラーを吐くことから発見されたもの。
configureが中途半端なために起こるものだったので、これを修正したのがr1793です。
詳細はコミットメッセージを読んでください(僕が書きましたw)。
ちなみに最初は僕が修正して#x264devに提出して、D_S氏にokを貰ったのですが、
ラスボスのペンギン様に「if/elseが多すぎる」とドリルくちばしを喰らってお流れに。
修正しようと思ったら既にkemuri氏が素早くcoolに直してしまっていました(笑)
コミットメッセージが僕のになってるのはそういう経緯です。

次はr1796
libswscale/libavformat/ffmpegsourceのバージョン、ライセンス表示のパッチです。
バージョン情報についてはぶっちゃけそれほど役に立たない疑惑がありますが…(笑)
あったらあったで便利かなと。
実はこのパッチ、最初は#x264devに提出するつもりではなかったのですよね。
自分が欲しかっただけで、需要があるとも思えなかったので。
ただ、どうせなのでライセンス表示も弄ろうとしたら、意外な発見をすることに。
./configureのとき、--disable-lavf、--disable-swscale、--disable-ffmsが選択可能です。
libavformatとffmpegsourceはどちらもlibswscaleを必要とします。
なので、./configureを走らせるときに、--disable-swscaleを有効にした場合は、
自動的にlibavformatとffmpegsourceも無効になります。
一方libswscaleはlibavformatを必要とはしないので、--disable-lavfを有効にしても
libswscaleは無効にはなりません。
実際にlibavformatが無効でも、--vfのresizeフィルターでlibswscaleが使用されます。
しかし修正前のx264は、lavf=yesかどうかでライセンスの表示の有無を判断していました。
以上の問題があったので、これを修正してライセンス表記を正確にしたのがこのパッチ。
libswscaleのみ使用している場合は
libswscale license: ***
libswscaleとlibavformatの2つを使用している場合は
libswscale/libavformat license: ***
libswscaleとlibavformatとffmpegsourceの3つを使用している場合は
libswscale/libavformat/ffmpegsource license: ***
 などのような感じに表示されるようになっています。

次にr1797
これは僕が提出したr1793に相当するはずだったパッチでに含まれていたものですが、
kemuri氏のパッチに置き換わったので、その分を補完する形になったものです。
上にも書いたようにswscaleが無効ならlavfもffmsもyesかどうか判断する必要はありません。
後半のlavf、swscale、ffmpegsourceの部分が肝心の内容ですが、
統一されていないインデントが気になったのでついでにそれも修正しました。

最後にr1802
実はこれ、僕のパッチが形を変えてコミットされたものです(笑)
[x264] Disable Duplication in Weighted Prediction for P-frames [patch]
新しい--weightp 1は、僕のパッチの--weightp 2 + --no-weightp-dupに相当します。
Blu-rayやPSPやCoreAVC(1系)やFlashPlayer(10.0系)での再生を考えるなら、
--weightp 2ではなく--weightp 1を使えば今後デコードが壊れなくなるはずです。

以上、僕が関わったコミットに関する簡単な説明でした。
ビルドはまた今度。

No comments:

Post a Comment