画像入力モジュール

概要

exloupeの静止画・動画入力用の拡張モジュールです
windows用は.wim、linux用は.limの拡張子を持った共有ライブラリーとして作成します

ビルド方法

画像形式 foo に対応するモジュール(foo.wim, foo.lim)を foo.c からビルドするコマンドを示します

windows(VisualStudio) ※64bit版としてビルドする必要があります
cl /LD /Fefoo.wim foo.c

linux(GCC)
gcc -O -shared -fPIC -o foo.lim foo.c

エクスポート関数

モジュールには以下のエクスポート関数が必須です

void em_info(const char ***ext, unsigned int *type)

引数

const char ***ext出力拡張子のリストを受け取るポインタ
unsigned int *type出力下記ビットフラグを受け取るポインタ

戻り値

無し

動作

画像フォーマットの基本情報を開示する

拡張子のリストの最後はNULL
pngのように拡張子が1つの場合は
static const char *list[] = {"png", NULL};
*ext = list;
jpg jpegのように複数の拡張子に対応する場合は
pngのように拡張子が1つの場合は static const char *list[] = {"jpg", "jpeg", NULL};
*ext = list;

タイプは以下のフラグから対応するもの全てのOR値を戻す

0x00018bitグレースケール
0x000216bitグレースケール
0x000432bitグレースケール
0x000824bitRGB
0x001048bitRGB
0x002096bitRGB
0x0040192bitXYZ
0x0100静止画
0x0200マルチページ静止画
0x0400動画

静止画/マルチページ静止画/動画のいづれか1つと
8bitグレースケール~192bitXYZまでのいづれか1つは
最低限ONにしなければならない

void *em_open(const char *path, unsigned short *bpp, size_t *w, size_t *h, size_t *page, size_t *ms)

引数

const char *path入力画像ファイルのパス
unsigned short *bpp出力1ピクセル辺りのビット数を受け取るポインタ
size_t *w出力水平方向画素数を受け取るポインタ
size_t *h出力垂直方向画素数を受け取るポインタ
size_t *page出力1~.画像枚数を受け取るポインタ
size_t *ms出力0.静止画 1~.動画のフレーム間隔(ms)

戻り値

!0ファイルハンドル
0失敗

動作

ファイルを読み込むために開く

pageはシングルページ静止画の場合は1固定
マルチページ静止画及び動画の場合は枚数
msは画像及びマルチページ画像の場合は0で動画の場合はフレーム間隔の時間

対応しているbppは以下の7種類
8.8bit グレースケール
16.16bit グレースケール
32.32bit グレースケール
24.24bit RGB
48.48bit RGB
96.96bit RGB
192.192bit XYZ

int em_read(void *fh, void *buff, size_t page)

引数

void *fh入力ファイルハンドル
void *buff出力画像出力先のポインタ
size_tpage入力取得する画像のページ番号(0~)
静止画の場合は0固定

戻り値

!0成功
0失敗

動作

ファイルから画像データを読み出す

buffにはem_openで取得した形式の画像1枚分の領域を用意する

void *em_create(const char *path, unsigned short bpp, size_t w, size_t h, size_t page, size_t ms)

引数

const char *path入力画像ファイルのパス
unsigned shortbpp入力1ピクセル辺りのビット数
size_tw入力水平方向画素数
size_th入力垂直方向画素数
size_tpage入力画像枚数 静止画は1 マルチページや動画で最終枚数不明の場合は0
size_tms入力動画のフレーム間隔(ms) 動画は1~ 静止画やマルチページは0

戻り値

!0ファイルハンドル
0失敗

動作

ファイルを書き出すために開く

msは画像及びマルチページ画像の場合は0で動画の場合はフレーム間隔の時間(ms)

対応しているbppは以下の7種類
8.8bit グレースケール
16.16bit グレースケール
32.32bit グレースケール
24.24bit RGB
48.48bit RGB
96.96bit RGB
192.192bit XYZ

int em_write(void *fh, const void *buff)

引数

void *fh入力ファイルハンドル
void *buff出力画像入力元のポインタ

戻り値

!0成功
0失敗

動作

ファイルに画像データを書き出す

buffにはem_openで取得した形式の画像1枚分のデータが入っている

int em_close(void *fh)

引数

void *fh入力ファイルハンドル

戻り値

!0成功
0失敗

動作

ファイルを閉じる

em_open/em_createのどちらでも途中の段階で呼ばれる可能性がある