all repos — mgba @ b2d406a411b31acce5bbf0246af32a80c22ca834

mGBA Game Boy Advance Emulator

src/third-party/lzma/Lzma2Dec.h (view raw)

  1/* Lzma2Dec.h -- LZMA2 Decoder
  22018-02-19 : Igor Pavlov : Public domain */
  3
  4#ifndef __LZMA2_DEC_H
  5#define __LZMA2_DEC_H
  6
  7#include "LzmaDec.h"
  8
  9EXTERN_C_BEGIN
 10
 11/* ---------- State Interface ---------- */
 12
 13typedef struct
 14{
 15  unsigned state;
 16  Byte control;
 17  Byte needInitLevel;
 18  Byte isExtraMode;
 19  Byte _pad_;
 20  UInt32 packSize;
 21  UInt32 unpackSize;
 22  CLzmaDec decoder;
 23} CLzma2Dec;
 24
 25#define Lzma2Dec_Construct(p) LzmaDec_Construct(&(p)->decoder)
 26#define Lzma2Dec_FreeProbs(p, alloc) LzmaDec_FreeProbs(&(p)->decoder, alloc)
 27#define Lzma2Dec_Free(p, alloc) LzmaDec_Free(&(p)->decoder, alloc)
 28
 29SRes Lzma2Dec_AllocateProbs(CLzma2Dec *p, Byte prop, ISzAllocPtr alloc);
 30SRes Lzma2Dec_Allocate(CLzma2Dec *p, Byte prop, ISzAllocPtr alloc);
 31void Lzma2Dec_Init(CLzma2Dec *p);
 32
 33/*
 34finishMode:
 35  It has meaning only if the decoding reaches output limit (*destLen or dicLimit).
 36  LZMA_FINISH_ANY - use smallest number of input bytes
 37  LZMA_FINISH_END - read EndOfStream marker after decoding
 38
 39Returns:
 40  SZ_OK
 41    status:
 42      LZMA_STATUS_FINISHED_WITH_MARK
 43      LZMA_STATUS_NOT_FINISHED
 44      LZMA_STATUS_NEEDS_MORE_INPUT
 45  SZ_ERROR_DATA - Data error
 46*/
 47
 48SRes Lzma2Dec_DecodeToDic(CLzma2Dec *p, SizeT dicLimit,
 49    const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status);
 50
 51SRes Lzma2Dec_DecodeToBuf(CLzma2Dec *p, Byte *dest, SizeT *destLen,
 52    const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status);
 53
 54
 55/* ---------- LZMA2 block and chunk parsing ---------- */
 56
 57/*
 58Lzma2Dec_Parse() parses compressed data stream up to next independent block or next chunk data.
 59It can return LZMA_STATUS_* code or LZMA2_PARSE_STATUS_* code:
 60  - LZMA2_PARSE_STATUS_NEW_BLOCK - there is new block, and 1 additional byte (control byte of next block header) was read from input.
 61  - LZMA2_PARSE_STATUS_NEW_CHUNK - there is new chunk, and only lzma2 header of new chunk was read.
 62                                   CLzma2Dec::unpackSize contains unpack size of that chunk
 63*/
 64
 65typedef enum
 66{
 67/*
 68  LZMA_STATUS_NOT_SPECIFIED                 // data error
 69  LZMA_STATUS_FINISHED_WITH_MARK
 70  LZMA_STATUS_NOT_FINISHED                  //
 71  LZMA_STATUS_NEEDS_MORE_INPUT
 72  LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK   // unused
 73*/
 74  LZMA2_PARSE_STATUS_NEW_BLOCK = LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK + 1,
 75  LZMA2_PARSE_STATUS_NEW_CHUNK
 76} ELzma2ParseStatus;
 77
 78ELzma2ParseStatus Lzma2Dec_Parse(CLzma2Dec *p,
 79    SizeT outSize,   // output size
 80    const Byte *src, SizeT *srcLen,
 81    int checkFinishBlock   // set (checkFinishBlock = 1), if it must read full input data, if decoder.dicPos reaches blockMax position.
 82    );
 83
 84/*
 85LZMA2 parser doesn't decode LZMA chunks, so we must read
 86  full input LZMA chunk to decode some part of LZMA chunk.
 87
 88Lzma2Dec_GetUnpackExtra() returns the value that shows
 89    max possible number of output bytes that can be output by decoder
 90    at current input positon.
 91*/
 92
 93#define Lzma2Dec_GetUnpackExtra(p) ((p)->isExtraMode ? (p)->unpackSize : 0);
 94
 95
 96/* ---------- One Call Interface ---------- */
 97
 98/*
 99finishMode:
100  It has meaning only if the decoding reaches output limit (*destLen).
101  LZMA_FINISH_ANY - use smallest number of input bytes
102  LZMA_FINISH_END - read EndOfStream marker after decoding
103
104Returns:
105  SZ_OK
106    status:
107      LZMA_STATUS_FINISHED_WITH_MARK
108      LZMA_STATUS_NOT_FINISHED
109  SZ_ERROR_DATA - Data error
110  SZ_ERROR_MEM  - Memory allocation error
111  SZ_ERROR_UNSUPPORTED - Unsupported properties
112  SZ_ERROR_INPUT_EOF - It needs more bytes in input buffer (src).
113*/
114
115SRes Lzma2Decode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen,
116    Byte prop, ELzmaFinishMode finishMode, ELzmaStatus *status, ISzAllocPtr alloc);
117
118EXTERN_C_END
119
120#endif