mirror of
https://github.com/curioustorvald/tsvm.git
synced 2026-03-17 00:16:04 +09:00
TAD: arbitrary steps with bitplanes
This commit is contained in:
42
video_encoder/range_coder.h
Normal file
42
video_encoder/range_coder.h
Normal file
@@ -0,0 +1,42 @@
|
||||
#ifndef RANGE_CODER_H
|
||||
#define RANGE_CODER_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
|
||||
// Simple range coder for signed 16-bit integers
|
||||
// Uses adaptive frequency model for better compression
|
||||
|
||||
typedef struct {
|
||||
uint32_t low;
|
||||
uint32_t range;
|
||||
uint8_t *buffer;
|
||||
size_t buffer_pos;
|
||||
size_t buffer_capacity;
|
||||
} RangeEncoder;
|
||||
|
||||
typedef struct {
|
||||
uint32_t low;
|
||||
uint32_t range;
|
||||
uint32_t code;
|
||||
const uint8_t *buffer;
|
||||
size_t buffer_pos;
|
||||
size_t buffer_size;
|
||||
} RangeDecoder;
|
||||
|
||||
// Initialize encoder
|
||||
void range_encoder_init(RangeEncoder *enc, uint8_t *buffer, size_t capacity);
|
||||
|
||||
// Encode a signed 16-bit value with Laplacian distribution (λ=5.0, μ=0)
|
||||
void range_encode_int16_laplacian(RangeEncoder *enc, int16_t value, int16_t max_abs_value, float lambda);
|
||||
|
||||
// Finalize encoding and return bytes written
|
||||
size_t range_encoder_finish(RangeEncoder *enc);
|
||||
|
||||
// Initialize decoder
|
||||
void range_decoder_init(RangeDecoder *dec, const uint8_t *buffer, size_t size);
|
||||
|
||||
// Decode a signed 16-bit value with Laplacian distribution (λ=5.0, μ=0)
|
||||
int16_t range_decode_int16_laplacian(RangeDecoder *dec, int16_t max_abs_value, float lambda);
|
||||
|
||||
#endif // RANGE_CODER_H
|
||||
Reference in New Issue
Block a user