Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ ibs_g3expand1d_open(3X) — NEWS-os 4.2.1R

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

libibs(3X)

ibs_encode(3X)

ibs_getioerror(3X)

IBS_EXPAND(3X)  —  NEWS-OS Programmer’s Manual

名称

ibs_g3expand1d_open, ibs_g3expand1d, ibs_g3skip1d, ibs_g3expand2d_open, ibs_g3expand2d, ibs_g3skip2d, ibs_expandtiff_open, ibs_expandtiff, ibs_g4expand_open, ibs_g4expand, ibs_exp_getworksize − 圧縮データの復元を行う

形式

ibs_g3expand1d_open(iw, x, w, flag, work, inf, inarg, inbuf, inbufsize, outf, outarg)
int iw, x, w, flag;
int ∗work;
int (∗inf)();
int inarg;
char ∗inbuf;
int inbufsize;
int (∗outf)();
int outarg;

ibs_g3expand1d(imgadr, work)
char ∗imgadr;
int ∗work;

ibs_g3skip1d(work, pnbyte)
int ∗work;
int ∗pnbyte;

ibs_g3expand2d_open(iw, x, w, flag, work, inf, inarg, inbuf, inbufsize, outf, outarg)
int iw, x, w, flag;
int ∗work;
int (∗inf)();
int inarg;
char ∗inbuf;
int inbufsize;
int (∗outf)();
int outarg;

ibs_g3expand2d(imgadr, work)
char ∗imgadr;
int ∗work;

ibs_g3skip2d(work, pnbyte)
int ∗work;
int ∗pnbyte;

ibs_expandtiff_open(iw, x, w, flag, work, inf, inarg, inbuf, inbufsize, outf, outarg)
int iw, x, w, flag;
int ∗work;
int (∗inf)();
int inarg;
char ∗inbuf;
int inbufsize;
int (∗outf)();
int outarg;

ibs_expandtiff(imgadr, work)
char ∗imgadr;
int ∗work;

ibs_g4expand_open(iw, x, w, flag, work, inf, inarg, inbuf, inbufsize, outf, outarg)
int iw, x, w, flag;
int ∗work;
int (∗inf)();
int inarg;
char ∗inbuf;
int inbufsize;
int (∗outf)();
int outarg;

ibs_g4expand(imgadr, work)
char ∗imgadr;
int ∗work;

ibs_exp_getworksize(w, flag, mode)
int w, flag, mode;

解説

ibs_g3expand1d_open 、 ibs_g3expand1d 、 ibs_g3skip1d は一次元符号化方式による圧縮符号をイメージデータに復元します。

ibs_g3expand2d_open 、 ibs_g3expand2d 、 ibs_g3skip2d は二次元符号化方式による圧縮符号をイメージデータに復元します。

ibs_expandtiff_open 、 ibs_expandtiff は TIFF Data Compression Scheme 2 による圧縮符号をイメージデータに復元します。

ibs_g4expand_open 、 ibs_g4expand は高能率二次元符号化手法による圧縮符号をイメージデータに復元します。

たとえば、二次元符号化方式の復元の場合、 ibs_g3expand2d_open を呼んでから、1 行ごとに ibs_g3expand2d を呼びます。 このとき、復元処理および結果は符号データ作成時の K パラメータには依存しません。
また、フィルビットの有無にも依存しません。

一次元符号化方式、あるいは二次元符号化方式で、圧縮符号の誤りによって エラーになってしまったときには、 ibs_g3skip1d または、 ibs_g3skip2d を呼ぶことによって、次に復元可能な行まで入力の圧縮符号をスキップさせ、 復元を続けることができます。

ibs_g3expand1d_open 、 ibs_g3expand2d_open 、 ibs_g3expandtiff_open 、 ibs_g4expand_open は、 復元を行うために必要な変数をセットします。 iw 、  x 、 w は復元されたデータを格納する領域を指示します。
iw はイメージ幅 (ドット)です。
x は行の中で実際にデータが置かれる位置を左端を 0 として ドット単位で指示します。 w はイメージデータの長さ(ドット)です。 どのような場合でも x  + w が iw をこえてはいけません。
flag は符号データのビットオーダの指定と iw、imgadr に ついて使用します。
flag の最下位ビット(ビット 0)に 0 が指定された場合は、 符号データは LSB (Least Significant Bit) ファーストとして扱われます。 1 が指定された場合は、符号データを MSB (Most Significant Bit) ファーストとして 扱います。
flag のビット 1 が 1 のときには、iw は 8 の倍数が 許され、後述する imgdr は奇数アドレスが許されます。 ビット 1 が 0 のときは、iw は 16 の倍数でなければならず、 imgadr は偶数アドレスでなければなりません。
なお、ファクシミリにおいてはビットオーダは LSB ファーストです。
またこれは outf にもそのまま渡されます。
work は内部で使う作業領域で、 関数 ibs_exp_getworksize によって得られる値より大きな 領域を確保しておかなければなりません。
この作業領域 は復元がすべて終わるまで変更してはいけません。

