再配布 > 簡易マルチスレッド化

簡易マルチスレッド化するフィルタ

  • 作者:61 ◆s3BkVamfwY(スレ46≫61)氏
  • 2スレッド化、3スレッド化、4スレッド化の3種

name\ver. 001 002 003 004 005 006 007 008 009 011
banding10
nlsharpen
prefilter
lpfd_pp
deint2
DeDot/DeCross
unsymshrp2
delogo


  • 話題
    • スレ46
953 :名無しさん@お腹いっぱい。:2008/07/02(水) 18:47:32 ID:snGUN/m10
    Aviutl.exe直下のPluginsフォルダに入れても動作すると最高だけど
    贅沢言っちゃいけないか・・・

954 :名無しさん@お腹いっぱい。:2008/07/02(水) 19:14:58 ID:LX2eVjy20
    プラグインフォルダに環境Path通しても動作しないのかな?

956 :名無しさん@お腹いっぱい。:2008/07/02(水) 19:56:11 ID:snGUN/m10
    >>954
    環境pathの存在をすっこり忘れていた thx!
    動作はしたけどAviUtlはデフォでPluginsフォルダを見てくれるので
    対応してくれるとやっぱりうれしいかも

957 :名無しさん@お腹いっぱい。:2008/07/02(水) 20:54:43 ID:KZDir+9w0
    面倒ならWindows\System32に入れちゃえw 

974 :名無しさん@お腹いっぱい。:2008/07/03(木) 18:36:39 ID:zjo3aWZs0
    ちょっと疑問なんだけど、MT対応フィルタって、直前のフィルタがMT対応じゃなかったら
    意味ないよね?

975 :名無しさん@お腹いっぱい。:2008/07/03(木) 19:22:00 ID:dMoyGjUZ0
    MT対応じゃないフィルタが重ければCPUが遊んでしまう可能性はあるな。
    軽ければ大した影響はないんじゃないかな

976 :名無しさん@お腹いっぱい。:2008/07/03(木) 19:30:26 ID:R+GhxeZC0
    MTってマルチスレッドやんな?
    なかなか4コアに対応したフィルタってないからな・・・

977 :名無しさん@お腹いっぱい。:2008/07/03(木) 20:26:24 ID:Folm7UD20
    実装方法にもよるが2スレッドだけ用意するとか意識して最適化しない限りは
    スケーラブルに対応してくれるはず…

978 :名無しさん@お腹いっぱい。:2008/07/03(木) 21:16:47 ID:DgF6woqK0
    MT化の場合、スレッド生成、破棄コストを考慮しないといけない。
    小さい処理を多くMT化するより大きい処理を少なくMT化して
    スレッド生成、破棄の回数を減らさないと遅くなる場合がある。
    一番いいのはAVIUTL内部でフレーム毎に別スレッド処理するのがいいんだけど
    フレーム間相関があると使えないし、今までMT化してきたPLUGINが
    使えなくなる欠点がある。 
    • スレ47
27 :前スレ969:2008/07/05(土) 15:35:20 ID:mzDT7fmF0
    >>12
    一応全フィルタで落ちなくなった。
    ただ一つ問題が。
    ・全ての解像度にて
    Lanczos 3 lobed拡大縮小フィルタを使っているんだけど
    ⅰ)リサイズ(任意の解像度<ソース解像度)後にNthreads_for_XXXX_003フィルタをかけると
    画像の右と下に黒ベタが付加されてソースの元解像度に戻されてしまうようです。
     _____________________
    |                      |       |
    |  画像                 |       |
    |                      | 黒ベタ  |
    |                      |       |
    |                      |       |
    |                      |       |
    |                      |       |
    |_______________」        |
    |                               |
    |____________________ 」
    こんな感じ

28 :前スレ969:2008/07/05(土) 15:35:43 ID:mzDT7fmF0
    ⅱ)リサイズ(任意の解像度>ソース解像度)後にNthreads_for_XXXX_003フィルタをかけると
    リサイズ後の画像から元ソースの解像度分だけ左上から映っている状態になる
     _____________________
    |                      |       |
    |  映っている部分          |       |
    |                      |切り取り  |
    |                      |       |
    |                      |       |  ←ソース画像
    |                      |       |
    |                      |       |
    |_______________」        |
    |                               |
    |____________________ 」
    こんな感じ
    当然Nthreads_for_XXXX_003フィルタ後にリサイズフィルタをかければ問題ないです。

29 :名無しさん@お腹いっぱい。:2008/07/05(土) 16:17:22 ID:uW9xJEYp0
    >>28
    うちも似たような症状が出る。もともとの画像の左上にリサイズ後の画像が
    重なったみたいになる。Lanczos 3 lobed拡大縮小フィルタだけではなくAviutlの
    リサイズでも同じ。

33 :名無しさん@お腹いっぱい。:2008/07/05(土) 17:11:12 ID:nlSYd/sy0
    >>27>>28
    処理範囲をfpip->max_w, fpip->max_h で指定してたりしてな

    Cの超初心者が口を挟んでみる

34 :名無しさん@お腹いっぱい。:2008/07/05(土) 17:37:31 ID:R8JxPQEK0
    DLLを複数ぶら下げて力技でMT化はいいんだけど、スレッドの同期はどうしてんの?>前61

36 :前スレ ◆s3BkVamfwY :2008/07/05(土) 18:27:43 ID:bWybV6+T0
    >>33
    通常、
    プラグイン・フィルタのfunc_procが呼ばれた時点で、
    fpip->wとfpip->hに正しい値が入っています。

    しかし、
    GetFilterTable()で返すFILTER_DLL->flagsに
    FILTER_FLAG_NO_INIT_DATAを立てていると、
    fpip->wとfpip->hに正しい値が入っていません。

    私がfpip->ycp_editを用意しないだけだと思い込んでいたため、
    不正なfpip->wとfpip->hの値をターゲットのプラグイン・フィルタに
    渡してしまっていました。
    今回の修正では、fpip->wとfpip->hに正しい値をセットしてから、
    ターゲットのプラグイン・フィルタに渡すようにしました。

37 :前スレ ◆s3BkVamfwY :2008/07/05(土) 18:41:49 ID:bWybV6+T0
    >>34
    スレッドの同期というのが何を意図しているのか、よくわかりませんが、 

    AviUtlがフィルタを呼び出したスレッドではない、
    勝手に作った別スレッドで走ってるフィルタが、
    AviUtlを呼び返したら、どうするのか?

    ということでしょうか。

    AviUtlがフィルタを呼び出した時のスレッドが代理で呼び出すようにしてます。
    それだけでは安全ではないものもあると思うので、
    ターゲットのフィルタが呼び出している関数を確認しています。

48 :名無しさん@お腹いっぱい。:2008/07/05(土) 22:15:28 ID:iZBIWYPu0
    >>43
    スレッドて呼び出されたときに毎回作ってるの?
    実装の仕方知りたいからどれでも良いからソースか処理の概要キボンヌ

76 :前スレ ◆s3BkVamfwY :2008/07/06(日) 23:29:06 ID:DrbrkMW50
    >>48
    > スレッドて呼び出されたときに毎回作ってるの?

    いいえ。
    あらかじめ生成したスレッドを使っています。

    理由は2つ。

    1つは、速度のため。
    自分で確かめたわけではないので、どの程度なのか、わかりませんが、
    一般的にスレッドの生成・終了はコストのかかる処理なので頻繁に行うべきではないと言われています。

    もう1つは、無難にするため。
    ターゲットのプラグインが内部で何をやっているのか分からないため、
    もしターゲットのプラグインがスレッドに属するような何かを使っていたら、
    たとえば、func_initを呼び出したスレッドとは別のスレッドでfunc_procを呼び出す、
    あるいは、func_procを呼び出す度にスレッドが変ると、何か問題が発生する恐れがあります。

    > 実装の仕方知りたいからどれでも良いからソースか処理の概要キボンヌ

    すみません、私はまだ人様に教えられるレベルには達していません。



  • 個人HPマダァ-? (・∀・ )っ/凵⌒☆チンチン -- 41991 (2008-07-10 12:08:32)
名前:
コメント:

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2008年07月12日 00:10
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。