2016年7月31日日曜日

DCTFilter

数か月前にmukenさんから「DctFilterの64bit版書いてよ」と頼まれました。
DCT/iDCTはよくわからんのでその時は「後でね」とごまかしてたんですが、数日前に今度はよく知らない外国の人からメールで「64bit版書いてよ」とリクエストが来てしまいました。

ちょうどAvisynth+のレポに送ったPRが3つも貯まったまま放置されてる状態なので(ultimははよコミットなりリジェクトなりしろよ)、気分を変えようと書いてみることにしました。

とりあえずアルゴリズムは簡単に実装できそうでサンプルも豊富なLLMで、いろんなbit深度にいちいち対応するのもめんどいので整数近似はやらずに浮動小数点で処理することに決定。
(オリジナルのコードはxvidから持ってきたわけのわからんASM使ってるのでパス)
で、実際に書き始めたら二日ほどでなんとか出来上がりました。

ソースコード

バイナリ

なお、これはAvisynth+MT専用です。
Avisynth2.6では動きません。

それにしても毎度のことながら、一番時間かかるのがREADME書くことなのはなんとかならないものかしら…。

2016年7月24日日曜日

avs2pipemod その21

また更新です。
バージョン1.0.3になります。

ソースコード

バイナリ

- メモリーリーク?の修正
- バージョンリソースを追加

つい先日のAvisynth+の更新でログ出力機能が追加されました。
スクリプトにSetLogParams("stderr", LOG_INFO)と書いておけば、標準エラー出力にログが出るようになります。
"stderr"を"stdout"にすれば標準出力に、"ファイル名"とすればファイルに保存されます。
で、さっそく使ってみたところ"WARNING: A plugin or the host application might be causing memory leaks."とか表示されやがるんですな。
どうやらプラグインと違ってアプリケーションでは、PClipのインスタンスをクラスメンバーにしている場合は自分でデストラクタを呼ばないとこうなるらしい。
どのみちすぐexitしてしまうので実害はないとは思いますが、気持ちいいものでもないので修正しました。

あと、今回からバージョンリソースを追加したので、Explorerでバージョンが分かるようになりました。
VS2015だとタダでリソースエディタが使えるのを思い出したので付けてみたわけですね。
プラグインとかはどーするかな…。

2016年7月22日金曜日

avs2pipemod その20

1件バグがみつかったので更新しました。
バージョンは1.0.2になります。

ソースコード

バイナリ

- infoで表示されるv:durationの計算が間違ってたのを修正。
- infoでavisynthのVersionNumberの他にVersionStringも表示されるようにした。

本来durationの計算は num_frames * fps_denominator / fps_numerator ですが、これを num_frames * fps_numerator / fps_denominator に間違えてました。ごめん。

もう一つの変更点について
その18で書き忘れてたのですが、1.0.0からavs2pipemodには'-dll'というオプションが追加されました。
これは複数のavisynth.dllを使い分けるために用意したものです。
たとえば
avs2pipemod -info -dll="C:/hoge/fuga/avisynth.dll" script.avs
とやれば、avs2pipemodは'C:\hoge\fuga\'にあるavisynth.dllを使います。
あと、うちのC:\Windows\SysWOW64には'AviSynth.dll'の他に'AviSynth.dll_official260.esc'とか'AviSynth.dll_official261a.esc'なんてファイルも存在したりするのですが、これも
avs2pipemod -benchmark -dll="avisynth.dll_oficial261a.esc" test.avs
のようにすれば、そちらのDLLを使うようになります。
-dllを未指定の場合は今まで通り、Pathの通ったところにあるAviSynth.dllを使います。
で、VersionNumberだけだとどれも2.600としか表示されないのでもうちょっとわかりやすくする必要があったのですね。
まあ、そういうことです。

2016年7月18日月曜日

avs2pipemod その19

avs2pipemodにバグがあったので更新しました。

ソースコード

バイナリ

変更点
- rawvideo及びy4m出力の際のチェックが間違っていたのを修正

staxripの中の人からバグレポ貰ったので直しました。
なんつーかたいへん間抜けかつありがちなバグでした。
1.0.0を使ってる人は更新してください。

2016年7月10日日曜日

avs2pipemod その18

avs2pipemodを更新しました。

ソースコード

バイナリ

変更点
- avisynth_c.hを使うのをやめてavisynth.hを使うようにした。
- C99をやめてC++で書きなおした。
- VisualStudio2015以降(または新しめのインテルのコンパイラ)でしかビルドできなくなった。
- avisynth2.5xのサポート終了。
- WindowsXPのサポート終了。
- x264bdとx264rawが使えなくなった。
- Avisynth+の16bit/32bitフォーマットに対応した。
- Y4M出力でffmpegの拡張を使えるようにした。

上記のようになんかガラッと変わったように見えますが、Avisynth+MTの最新版を使っている人以外にはどうでもいい変更ばっかでもあります。
まあ、すべてはavisynth_c.hが悪いんです。

というわけで、Avisynth+MTの新しいの使ってるよって人は更新してみたらいかがでしょうか。

もしx264bdとx264rawもまだいるよって人はパッチ書いて送ってね!

2016年7月6日水曜日

いろいろ更新

Avisynth+MTの開発が数日前に再開され、現在r2003がテスト用として公開されています。

で、いろいろ変更が入ったんですが、本家2.6.1の更新を取り込んだ分でAvisynth+のほうだけAPIブレイクが起こり、自分が公開しているプラグインのうちの大部分が影響をもろに受けてしまうことがわかりました。
なんとロードするだけでavisynth全体がまともに動かなくなってしまうという…。

というわけで以下のプラグインを更新しました。

RawSource26
PlanarTools
yadifmod2
TMM2
CombMask
TCannyMod
VapourSource

それぞれリリースページに飛びますので、Avisynth+MTを使ってる人は最新のやつに更新してください。
なお、本家Avisynth2.6しか使ってない人は別に更新する必要はありません。

それにしてもとうとうAvisynth+も8ビットの枠から飛び出してしまいました。
プラグイン書く人としては10bitだの16bitだのfloatだのはどうやって出力を検証したもんだかで色々頭が痛いのですががが…。