inf、 outf は、復元を行うときにデータの入出力関数に使用する関数へのポインタです。 outf には、NULL を指定することができ、その場合にはデフォルトの出力関数が 使われます。 この場合、入力関数の形式や内部表現についての知識は必要有りません。
inbuf は符号データを入れるバッファを指示します。 また、 inbuf は偶数アドレスになければなりません。
inbufsize は inbuf の長さを指示しますが、これは 4 バイト以上なければなりません。
inarg 、 outarg は入出力関数 inf 、 outf にそのまま渡されます。

inf は符号データを読み込むための入力関数です。 入力関数 inf は次のような形をしていて、リターン値は読み込んだ長さで、 エラーのときは負でなければなりません。

int (∗inf)(arg, buf, size)
int arg;
char ∗buf;
int size;

引数はそれぞれ ibs_g3expand1d_open 、 ibs_g3expand2d_open 、 ibs_g3expandtiff_open 、 ibs_g4expand_open で設定されたものが渡されます。 arg には inarg がそのまま渡されます。 buf には inbuf がそのまま渡されます。 size には inbufsize がそのまま渡されます。
buf から size バイトの長さのバッファがあります。

outf は変化点の配列をイメージデータに復元して、 書き出すための出力関数です。 outf に NULL が指定された場合、デフォルトの関数 ibs_decode が呼ばれます。
出力関数 outf は次のような形をしていて、 負の値ならエラーとなるようなリターン値を持たなくてはなりません。

int (∗outf)(outarg, imgadr, iw, w, x, sline, flag)
int outarg;
char ∗imgadr;
int iw, w, x;
int ∗sline;
int flag;

outarg 、 iw 、 w 、 x 、 flag は ibs_g3expand1d_open 、 ibs_g3expand2d_open、 ibs_g3expandtiff_open 、 ibs_g4expand_open で設定されたものが渡されます。
imgadr は ibs_g3expand1d 、 ibs_g3expand2d 、 ibs_g3expandtiff 、 ibs_g4expand で設定されたものが渡されます。
sline は変化点の配列を指示します。 これは、( w + 2 ) ∗ 4 バイトの大きさを持っています。 また、この関数の中で sline については何も変更してはいけません。
変化点については、 ibs_encode あるいは、 ibs_decode を参照してください。

ibs_g3expand1d、 ibs_g3expand2d 、 ibs_expandtiff 、 ibs_g4expand は実際に 1 行分の復元を行います。 ここでは、符号データが足りなくなるたびに入力関数 inf が呼ばれます。
1 行分の復元が終了すると出力関数 outf が呼ばれます。
imgadr が 0 のときには 1 行分の復元が終わっても、 出力関数を呼びださずに戻ります。 imgadr は flag の bit 1 が 1 のときはどのようなアドレスでも、 許されますが、bit 1 が 0 のときには、偶数アドレスしか許されません。

ibs_g3expand1d 、 ibs_g3expand2d で復元に失敗したときには、それぞれ ibs_g3skip1d 、 ibs_g3skip2d 呼ぶことによって次に復元可能な行まで入力の圧縮符号をスキップさせます。 エラーのない状態で呼び出されたときでも、必ず、次に復元可能な行まで 入力の圧縮符号をスキップさせます。
pnbyte はスキップした長さをバイト単位で返します。

ibs_exp_getworksize は work に必要な領域の大きさを返します。 たとえば、大きさの異なるイメージを扱うときには得られた値の最大値を 使用しなければなりません。 現在のバージョンでは (( w + 2) ∗ 8) + 256 が返されます。

リターン値

ibs_g3expand1d_open、 ibs_g3expand2d_open、 ibs_expandtiff_open、 ibs_g4expand_open では、正常に終了したときは 0 、 パラメータにエラーがあったときは −1 が返されます。
inf にエラーが生じたときは −2 が返されます。

ibs_g3expand1d、 ibs_g3expand2d、 ibs_expandtiff 、 ibs_g4expand では、 正常に終了したときのリターン値は iw / 8 です。 RTC、 EOFB まで復元が達したときは 0 を返します。
ibs_g3skip1d 、 ibs_g3skip2d での正常に終了したときのリターン値は、スキップした行数です。
符号データが正しくない場合、 flag の bit 1 が 0 で imgadr が偶数アドレスにない場合 は −1 が返されます。
inf にエラーが生じたときは −2 が返されます。 outf にエラーが生したときは −3 が返されます。
また、作業領域 が破壊されている場合は −4 を返します。
非圧縮モードを検出したときは −6 が返されます。

inf 、 outf で生じたエラーについては ibs_getioerror を呼ぶことによって何が返されたか知ることができます。

関連ファイル

/usr/sony/lib/libibs.a

関連事項

libibs(3X), ibs_encode(3X), ibs_getioerror(3X)

NEWS-OSRelease 4.2.1R

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026