|
CCSDS 124.0-B-1 C 1.0.0
CCSDS 124.0-B-1 Lossless Compression
|
CCSDS Section 5.3: Packet compression. More...
Data Structures | |
| struct | ccsds124_compressor |
| Compressor state structure. More... | |
Functions | |
| int | ccsds124_compressor_init (ccsds124_compressor_t *comp, size_t F, const bitvector_t *initial_mask, uint8_t robustness, int pt_limit, int ft_limit, int rt_limit) |
| Initialize compressor state. | |
| void | ccsds124_compressor_reset (ccsds124_compressor_t *comp) |
| Reset compressor to initial state. | |
| int | ccsds124_compress_packet (ccsds124_compressor_t *comp, const bitvector_t *input, bitbuffer_t *output, const ccsds124_params_t *params) |
| Compress a single input packet. | |
| int | ccsds124_compress (ccsds124_compressor_t *comp, const uint8_t *input_data, size_t input_size, uint8_t *output_buffer, size_t output_buffer_size, size_t *output_size) |
| Compress entire input data stream. | |
| void | ccsds124_compute_robustness_window (bitvector_t *Xt, const ccsds124_compressor_t *comp, const bitvector_t *current_change) |
| Compute robustness window Xₜ. | |
| uint8_t | ccsds124_compute_effective_robustness (const ccsds124_compressor_t *comp, const bitvector_t *current_change) |
| Compute effective robustness Vₜ. | |
| int | ccsds124_has_positive_updates (const bitvector_t *Xt, const bitvector_t *mask) |
| Check for positive mask updates (eₜ flag). | |
| int | ccsds124_compute_ct_flag (const ccsds124_compressor_t *comp, uint8_t Vt, int current_new_mask_flag) |
| Compute cₜ flag for multiple mask updates. | |
CCSDS Section 5.3: Packet compression.
High-level compression interface for processing packets.
| int ccsds124_compress | ( | ccsds124_compressor_t * | comp, |
| const uint8_t * | input_data, | ||
| size_t | input_size, | ||
| uint8_t * | output_buffer, | ||
| size_t | output_buffer_size, | ||
| size_t * | output_size | ||
| ) |
Compress entire input data stream.
High-level API that handles:
| [in,out] | comp | Compressor state (must be initialized) |
| [in] | input_data | Raw input byte array |
| [in] | input_size | Input size in bytes (multiple of F/8) |
| [out] | output_buffer | Output buffer (caller-allocated) |
| [in] | output_buffer_size | Size of output buffer |
| [out] | output_size | Actual bytes written |
Definition at line 518 of file compress.c.
References bitbuffer_init(), bitbuffer_to_bytes(), bitvector_from_bytes(), bitvector_init(), ccsds124_compress_packet(), ccsds124_compressor_reset(), CCSDS124_ERROR_INVALID_ARG, CCSDS124_ERROR_OVERFLOW, CCSDS124_MAX_OUTPUT_BYTES, CCSDS124_OK, ccsds124_compressor::F, ccsds124_compressor::ft_counter, ccsds124_compressor::ft_limit, ccsds124_params_t::min_robustness, ccsds124_params_t::new_mask_flag, ccsds124_compressor::pt_counter, ccsds124_compressor::pt_limit, ccsds124_compressor::robustness, ccsds124_compressor::rt_counter, ccsds124_compressor::rt_limit, ccsds124_params_t::send_mask_flag, and ccsds124_params_t::uncompressed_flag.
Referenced by do_compress().
| int ccsds124_compress_packet | ( | ccsds124_compressor_t * | comp, |
| const bitvector_t * | input, | ||
| bitbuffer_t * | output, | ||
| const ccsds124_params_t * | params | ||
| ) |
Compress a single input packet.
Compresses one F-bit packet according to CCSDS 124.0-B-1 Section 5.3. Updates compressor state for next packet.
| [in,out] | comp | Compressor state (updated in place) |
| [in] | input | Input packet Iₜ (must be length F) |
| [out] | output | Compressed output buffer |
| [in] | params | Compression parameters (NULL = use automatic) |
Definition at line 330 of file compress.c.
References bitbuffer_append_bit(), bitbuffer_append_bitvector(), bitbuffer_clear(), bitvector_copy(), bitvector_hamming_weight(), bitvector_left_shift(), bitvector_not(), bitvector_or(), bitvector_xor(), ccsds124_compressor::build, ccsds124_bit_extract(), ccsds124_bit_extract_forward(), ccsds124_compute_change(), ccsds124_compute_ct_flag(), ccsds124_compute_effective_robustness(), ccsds124_compute_robustness_window(), ccsds124_count_encode(), CCSDS124_ERROR_INVALID_ARG, ccsds124_has_positive_updates(), CCSDS124_MAX_HISTORY, CCSDS124_MAX_VT_HISTORY, CCSDS124_OK, ccsds124_rle_encode(), ccsds124_update_build(), ccsds124_update_mask(), ccsds124_compressor::change_history, ccsds124_compressor::F, ccsds124_compressor::flag_history_index, get_default_params(), ccsds124_compressor::history_index, bitvector::length, ccsds124_compressor::mask, ccsds124_params_t::new_mask_flag, ccsds124_compressor::new_mask_flag_history, ccsds124_compressor::prev_input, ccsds124_compressor::prev_mask, ccsds124_params_t::send_mask_flag, ccsds124_compressor::t, ccsds124_params_t::uncompressed_flag, ccsds124_compressor::work_change, ccsds124_compressor::work_diff, ccsds124_compressor::work_inverted, ccsds124_compressor::work_prev_build, ccsds124_compressor::work_shifted, and ccsds124_compressor::work_Xt.
Referenced by ccsds124_compress().
| int ccsds124_compressor_init | ( | ccsds124_compressor_t * | comp, |
| size_t | F, | ||
| const bitvector_t * | initial_mask, | ||
| uint8_t | robustness, | ||
| int | pt_limit, | ||
| int | ft_limit, | ||
| int | rt_limit | ||
| ) |
Initialize compressor state.
Sets up the compressor for a new compression session. Use pt_limit/ft_limit/rt_limit > 0 for automatic parameter management, or 0 to control parameters manually via ccsds124_params_t.
| [out] | comp | Compressor to initialize (caller-allocated) |
| [in] | F | Input vector length in bits |
| [in] | initial_mask | M₀ initial mask (NULL = all zeros) |
| [in] | robustness | Rₜ base robustness level (0-7) |
| [in] | pt_limit | New mask period (0 = manual control) |
| [in] | ft_limit | Send mask period (0 = manual control) |
| [in] | rt_limit | Uncompressed period (0 = manual control) |
Definition at line 36 of file compress.c.
References bitvector_copy(), bitvector_init(), bitvector_zero(), ccsds124_compressor::build, ccsds124_compressor_reset(), CCSDS124_ERROR_INVALID_ARG, CCSDS124_MAX_HISTORY, CCSDS124_MAX_PACKET_LENGTH, CCSDS124_MAX_ROBUSTNESS, CCSDS124_MAX_VT_HISTORY, CCSDS124_OK, ccsds124_compressor::change_history, ccsds124_compressor::F, ccsds124_compressor::flag_history_index, ccsds124_compressor::ft_limit, ccsds124_compressor::initial_mask, ccsds124_compressor::mask, ccsds124_compressor::new_mask_flag_history, ccsds124_compressor::prev_input, ccsds124_compressor::prev_mask, ccsds124_compressor::pt_limit, ccsds124_compressor::robustness, ccsds124_compressor::rt_limit, ccsds124_compressor::work_change, ccsds124_compressor::work_diff, ccsds124_compressor::work_inverted, ccsds124_compressor::work_prev_build, ccsds124_compressor::work_shifted, and ccsds124_compressor::work_Xt.
Referenced by do_compress().
| void ccsds124_compressor_reset | ( | ccsds124_compressor_t * | comp | ) |
Reset compressor to initial state.
Resets time index to 0 and clears all history while preserving configuration (F, robustness, limits).
| [out] | comp | Compressor to reset |
Definition at line 107 of file compress.c.
References bitvector_copy(), bitvector_zero(), ccsds124_compressor::build, CCSDS124_MAX_HISTORY, ccsds124_compressor::change_history, ccsds124_compressor::ft_counter, ccsds124_compressor::ft_limit, ccsds124_compressor::history_index, ccsds124_compressor::initial_mask, ccsds124_compressor::mask, ccsds124_compressor::prev_input, ccsds124_compressor::prev_mask, ccsds124_compressor::pt_counter, ccsds124_compressor::pt_limit, ccsds124_compressor::rt_counter, ccsds124_compressor::rt_limit, and ccsds124_compressor::t.
Referenced by ccsds124_compress(), and ccsds124_compressor_init().
| int ccsds124_compute_ct_flag | ( | const ccsds124_compressor_t * | comp, |
| uint8_t | Vt, | ||
| int | current_new_mask_flag | ||
| ) |
Compute cₜ flag for multiple mask updates.
Returns 1 if ṗₜ was set 2+ times in the last Vₜ iterations, indicating the kₜ component is needed in output.
| [in] | comp | Compressor with flag history |
| [in] | Vt | Effective robustness level |
| [in] | current_new_mask_flag | Current packet's ṗₜ value |
Definition at line 282 of file compress.c.
References CCSDS124_MAX_VT_HISTORY, ccsds124_compressor::flag_history_index, ccsds124_compressor::new_mask_flag_history, and ccsds124_compressor::t.
Referenced by ccsds124_compress_packet().
| uint8_t ccsds124_compute_effective_robustness | ( | const ccsds124_compressor_t * | comp, |
| const bitvector_t * | current_change | ||
| ) |
Compute effective robustness Vₜ.
Calculates Vₜ = Rₜ + Cₜ where Cₜ counts consecutive iterations without mask changes.
| [in] | comp | Compressor with change history |
| [in] | current_change | Current change vector Dₜ |
Definition at line 210 of file compress.c.
References bitvector_hamming_weight(), CCSDS124_MAX_HISTORY, ccsds124_compressor::change_history, ccsds124_compressor::history_index, ccsds124_compressor::robustness, and ccsds124_compressor::t.
Referenced by ccsds124_compress_packet().
| void ccsds124_compute_robustness_window | ( | bitvector_t * | Xt, |
| const ccsds124_compressor_t * | comp, | ||
| const bitvector_t * | current_change | ||
| ) |
Compute robustness window Xₜ.
Computes the OR of recent change vectors for robustness encoding: Xₜ = <(Dₜ₋ᴿₜ OR ... OR Dₜ)> where denotes bit reversal.
| [out] | Xt | Robustness window (reversed for RLE) |
| [in] | comp | Compressor with change history |
| [in] | current_change | Current change vector Dₜ |
Definition at line 173 of file compress.c.
References bitvector_copy(), CCSDS124_MAX_HISTORY, ccsds124_compressor::change_history, bitvector::data, ccsds124_compressor::F, ccsds124_compressor::history_index, bitvector::length, bitvector::num_words, ccsds124_compressor::robustness, and ccsds124_compressor::t.
Referenced by ccsds124_compress_packet().
| int ccsds124_has_positive_updates | ( | const bitvector_t * | Xt, |
| const bitvector_t * | mask | ||
| ) |
Check for positive mask updates (eₜ flag).
Determines if any changed bits in Xₜ are predictable (have mask bit = 0), indicating positive updates.
| [in] | Xt | Robustness window (reversed) |
| [in] | mask | Current mask Mₜ |
Definition at line 254 of file compress.c.
References bitvector::data, and bitvector::num_words.
Referenced by ccsds124_compress_packet().