

#include <nitro/mi.h>
u32 MI_CompressLZ( const u8 *srcp, u32 size, u8 *dstp );
u32 MI_CompressLZFast( const u8 *srcp, u32 size, u8 *dstp, u8* work );
u32 MI_CompressLZEx( const u8 *srcp, u32 size, u8 *dstp );
u32 MI_CompressLZExFast( const u8 *srcp, u32 size, u8 *dstp, u8* work );
| srcp | 圧縮するデータが格納されているソースアドレス。 |
| size | 圧縮するソースデータサイズ。 |
| dstp | 圧縮先バッファへのポインタ、ソースデータサイズ以上の領域が必要です。要4バイトアライン。 |
| work | MI_CompressLZ*Fast()系の関数で必要となる圧縮用の一時ワークバッファ。 MI_LZ_FAST_COMPRESS_WORK_SIZEバイトのサイズが必要です。 |
圧縮データのサイズを返します。
もしも圧縮後のデータがソースファイルよりも大きくなる場合には、圧縮を行なわずに0を返します。
データをLZ77圧縮し、指定のメモリ領域に書き込みます。
圧縮先のバッファにはソースデータと同じサイズの領域を用意する必要があります。
サフィックスにFastの付いたAPIでは、スライド辞書の検索時にワークバッファを利用することで、通常の関数と比較して数倍高速に処理されます。
ワークバッファを指定しない形式のAPIではスライド辞書を単純検索していますので、ソースデータによっては完了までに時間がかかる場合があります。
LZ77拡張圧縮( MI_CompressLZEx*() )では、通常のLZ77圧縮に比べてより高い圧縮率が期待できますが、最悪の場合の圧縮時間が通常のMI_CompressLZFast()での
ワーストケースと比較して数倍長くなる事が考えられ、MI_CompressLZFastを使用した方が安定した処理時間での圧縮が可能です。
展開時の速度はどちらの方式でも同程度です。
どちらの圧縮形式でもMI_UncompressLZ*()や、MI_ReadUncompLZ()で展開することが
可能ですが、NitroSDK4.2より前のSDKを使用しているプログラムでは、LZ77拡張圧縮されたファイルを展開できませんので、ご注意ください。
8bit単位で書き込みますので、NITROの場合はdstpにVRAM上のアドレスを指定することはできません。
srcpにはNITRO/TWL共にVRAM上のアドレスを指定することが可能です。
システムコール、DMAは使用せずCPUだけで処理します。
MI_UncompressLZ*,
MI_ReadUncompLZ,
MI_CompressRL,
MI_CompressHuffman
2008/12/05 TWLに関する記述を追加
2007/11/01 LZ77拡張圧縮を追加, MI_CompressLZ*系のAPIリファレンスを統合
2005/02/01 初版