

#include <nitro/mi/uncomp_stream.h>
typedef struct { u8* destp; // 4B s32 destCount; // 4B u8* treep; // 4B u32 srcTmp; // 4B u32 destTmp; // 4B s16 treeSize; // 2B u8 srcTmpCnt; // 1B u8 destTmpCnt; // 1B u8 bitSize; // 1B u8 _padding2[3]; // 3B u8 tree[0x200]; // 512B // 計 540B } MIUncompContextHuffman;
ハフマン圧縮されたデータをカードから読み込みながら順次ストリーミング展開をおこなう際に、
データ展開状況を保存しておくためのコンテキスト構造体です。
MI_InitUncompContextHuffman()でコンテキストの初期化をおこない、MI_ReadUncompHuffman()でこのコンテキストを使用して展開状況を保管します。
圧縮データが4bit符号化されたものであれば、treeメンバの配列サイズが32バイトあれば問題ありませんので、sizeof(
MIUncompContextHufffman ) よりも、480バイト少ない領域しか与えていなくても構いません。
8bit符号化されたものであれば512バイト必要ですので構造体のサイズを削ることはできません。
| destp | 展開したデータの書き込み先領域へのポインタ |
| destCount | 残り書き込みサイズ |
| treep | ハフマン符号テーブル、カレントポインタ退避用 |
| srcTmp | 読み込み途中のデータの退避用 |
| destTmp | 書き込み途中のデータ退避用 |
| treeSize | ハフマン符号テーブルサイズの退避用 |
| srcTmpCnt | 読み込み途中のデータサイズ退避用 |
| destTmpCnt | 書き込み途中のデータサイズ退避用 |
| bitSize | 符号化ビットサイズ |
| tree | ハフマン符号テーブルの読み込み用バッファ |
MI_InitUncompContextHuffman, MI_ReadUncompHuffman, MIUncompContextLZ,MIUncompContextRL
2004/11/30 初版