付録 E、パート 4

付録 E: イメージ プラグインの追加」の続きです。 ## ライブラリ関数

IMF_CAPABILITY_ENTRY

定義

typedef struct imf_capability_entry

{

U_SHORT ice_code;

char *ice_name;

MSGCAT_DEFN ice_name_msg;

} IMF_CAPABILITY_ENTRY;

用途

この構造は IMF_CAPABILITY_LIST の単一のエントリを定義するために使用します。

修正される問題

次の表は、各フィールドについて説明したものです。

フィールド 修正される問題
imc_code

IMF_CAPABILITY LIST に定義されるすべての機能エントリの中で固有の 16 ビット数。この数字は imageReadOpenimageWriteOpen コードで使用され、ユーザが選択したリスト エントリを定義します。

imc_name

このリスト項目用にユーザ インタフェースに表示されるキャラクタ文字列

imc_name_msg

ice_name の国際化バージョン

IMF_CAPABILITY_LIST

定義

typedef struct imf_capability_list

{

int icl_default;

int icl_n_entries;

IMF_CAPABILITY_ENTRY *icl_entries;

} IMF_CAPABILITY_LIST;

用途

IMF_CAPABILITY レコードが IMF_CAPABILITY_TYPE_LIST タイプである場合、imc_value フィールドは、IMF_CAPABILITY_ENTRY レコードの配列である icl_entries ポインタの IMF_CAPABILITY_LIST レコードを示します。

説明

次の表は、各フィールドについて説明したものです。

フィールド 修正される問題
icl_default

既定リスト エントリの ice_code

icl_n_entries

リスト内のエントリ数

icl_entries

エントリのリスト

IMF_CAPABILITY_NUMBER

定義

typedef struct imf_capability_number

{

float icn_default;

BOOLEAN icn_minimum_dfnd;

float icn_minimum;

BOOLEAN icn_maximum_dfnd;

float icn_maximum;

floay icn_increment;

} IMF_CAPABILITY_NUMBER;

用途

IMF_CAPABILITY レコードのタイプが IMF_CAPABILITY_TYPE_NUMBER である場合、この構造は既定値と機能で許可される値の範囲を定義するために使用します。

説明

次の表は、各フィールドについて説明したものです。

フィールド 修正される問題
icn_default

この番号の機能の既定値

icn_minimum_dfnd

最小値を定義するかどうかを示します。定義する場合は TRUE、定義しない場合は FALSE です。

icn_minimum

最小値。icn_minimum_dfnd に TRUE が設定されている場合にのみ適用されます。

icn_maximum_dfnd

最大値を定義するかどうかを示します。定義する場合は TRUE、定義しない場合は FALSE です。

icn_maximum

最大値。icn_maximum_dfnd に TRUE が設定されている場合にのみ適用されます。

icn_increment

スライダまたはサムホイールによって使用されるインクリメント

icn_minimum_dfndicn_maximum_dfnd が両方とも TRUE である場合は、テキスト フィールドの横にスライダが表示されます。それ以外は、サムホイールが表示されます。

IMF_CAP_SETTING

定義

typedef struct imf_cap_setting

{

U_SHORT imcs_code;

union

{

float imcs_number;

int imcs_list;

} imcs_value;

} IMF_CAP_SETTING;

用途

この構造は、ファイルを開くときに機能の現在の設定をプラグインに渡すために使用します。

フィールド 修正される問題
imcs_code

設定の imc_code

imcs_number

機能が IMF_CAPABILITY_TYPE_NUMBER である場合の値。

imcs_list

機能が IMF_CAPABILITY_TYPE_LIST である場合の値。これはリストのゼロベースのインデックスです。

IMF_IMAGE

定義

typedef struct

{

int usage;

IMF_COLOR_RESPONSE curve;

FMT_ASPECT_INFO aspect;

WINDOW_I window;

WINDOW_I active;

int chan_config;

int chan_orient;

char *chan_format;

int chan_count;

int chan_type;

int chan_bits;

char *matte_format;

int matte_count;

int matte_type;

int matte_bits;

char *aux_format;

int aux_count;

int aux_type;

int aux_bits;

char *index_format;

int index_count;

int index_type;

int index_bits;

} IMF_IMAGE;

用途

IMF_IMAGE はファイル内の単一イメージの内容を定義します。

説明

次の表は、各フィールドについて説明したものです。

フィールド 修正される問題
usage

イメージ タイプを記述するビット フィールド: 任意のイメージ タイプの場合は IMF_C_IMAGE_ANY。汎用イメージの場合は IMF_C_GENERIC (imf__init_ifd で設定される既定セット)。ルックアップ テーブルベースのイメージの場合は IMF_C_INDEX_LUT

