QuartzComposerのファイルのデュレーションが30秒な件など
ElisColorsのα版が出たので試しています。以下、いくつか気づいた事など。*1
QuartzComposerのファイルのデュレーションが30秒になるのはQuickTimeの仕様によるものだと思いますが、http://developer.apple.com/mac/library/technotes/tn2005/tn2145.html に書いてあるように NSUserDefaults を使って変更できます。
JavieでもQuartzComposerのファイルは読めるのですが*2、次のようにして300時間にしています。
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; [defaults setInteger:300*60*60 forKey:@"QuartzComposerDefaultMovieDuration"];
その上で、タイムラインに載せたときの初期状態が1分でトリミングされた状態になるようにしています。
私の環境だと微妙に重いかも
再生中、数秒毎に少し引っかかる感じです。再生中のビデオメモリの使用量を見てみると結構大きく変動しているようで、引っかかりとビデオメモリの変動のタイミングが一致している感じでした。
↓の赤いグラフがビデオメモリの使用量です。水色はGPUの負荷。
使用した素材は、Apple Intermediate Codecでエンコードした1280x720/59.94fpsの動画です。
【追記】
その後もう少し詳しく検証してtwitterで@yanagiaに報告しておいたのですが、バージョン0.2で直ったようです。
MacでGPUを使うプログラムを書く人の参考になるかもしれないので、そのときの発言を引用しておきます。
rakusan @yanagia ビデオメモリ-メインメモリ間でページングが発生してる模様です http://tinyurl.com/y9x96v8 |
rakusan @yanagia Surface Page Off Data (Non-AGP) と Surface Page On Data (Non-AGP) の値 |
rakusan @yanagia これらの値の説明 http://tinyurl.com/y9z2dto |
rakusan @yanagia 1280x720/60fpsではページング発生しましたが640x360/30fpsでは発生しませんでした。でかい動画だとビデオメモリが溢れてメインメモリに退避されてるようです。 |
rakusan @yanagia もしかしてGCが走るまでの間、使用済みのテクスチャが生きたままだったりしますかね? だとしたら、テクスチャだけはGCに頼らずに破棄してGCは今まで通りにすればウマーな気が |
yanagia @rakusan 検証サンクスです。コード調べてみます。 |
yanagia なん……だと…… http://bit.ly/T7m11 |
yanagia たぶん、CIImageインスタンスだけを手動メモリ管理すればページングは発生しない。でも部分的に手動でメモリ管理するってどうやるんだろう。 |
yanagia CocoaのAPIだけじゃGCの細かい制御ができない気がしてきた。 |
yanagia VRAMを食い尽くす理由がわかった。 Core VideoはそもそもGCと一緒に使っていいフレームワークじゃなかった(回収できないオブジェクトがある)。……ふざけんなAppleって感じだけど、この壁を乗り越えればまたElis Colorsが有名になるね。やってやろうじゃないの。 |
yanagia Core Video関係のメモリもFull GCすると回収されている。でも1フレームごとにFull GCするのはアレすぎるよね。 |
yanagia どうにかした。[方法] トップレベルのViewからCore Videoフレームへの参照を切る。 フレーム毎にobjc_collect(OBJC_RATIO_COLLECTION); 参照を復元。 これでCPU使用率50%。ページングも起きてない。これでGCが使える。 |
再生中のパラメータ変更の記録について
再生中に行ったパラメータ変更をアニメーションとして記録する機能ですが、記録した後の微調整が簡単にできるといいと思います。今のままだとまだ「ちょっと目を引く機能」程度ですが、微調整が簡単にできたらかなりヤバいですよねこれ。
Javieでも再生しながらのパラメータ変更はできるんだけど、アニメーションとして記録することは今のところできません。元々は記録も考えていたんだけど、単純に記録するだけだと大量のキーフレームが打ち込まれることになるので、記録した後の微調整がしにくくてダメかなーと考えてやめまみた。「少ないキーフレーム+ベジェ」で近似するようにすればいいのかなーなどと考え中ではありますが。