2019/03/25

ディザリングいろいろ

dfttestを弄っていて、floyd-steinbergってSIMD化しにくいよね、とか思ったので他のditherアルゴリズムを調べてみました。
https://ja.wikipedia.org/wiki/ディザ
https://en.wikipedia.org/wiki/Dither (代替日本語と同じだけど、Gradient-based が追加されている)

説明とかソースコードいろいろ
http://www.tannerhelland.com/4660/dithering-eleven-algorithms-source-code/
そしてgoogle先生に翻訳してもらった
日本語訳

 ふむ・・・

2019/03/23

それ何て無理ゲー?

if (q == 112) q = 0;
else if (q == 99) q = 1;
else if (q == 110) q = 2;
else if (q == 98) q = 3;
else if (q == 117) q = 4;
else if (q == 108) q = 5;
else if (q == 104) q = 6;
else

・・・というコードを読んで、
if (q == 112) q = 0; //p
else if (q == 99) q = 1; //c
else if (q == 110) q = 2; //n
else if (q == 98) q = 3; //b
else if (q == 117) q = 4; //u
else if (q == 108) q = 5; //l
else if (q == 104) q = 6; //h

と気づかなければ解けないという無理ゲー。
いや、まだ解いてないけど。

あとは45で"-"、43で"+"

いや、せめてhexで書こうよ・・・

2019/03/11

簡単に高速化できる方法

ネットワーク上のファイルに対して読み書きするとHDD上と比べてすごく遅くなります。

というわけでメインマシンから鯖上のファイルをエンコードするとき、無音検出に使っているfaad(mod)がやたらと遅いのが気になったのでソースから再コンパイルして調整してみました。

DGIndexの高速化で使ったsetvbufが手っ取り早いんじゃね?と思ったので適用。
 setvbuf(*FILE, NULL, _IOFBF, 131072);
とか書くだけです。

2019/03/02

DGIndexでd2vを生成する処理ってなんか遅くないですか?

はたと、ファイルのインデックス処理をさせるだけなのに、100MB/s程度しか処理してくれないのはなんで?と疑問に思ったので調べてみました。

で、GOPの先頭のアドレスを記憶する(というかtelli64関数)のに尋常じゃなく時間を食っているということが分かったので、
とりあえずそこを必要な時にだけやるようにしたら、300MB/s程度までは出るようになりました。

が、ファイル構造を理解していないので、パケットが188じゃない時にどうするのかを悩み中・・・

と見ていたら、PS(DVDとか?)の時はGOPを開始するときしか処理してない。
TS(*.ts)対応を追加したときにさぼった?のか、なんか理由があるのか・・・まだちゃんと見切れていません。