2013年2月25日月曜日

AVGreenScreenPlayer 3

GSPlayerView.m の冒頭で,GSPlayerViewクラスのプライベートなインスタンス変数が定義されています.

特に注目しておきたいのが,

CVDisplayLinkRef _displayLink;

です.CVDisplayLinkRef というのは Core Video Display Link へのリファレンスです.ではこの Core Video Display Link とは何かというと,昔のvsync割り込みに相当するシステムです.その実態は独立したスレッドで,フレームのリフレッシュが必要になるたびに登録されたコールバック関数を呼び出します.

Apple は Core Video をC言語APIとして設計したため,Display Link から呼び出せるのはC言語の関数(つまり普通のコールバック)だけです.Objective-C に慣れてしまうと,継承やデリゲートを使いたくなるところですが,そのようなAPIは用意されていません.

それではあまりにも不便なので,Display Link のコールバック関数はvoidポインタを引数として受け取れます.実際にCocoaアプリから Core Video を使う場合はこのvoidポインタを使ってObjective-Cインスタンスを渡すことになります.

0 件のコメント:

コメントを投稿