ClutterGst Memory Leak

Y901x beta2 にトンデモなバグがあった。
ネットで拾った 2560×1440 の超デカイ動画を再生してみたら。

memory_leak

あっというまにメモリーリーク。
小さめのファイルでのテストだと気が付かなかったよ。

ファイルサイズより使用メモリのほうが大きいのでバッファではない。
Totem では問題無し、原因はドコだろう。

Clutter, ClutterGst 側のバグかと検索検索。
皆ビデオドライバーが原因ということで終わっている、違うみたい。

自分がやった処理を一つづつコメントアウトして何が悪いか地味に探す。
見つかった、細かい理由は解らないけどそういうことだったのかよ。

out_new_frame

ClutterGstPlayer の ‘new-frame’ シグナルを処理するとこうなるようだ。
void シグナルなので打つ手無し、つまりこのハンドラは使えない。

タイマーを使わずにイケたと思ったんだけーがなぁ。
素直にタイマー処理に、せっかくなので GLib でなく Clutter のを使う。

// Timer
let timeline = new Clutter.Timeline({duration:200});
timeline.connect("new-frame", Lang.bind(this, function() {
    // Timer Handler
}));
this.timer = new Clutter.Score({loop: true});
this.timer.append(null, timeline);
//
// etc...
//
this.timer.start();

これも ‘new-frame’ だがこっちは単なるタイマー。

ハンドラをこちらに移して再び再生。
Totem と同じメモリ使用量になった、なんとか解決。

もう少し弄って明日にでも beta3 に、完成は遠いかも。
ブログネタは Mac プログラミングと交互の予定が狂いまくり。