ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_rar5.h
Go to the documentation of this file.
1
54#pragma once
55
56#include <stddef.h>
57#include <stdint.h>
58
59#include "ra8_err.h"
60#include "ra8_rar.h"
61
62#ifdef __cplusplus
63extern "C" {
64#endif
65
88
105typedef struct {
106 uint32_t len[16];
107 uint32_t pos[16];
108 uint16_t num[k_ra8_rar5_nc];
109 uint16_t max;
111
123typedef struct {
124 uint64_t start;
125 uint32_t len;
126 uint8_t type;
127 uint8_t channels;
129
143
187
223[[nodiscard]] ra8_err_t ra8_rar5_decompress(const ra8_rar_t* rar,
224 uint64_t data_off,
225 uint64_t pack_size,
226 uint8_t* out,
227 size_t out_cap,
228 uint64_t unp_size,
230 size_t* got);
231
232#ifdef __cplusplus
233}
234#endif
Error Code Definitions for ra8-firmware.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Definition ra8_err.h:546
ra8_rar5_dims_t
Alphabet sizes and fixed scratch dimensions of the RAR5 decoder.
Definition ra8_rar5.h:76
@ k_ra8_rar5_ldc
Low-distance alphabet size.
Definition ra8_rar5.h:79
@ k_ra8_rar5_max_filters
Pending data-filter records per member.
Definition ra8_rar5.h:83
@ k_ra8_rar5_huff_total
NC+DC+LDC+RC combined length-table size.
Definition ra8_rar5.h:82
@ k_ra8_rar5_bc
Bit-length pre-table alphabet size.
Definition ra8_rar5.h:81
@ k_ra8_rar5_rc
Repeat-length alphabet size.
Definition ra8_rar5.h:80
@ k_ra8_rar5_refill_bytes
Streaming bit-reader packed-byte window.
Definition ra8_rar5.h:84
@ k_ra8_rar5_dc
Distance-slot alphabet size.
Definition ra8_rar5.h:78
@ k_ra8_rar5_delta_scratch
Delta-filter reorder buffer (in-place bound).
Definition ra8_rar5.h:85
@ k_ra8_rar5_nc
Main alphabet size (literals+len+rep+filter).
Definition ra8_rar5.h:77
@ k_ra8_rar5_old_dist
Remembered recent match distances.
Definition ra8_rar5.h:86
ra8_err_t ra8_rar5_decompress(const ra8_rar_t *rar, uint64_t data_off, uint64_t pack_size, uint8_t *out, size_t out_cap, uint64_t unp_size, ra8_rar5_state_t *st, size_t *got)
Decompress one RAR5-packed member into the caller's output buffer.
Definition ra8_rar5.c:776
ra8_rar5_filter_kind_t
The RAR5 data-filter kinds ra8_rar5_filter_t::type can take.
Definition ra8_rar5.h:137
@ k_ra8_rar5_filter_delta
Per-channel byte-delta de-interleave.
Definition ra8_rar5.h:138
@ k_ra8_rar5_filter_arm
32-bit ARM BL branch-target transform.
Definition ra8_rar5.h:141
@ k_ra8_rar5_filter_e8e9
x86 E8+E9 call/jmp-target transform.
Definition ra8_rar5.h:140
@ k_ra8_rar5_filter_e8
x86 E8 call-target absolute->relative.
Definition ra8_rar5.h:139
Clean-room, read-only RAR archive walker (RAR4 + RAR5 headers, STORE data).
One canonical Huffman decode table (shared by all five RAR5 alphabets).
Definition ra8_rar5.h:105
uint32_t pos[16]
First num index per bit length.
Definition ra8_rar5.h:107
uint32_t len[16]
Left-aligned upper-limit code per bit length.
Definition ra8_rar5.h:106
uint16_t max
Alphabet size (populated slot count).
Definition ra8_rar5.h:109
uint16_t num[k_ra8_rar5_nc]
Symbol per canonical code slot.
Definition ra8_rar5.h:108
One pending RAR5 data filter recorded during decode, applied after.
Definition ra8_rar5.h:123
uint8_t channels
Delta channel count (1..32); unused otherwise.
Definition ra8_rar5.h:127
uint32_t len
Length of the transformed range in bytes.
Definition ra8_rar5.h:125
uint8_t type
Filter kind (ra8_rar5_filter_kind_t).
Definition ra8_rar5.h:126
uint64_t start
Absolute output offset the filter transforms from.
Definition ra8_rar5.h:124
Caller-owned zero-heap scratch for one ra8_rar5_decompress call.
ra8_rar5_dtab_t ld
Main literal/length/rep/filter table.
Definition ra8_rar5.h:162
uint64_t consumed
Bits consumed from the packed stream.
Definition ra8_rar5.h:171
bool overrun
A read past the packed member ran dry.
Definition ra8_rar5.h:177
uint8_t delta[k_ra8_rar5_delta_scratch]
Delta reorder.
Definition ra8_rar5.h:185
uint64_t base
Absolute offset of the packed member.
Definition ra8_rar5.h:168
ra8_rar5_dtab_t bd
Bit-length pre-table.
Definition ra8_rar5.h:161
uint64_t packlen
Packed member length in bytes.
Definition ra8_rar5.h:169
uint64_t old_dist[k_ra8_rar5_old_dist]
Recent-distance ring.
Definition ra8_rar5.h:179
uint8_t refill[k_ra8_rar5_refill_bytes]
Refill window.
Definition ra8_rar5.h:174
ra8_rar5_filter_t filters[k_ra8_rar5_max_filters]
Pending filters.
Definition ra8_rar5.h:183
bool tables_ready
A table block was parsed.
Definition ra8_rar5.h:181
uint16_t filter_count
Filters pending.
Definition ra8_rar5.h:184
uint64_t fetched
Packed bytes pulled from the backing.
Definition ra8_rar5.h:170
uint32_t refill_pos
Next byte to consume from refill.
Definition ra8_rar5.h:176
ra8_rar5_dtab_t dd
Distance-slot table.
Definition ra8_rar5.h:163
uint32_t nbits
Valid bits currently in acc.
Definition ra8_rar5.h:173
ra8_rar5_dtab_t ldd
Low-distance table.
Definition ra8_rar5.h:164
uint32_t last_length
Length of the last match.
Definition ra8_rar5.h:180
const ra8_rar_t * rar
Archive backing for packed-byte refill.
Definition ra8_rar5.h:167
ra8_rar5_dtab_t rd
Repeat-length table.
Definition ra8_rar5.h:165
uint64_t acc
MSB-first bit accumulator.
Definition ra8_rar5.h:172
uint32_t refill_len
Valid bytes in refill.
Definition ra8_rar5.h:175
One open RAR archive: the backing plus the detected generation.
Definition ra8_rar.h:144