その1 ダウンロードリンク集以前
自分用ダウンロードリンク集を作ったけど、HTMLを編集するのもだんだん面倒になってきたので、
エクセルファイルにしていろいろ追加。ちょっと表示に時間がかかるのが難点だけど・・・。
その2 透過性ロゴ SIMD版まあ、特に意味はないです。当たり前だけどSIMDにしても特に速くならないです。もともと速いので。血迷いました。
まさかロゴ解析ではなく透過性ロゴをSIMD化するとは思わなかったので想定外でした・・・。
rcファイル見るとバージョンが
VALUE "FileVersion", "0.1.2.1\0"
となっていてホンの少し不安になったのですが、元にしてるのはMakki氏のdelogo ver0.13(2009-01-24)でいいんですよね?
Makki氏がどうも0.13にするときにrcを更新し忘れたみたいで、それに末尾「.1」をつけたからこうなってるんだとは思いますし、一応filter.cを見比べたりしたのでこの認識で間違いないと思うのですが、これは
VALUE "FileVersion", "0.1.3.1\0"
と考えていいのでしょうか?
元にしたソースはdelogo_src20090124.zipなので間違いなく0.13ベースのはずです。
参考までにSIMDはロゴ消し部分だけで、SSE2 / SSE4.1 / AVX2+FMA3 の3バージョンからの自動選択です。
ロゴ解析はまあ、使う頻度が低すぎるので、さすがにやりません(笑)。ロゴ変わらないとやらないですからねえ…
すみません…このフィルタって元々4スレッド以上のMT対応のものでしょうか?
使用率見てると4スレッドくらいしか使ってないような気がしたので…
それと、SIMD対応版有難うございます!
あまり速くならない可能性が高いということですが、早速使わせて頂きますm(__)m
…私の環境だとSSE4.1しか適用されない…仕方無いか。。。
あと、もしよろしければ「ノイズ表示」フィルタのSIMD・MT化をお願い出来ますでしょうか?
あのフィルタ凄まじく重いので、何とかならないものかと思っておりまして…
透過性ロゴですが、もともとこれは1スレッドで処理されています。4スレッドに見えるのは他の部分で並列が効いているからではないでしょうか。
処理面積が狭いため、SIMD化しても何も変わらないぐらい速いので、MT化はさらに意味が無いと思います。同期待ちとかで遅くなりそうな気もします…。
ノイズ表示の高速化は…すみません、ソースコードがないうえに、どういう仕組なのか全く理解できていないので、難しいです。ソースがあればMT化はわりと簡単なはずですが…。
このコメントは管理人のみ閲覧できます
MakKi氏の最終バージョンでもあるバグなのですが、
iniの[int]セクションで前のバージョンで512まで設定できた
min、max設定が256までしか効果なくなっています。
もしお時間があれば修正をお願いできませんでしょうか?
わかりました。時間あるとときに少し調べてみます。
ちょっとyomogiさんの質問に便乗質問させてください。
ver0.13.1の場合、まずlogodef.hで
#define LOGO_STED_MAX 256
#define LOGO_STED_MIN -256
と定義されている状態でfilter.cppの214~219行目で
static int track_s[track_N] = { LOGO_XY_MIN, LOGO_XY_MIN, 0, -100, -100, -100, LOGO_STED_MIN, 0, 0, LOGO_STED_MIN };
static int track_e[track_N] = { LOGO_XY_MAX, LOGO_XY_MAX, 256, 100, 100, 100, LOGO_STED_MAX, LOGO_FADE_MAX, LOGO_FADE_MAX, LOGO_STED_MAX };
のように初期値が設定され、同247~281行目でFILTER_DLL型の変数filterのメンバーtrack_s,track_e(int*型)に先の配列の先頭要素へのポインターを代入し、
同1290~1299行目でGetPrivateProfileIntを利用してiniの[int]セクションにそれぞれキーがあればそこで設定された値にtrack_s[i],track_e[i]を変更している
のはわかるのですが、
(例えばiniに
[int]
track6_max=512
とあると、track_s[6] = -256, track_e[6] = 512 となるということですよね?)
こうして設定されたFILTER_DLL型の変数filterのメンバーtrack_s,track_e(int*型)はどこで使用されているのでしょうか?私の力では追いきれませんでした。
一回でもAviUtlのフィルタを作った人なら常識なのかもしれませんが、作ったことがないもので。
手が空いて、"気が向いたら"教えて頂けると幸いです。
>iniの[int]セクションで前のバージョンで512まで設定できたmin、max設定が256までしか効果なくなっています。
実際に試してみましたが、以下のようにdelogo.auf.iniをdelogo.aufと同じフォルダに配置すると、正しくトラックバーで反映されました…。
[int]
track3_min=-512
track3_max=512
track3_def=0
track4_min=-512
track4_max=512
track4_def=0
track5_min=-512
track5_max=512
track5_def=0
track6_min=-512
track6_max=512
track6_def=0
また、設定値もきちんと動作に反映されていると思います。念のため、コードでもチェックしましたが、ファイルの設定値をきちんと読めていました。
申し訳ありませんが、うまくいかない具体的な設定値を教えていただけないでしょうか?
>> yumetodo様
>例えばiniに
>[int]
>track6_max=512
>とあると、track_s[6] = -256, track_e[6] = 512 となるということですよね?
おっしゃるとおりです。
>filterのメンバーtrack_s,track_e(int*型)はどこで使用されているのでしょうか?
その後の動作としては、
EXTERN_C FILTER_DLL __declspec(dllexport) * __stdcall GetFilterTable( void )
{
return &filter;
}
のところで、Aviutl側にプラグイン情報がFILTER_DLLのポインタとして渡されます。
あとは、Aviutl側が、このポインタを介して、フィルタ情報を読み取っていっているはずです。この読み取り部分はAviutl側で行われる処理のため、フィルタ側のコードには存在しません。
具体的には、Aviutl側では以下のように使うことができるのだと思います(非常に単純化してますし、Aviutl側のコードを見たことはないので推定です)
typedef FILTER_DLL * (__stdcall *func_get_filter_dll)();
//delogo.aufをロード
HANDLE h_filter = LoadLibrary("delogo.auf");
//delogo.aufのGetFilterTableのアドレスを取得
func_get_filter_dll get_filter_dll = (func_get_filter_dll)GetProcAddress(h_filter, "GetFilterTable");
//delogo.aufのGetFilterTableを呼び出し、FILTER_DLLへのポインタを取得
const FILTER_DLL *ptr_filter_dll = get_filter_dll();
//ptr_filter_dllを介しフィルタの情報を取得
printf("%sn", ptr_filter_dll->filter_name); //"透過性ロゴ"
printf("%dn", ptr_filter_dll->track_s[0]); //"-500"
x264guiEx/x265guiExには、デフォルトの出力拡張子をmp4から他の拡張子に変更する機能が存在しますが、これも同様にOUTPUT_PLUGIN_TABLEのfilefilter部分をGetOutputPluginTable内で動的に変更してから、AviutlのポインタをOUTPUT_PLUGIN_TABLEの渡すことで対応しています。(出力プラグインの場合はさらに小細工が必要ですが…)
すみません、とてもとても中途半端な説明でした
スライダー自体は512には出来るんですが、オプションで
各ロゴごとに初期値を設定できるんですけど、ここで330とか入れても
256に戻されてしまうんです
ini FileでRangeを変更できるとは知りませんでした。
Pluginを作ったり改造する場合には気をつけないとですね。
yomogiさんのおっしゃっている問題は、editdlg.cppのon_IDOK()内で定数でClipしている処理のせいかな?
>yomogi様
ご指摘の件、修正できているかと思います。お試しいただければと思います。
http://rigaya34589.blog135.fc2.com/blog-entry-565.html
>HayatePP様
おっしゃるとおりそこの処理だったようです。ありがとうございます。
257以上の数値を入力しても保存されるようになりました!
ありがとうございました。
直接数値を入力するのでほとんど問題ないのですが、
数値を入れるボックス横の上下ボタンは256制限が
かかっているようです
(500と入力した後上のボタンを押すと256になる)
「時間あるとときに」とおっしゃってたから一週間後くらいかなと思ってのんきに構えていたせいで返信が遅れました。
AviUtl側での扱われ方まで教えていただき、便乗質問にもかかわらずこんなに丁寧に回答していただき、ありがとうございました。
その後の処理は(exportしたら)AviUtl側でやってるんですね、フィルター側でやってるんだとばかり思っていました。そりゃいくら探しても見つからないはずで。FILTER_DLL型の構造体に入れている時点で気づくべきでした。
これを参考に自分なりに勉強してみます。