curve

カラー補正情報

aspect

イメージのアスペクト情報

window

ゼロベースの数字を使用するイメージ ウィンドウの境界

active

アクティブ ウィンドウの境界

chan_config

チャネル平面。このフィールドは、スキャンラインの読み取り関数と書き込み関数にスキャンライン データを渡す方法に影響を与えます。2 つのオプションがあります。

  • 赤、緑、および青の IMF_C_PLANAR_CONTIGUOUS は、1 つの大規模なスキャンライン バッファに収められます。値は、R、G、B、R、G、B という順序で配置されます。または、
  • 赤、緑、青の IMF_C_PLANAR_SEPARATE は個別の配列収められます(標準使用)。
chan_orient

チャネル方向: 下から上の順序の場合は IMF_C_ORIENT_BOT_LEFT。上から下の順序の場合は IMF_C_ORIENT_TOP_LEFT

chan_format

カラー チャネルのフォーマット

chan_count

カラー チャネルの数

chan_type

カラー チャネルの格納タイプ: 正の整数の場合は IMF_C_INTEGER (imf__init_ifd によって割り当てられた既定値)。単精度 float 値の場合は IMF_C_FLOAT。倍精度 double 値の場合は IMF_C_DOUBLE

chan_bits

カラー チャネル値単位のビット数

matte_format

マット チャネルのフォーマット

matte_count

マット チャネルの数

matte_type

マット チャネルの格納タイプ: 正の整数の場合は IMF_C_INTEGER (imf__init_ifd によって割り当てられた既定値)。単精度 float 値の場合は IMF_C_FLOAT。倍精度 double 値の場合は IMF_C_DOUBLE

matte_bits

マット チャネル値単位のビット数

aux_format

補助(z)チャネルのフォーマット

aux_count

(z)補助チャネルの数

aux_type

補助(z)チャネルの格納タイプ: 正の整数の場合は IMF_C_INTEGER (imf__init_ifd によって割り当てられた既定値)。単精度 float 値の場合は IMF_C_FLOAT。倍精度 double 値の場合は IMF_C_DOUBLE

aux_bits

補助(z)チャネル値単位のビット数

index_format

カラー インデックスのフォーマット

index_count

カラー インデックス イメージ データのチャネルの数

index_type

カラー インデックス データ チャネルの格納タイプ: 正の整数の場合は IMF_C_INTEGER (imf__init_ifd によって割り当てられた既定値)。単精度 float 値の場合は IMF_C_FLOAT。倍精度 double 値の場合は IMF_C_DOUBLE

index_bits

パレット インデックスのピクセル単位のビット数

IMF_INFO

定義

typedef struct

{

char *key;

char *handle;

BOOLEAN handle_complete;

char *name;

char *ext;

char *desc;

char *program;

char *machine;

char *user;

char *date;

char *time;

char *filter;

char *compress;

IMF_CAP_SETTING **settings;

BOOLEAN lut_exists;

IMF_LUT *write_lut;

int job_num;

int frame;

int field;

U_LONG init_flag;

COLOR_XYZ_3F red_pri;

COLOR_XYZ_3F green_pri;

COLOR_XYZ_3F blue_pri;

COLOR_XYZ_3F white_pt;

int count;

IMF_IMAGE *image;

int track_num_frames;

float track_frame_rate;

int track_start_frame;

int num_audio_tracks;

int num_video_tracks;

} IMF_INFO;

用途

イメージ ファイルを記述する情報を含みます。

修正される問題

次の表は、各フィールドについて説明したものです。

フィールド 修正される問題
key

プラグインの固有の識別子キー

handle

イメージのファイル名

handle_complete

handle を完全に構築するかどうかを示します。FALSE の場合は、プラグインが imf__build_handle を使用してファイル名の完全なパスを構築する必要があります。

name

イメージ ファイルの名前

ext

ファイル名の拡張子

desc

イメージ ファイル タイプの説明

program

イメージを作成したプログラム

machine

イメージが作成されたマシン

user

イメージを作成したユーザ

date

イメージの作成日付

time

ファイルの作成所要時間

filter

イメージで使用されるフィルタ機能

compress

イメージで使用される圧縮機能

settings

ユーザが設定した機能設定

lut_exists

ルックアップ テーブル(LUT)がスキャンライン バッファのイメージ データに使用される場合は TRUE です。データが RGB の場合は FALSE です。

write_lut

LUT のポインタ。パレットベースのイメージ ファイルを書き込むときにのみ使用されます。

