ちょっと気になっている事項があるので「公開?」と疑問系になっています。
WindowModePatchのとあるソフトでのチェックとYUV=>RGBの変換が今日のお題
というわけで、WindowModePatchでとあるソフトでの対応をチェックすることが第一のお題。
そしてYUV=>RGBの変換についてちょっと考えるのが第二のお題。
DirectX7の3Dは使い勝手が・・・
というわけで調べたのですが、今回の場合は古いソフトでしたが体験版があったのでそちらでチェック。
どうもDirectX7の3D処理とプライマリの変換処理がうまくかんでいないためにウィンドウ化できないのでは?という結論になりました。
というのも、DirectX7の3D処理は処理の種類がいろいろあるのであまりよくないんですよね・・・。
特にWindowModePatchによって中間処理が入っているので正しく3Dのサーフェイスやらテクスチャやらが処理できないという状態になるようで。
がんばってデバッガで処理を追っていって結局d3dim.dllというDirectX7での3Dを管理している処理で(予期しないと思われる)バグでエラー落ちということを確認してこれ以上手の出しようがないかな、と。
・・・しかし、初めにこのソフトの必須条件にだまされましたよ。DirectX8.1が必須と書いてあったので「DirectX8系か・・・」と思って始めると使っているのはDirectX7の3Dとは・・・。
お願いですから使用するDirectXのバージョンくらいは正しく書いてもらえませんか・・・・?
YUV=>RGBの変換でどうもパラメータミスがあったよう
どうやら変換式の係数が間違っていたページを参照していたか手動などで打ち込んだときに打ち間違えたかしていたようです。
逆変換時にかなり係数がおかしい部分があることがわかりその部分を修正することに。この時点でDirectShow Extend Filter Libraryを更新することに決定。
BT.601とBT.709の係数問題やら値範囲の変換やら
があるので、とりあえず4パターン対応してみました。これが今回の更新の最大項目。
特にWebMの再生ではBT.601が使われていないような感じがしているのでBT.709を使えるように演算係数を変更したのが一つと、
明度と色差の範囲がとある条件によって狭まって計算されるのでそれを広げて逆変換できるようにしたのがもう一つです。
そのためにライブラリに新たにそれを設定できるようにルーチンを増やして対応しました。
これでこのライブラリを使ってWebMを非ウィンドウに描画するときの色がくっきりと表示されるようになって問題点がまた一つ解決。
で、何でライブラリサイズが100kBほど下がる?
これが疑問符の訳です。私はここ数ヶ月でこれほど容量が下がるような何を変更したのでしょうか?
デバッグはちゃんとしているのでデコーダは動作するはずです。別の理由だったら怖いのですが、これこそよくわからないのでまあ大丈夫だろうと。