MI_CompressLZ*

構文

#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 初版