job_num

ジョブのアカウント情報を処理します。

frame

フレーム番号

field

フィールド レンダリング フラグ

init_flag

コール側が IMF_info_init を起動したかどうかを示します。

red_pri

赤の彩度

green_pri

緑の彩度

blue_pri

青の彩度

white_pt

白の彩度

count

イメージ フィールドによって示されるイメージ サブ ヘッダの数

image

詳細なイメージ情報を含むイメージ サブ ヘッダの配列

track_num_frames

現在のトラックのフレーム番号

track_frame_rate

トラックのフレーム数/秒

track_start_frame

現在のトラックの 1 番目のフレーム番号

num_audio_tracks

現在のファイルのオーディオ トラックの番号

num_video_tracks

現在のファイルのビデオ トラックの番号

IMF_LUT

定義

typedef struct imf_lut

{

IMF_LUT_ENTRY *imu_lut;

int imu_maximum;

int imu_n_entries;

float imu_gamma;

} IMF_LUT;

用途

この構造はルックアップ テーブル(LUT)を定義します。

修正される問題

次の表は、各フィールドについて説明したものです。

フィールド 修正される問題
imu_lut

ルックアップ テーブルのエントリ

imu_maximum

各 LUT エントリが含むことができる最大値

imu_n_entries

imu_lut によって示される LUT エントリの数

imu_gamma

LUT エントリのガンマ値

IMF_LUT_ENTRY

定義

typedef struct imf_lut_entry

{

U_SHORT ile_red;

U_SHORT ile_green;

U_SHORT ile_blue;

U_CHAR ile_mode:7;

U_CHAR ile_transparent:1;

} IMF_LUT_ENTRY;

用途

この構造はルックアップ テーブルのエントリを定義します。

修正される問題

次の表は、各フィールドについて説明したものです。

フィールド 修正される問題
ile_red

このエントリの赤の値。

ile_green

このエントリの緑の値。

ile_blue

このエントリの青の値。

ile_mode

IMF_LUT_MODE_FREE エントリが未使用である場合。IMF_LUT_MODE_LOCKED エントリがロックされ、使用不可である場合。IMF_LUT_MODE_RESERVED エントリが予約され、使用不可である場合。IMF_LUT_MODE_USED エントリが使用中で、修正可能である場合。

ile_transparent

エントリが透明でない(たとえば不透明)場合は 0 に設定し、透明な場合は 1 に設定します。

IMF_OBJECT

定義

typedef struct imf_object

{

POINTER *data;

IMF_INFO info;

int access;

IMF_lutReadProc lut_read;

IMF_scanProc scan;

IMF_closeProc close;

IMF_playbackBindProc playback_bind;

IMF_playbackGotoProc playback_goto;

IMF_playbackPlayProc playback_play;

IMF_playbackParamsProc playback_params;

IMF_playbackStopProc playback_stop;

IMF_getFrameProc get_frame;

IMF_getRasterProc get_raster;

IMF_getRegionProc get region;

IMF_setFrameProc set_frame;

} IMF_OBJECT;

用途

この構造は、imageReadOpenimageWriteOpen を呼び出すときに使用します。

説明

次の表は、各フィールドについて説明したものです。

フィールド 修正される問題
data

イメージにコネクトするプライベート データ

info

イメージ ファイル情報

access

イメージ アクセス タイプ

lut_read

イメージ ファイルからルックアップ テーブル情報を読み出す関数

scan

スキャンライン アクセス関数

close

イメージ終了関数

playback_bind

NULL を設定します。

playback_goto

NULL を設定します。

playback_play

NULL を設定します。

playback_params

NULL を設定します。

playback_stop

NULL を設定します。

get_frame

NULL を設定します。

get_raster

NULL を設定します。

get_region

NULL を設定します。

set_frame

NULL を設定します。

プラグインのコンパイル

イメージ ファイル フォーマット プラグインを書き込むと、これをコンパイルして、Maya にロードできる共有オブジェクトを作成する必要があります。gcc コンパイラを使用したサンプルを構築するための、Makefile と buildconfig が Developer Kit に用意されています。Windows では、Visual C++ でイメージ プラグインを構築するためのソリューションとプロジェクト ファイルが用意されています。イメージ プラグインのサンプルを構築する前に、最初に MAYA_LOCATION を設定する必要があります。構築するプラグインは、Maya が新しいイメージ フォーマットにアクセスする前に、$MAYA_LOCATION/bin/plug-ins/image フォルダにコピーしてください。イメージ プラグインは、Maya にロードできるように用意されたコンパイラとリンカーのフラグを使用して構築する必要があります。