スケルトン


スケルトンプログラムとは?

スケルトンとは「骨組み」という意味の英語で、ソースコードのひな形をスケルトンプログラムと言う。
どのようなプログラムでもほとんど同じコードのなる部分があるので、そこをあらかじめ作成しておいたものになる。

SDKの中のtemplateフォルダにもSketlonが用意されているが、使いやすいように僕は新規に作成している。

僕のスケルトン

一応僕が使っているスケルトンは以下のもの(随時作り変えているので注意)

  • FsPluginSkeleton.zip


  • 基本的にはSDK付属のサンプルを少し直しただけだが、DEBUG用とRelease用の構成プロパティを用意してある。
    あと、通常のSDKではピクセルのアクセスには、ITERATEコールバックを使うことが推奨されているが、 僕は直に画像配列にアクセスするやり方をしているので、それがしやすいようにしてある。

    僕のスケルトン


    ファイル構成

    僕の使っているスケルトンのファイルは以下のとおり。
    PluginSkeleton.h
    プラグインのHesder。各種の定義、ヘッダーのインクルード等。
    PluginSkeleton.cpp
    プラグインの本体。EntryPointFunc関数や主だった関数がある。
    PluginSkeletonPiPL.r
    PiPLリソースの定義ファイル。
    PluginSkeleton_Strings.h
    文字関係のHeader。エフェクトコントロールやAboutダイアログで表示される文字列を定義。
    PluginSkeleton_Strings.cpp
    文字関係
    win/PluginSkeleton.sln
    VS2005のソリューションファイル
    win/PluginSkeleton.vcproj
    VS2005のプロジェクトファイル
    win/PluginSkeletonPiPL.rc
    リソースの中間ファイル。無くてもPluginSkeletonPiPL.rから作られる。
    win/PluginSkeleton.dsp
    VC++6用のプロジェクトファイル
    win/PluginSkeleton.dsw
    VC++6のワークスペースファイル

    構造体

    扱いやすいように、PluginSkeleton.hで以下の構造体を定義している。

    //AfterEffectsの情報をまとめた構造体
    typedef struct{
      PF_InData   *in_data;
      PF_OutData    *out_data;
    
      PF_EffectWorld  *input;
      PF_EffectWorld  *output;
      PF_PixelPtr   inData;     //入力画像のアドレス  
      PF_PixelPtr   outData;    //出力画像のアドレス  
      long      width;          //対象画像の横幅(pixel)
      long      height;         //対象画像の縦  幅(pixel)
      
      long      inWidth;        //入力画像の横幅の実サイズpixel)
      long      outWidth;       //出力画像の横幅の実サイズpixel)
      long      offsetInWidth;  // inWidth - width  補正サイズ  
      long      offsetOutWidth; // outWidth - width
      long      Frame;          //描画中のフレーム(0スタート)
      PF_Boolean    is16Bit;    //モードが16BitならTRUE
      unsigned char reserve1;
      unsigned short  reserve2;
      long      reserve3;
      long      reserve4;
      /* 無理やり64byteにする*/
    } FsAEParams;
    	
    僕は画像配列に直接アクセスするやり方を好んでいるので、アドレス計算に必要なパラメータをあらかじめ 計算しておいてこの構造体に収めている。

    //プラグイン独自のパラメータを集めた構造体
    typedef struct{
      PF_Fixed      value_fixed;
      long          value_add;
      PF_Fixed      value_rot;
      boolean       value_boolean;
      PF_Pixel      value_color;
      PF_FixedPoint value_pos;
      PF_Fixed      value_pop;
      PF_Boolean    value_rowbyte_boolean;
    } MY_Params;
    	
    この構造体は、プラグイン独自の情報を収めている。
    つまり、作るプラグインによって内容は変わる。

    -index-