概要
SophiaSCALE BREW 対応版は、BREW アプリで使用するデータを圧縮するためのものです。
内容
配布されるパッケージには、以下のものが含まれます。
- SophiaScale.h (インクルードファイル)
- ScaleOptions.h (圧縮パラメータ)
- ScaleDecorder.c (伸張ルーチン)
- ScaleEncorder.c (圧縮ルーチン)
- ScaleTest.c (テストプログラム)
- Makefile (コンパイル用メイクファイル)
- Readme.txt (マニュアル)
動作確認環境
コンパイラ: RVCTB 1.2 Build 848
使用方法
- SophiaScale.h をインクルードします。 *ライブラリを使用するのに必要なのは SophiaScale.h のみです。
- エンコード (圧縮)
void *data ... 元データのアドレス int data_size ... 元データの大きさ void *compressed_data; SSDataSize compressed_size; //圧縮後のサイズの最悪値を調べる compressed_size = ScaleEstimateEncodeSize(data_size); //メモリの確保 compressed_data = malloc(compressed_size); //圧縮(compressed_sizeには、実際の圧縮データのサイズが入る) compressed_size = ScaleEncoder(compressed_data, compressed_size, data, data_size); if (compressed_size < 0) エラー処理 //余分なメモリを解放する。 compressed_data = realloc(compressed_data, compressed_size);
- デコード(伸張)
void *cdata ... 圧縮データのアドレス int cdata_size ... 圧縮データの大きさ void *orig_data; SSDataSize orig_size; //元データの大きさを調べる orig_size = ScaleGetDecodeSize(cdata); //メモリの確保 orig_data = malloc(orig_size); //伸張(orig_sizeには、実際の圧縮データのサイズが入る orig_size = ScaleDecoder(orig_data, orig_size, data, data_size); if (orig_size < 0) エラー処理 //余分なメモリを解放する。デコードの場合は不要 //orig_data = realloc(orig_data, orig_size);
エラーコード
処理中にエラーが発生した場合、負の値がエラーコードとして返ります。
エラー名 | 意味 |
---|---|
SSERR_NO_MEMORY | 内部でのメモリ確保(malloc)に失敗 |
SSERR_NO_ROOM | 与えられたメモリ領域からあふれそうになった |
SSERR_DATA_BROKEN | 圧縮データの展開でエラー ファイルが壊れているかもしれない |
注意点
- ScaleEstimateEncodeSize() は、圧縮データの最悪の場合のサイズを返します。実際に圧縮すると、このサイズの半分以下ですむことが大半です。
- ScaleEncoder は、内部で大量のメモリを malloc します。(ScaleEstimateEncodeSize() の返値の2倍)
大きなデータを圧縮する際は、メモリの空きに注意してください。 - 現状では、malloc をさけるコーディングになっています。そのため、スタック上のデータが多めです。スタックオーバーフローに注意する必要があります。
- ScaleOptions.h を書き換えることで、圧縮パラメータを変更できます。