Skip to content

feat: Expose compression configuration options #14

@zhexuany

Description

@zhexuany

Issue Description

The compression configuration is currently hardcoded (see TODO comment in src/io/formats/bag/parallel.rs:55). Users should be able to control compression level and algorithm when writing files.

Current State

// TODO: Use config options for compression, chunk size, etc.

The compression level and chunk size are not exposed through the public API.

Proposed Solution

  1. Add compression options to WriteOptions
  2. Expose compression level (1-22 for ZSTD)
  3. Expose compression algorithm selection (None, Zstd, LZ4)
  4. Add chunk size configuration for MCAP

Requirements

  • Add compression_level field to WriteOptions
  • Add compression_algorithm enum (None, Zstd, LZ4)
  • Add chunk_size field to WriteOptions
  • Apply compression options in MCAP writer
  • Apply compression options in ROS1 bag writer
  • Add unit tests
  • Update CLI with compression flags
  • Update Python bindings

API Example

let writer = RoboWriter::create_with_options(
    "output.mcap",
    WriteOptions::default()
        .compression_level(10)
        .compression_algorithm(CompressionAlgorithm::Zstd)
        .chunk_size(1024 * 1024)  // 1MB chunks
)?;

Acceptance Criteria

  1. Compression level is configurable via API
  2. Compression algorithm can be selected
  3. Chunk size is configurable for MCAP
  4. Options work for both MCAP and ROS1 bag writers
  5. Python bindings expose these options

CLI Example

robocodec convert input.mcap output.mcap --compression zstd --level 10
robocodec convert input.mcap output.mcap --compression none

Priority: P1 - Performance optimization
Estimated effort: Low

Metadata

Metadata

Assignees

No one assigned

    Labels

    formatRelated to data formats (MCAP, ROS bag, ULog, etc.)priority-P1High priority - core completeness

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions