Skip to content
Brendan G Bohannon edited this page Dec 10, 2021 · 14 revisions

Welcome to the bgbtech_misc wiki!

Mostly still familiarizing myself with all this.

BTIC1x Family Codecs:

  • BTIC1G
    • Older/Simpler byte-oriented low-complexity incremental codec.
    • Main use case is streaming video from robots.
      • It is more intended for low complexity rather than bitrate or quality.
      • It is mostly intended for incremental video streaming from ARM-based robot controllers.
  • BTIC1H
    • Intended as a reasonably low-complexity image/video codec for fast encode/decode.
    • It isn't intended for the best possible bitrate or image quality.
      • It was originally mostly intended as a replacement for BTIC1G in the same basic use-case.
      • However, the design seems to also work passably for screen-capture and other things.
  • BTIC4B
    • Similar in premise to BTIC1H, but uses 8x8 blocks.
    • This reduces per-block overhead, allowing for higher speeds than BTIC1H.
      • May achieve speeds high enough for 4K decoding in a single CPU thread on a modern CPU.
      • In some cases may also achieve high enough throughput to encode 4K in faster than real time (multithread).
  • BTIC5A
    • Experimental "extra lightweight" codec (byte-based).
    • Conceptually Similar in premise to MS-CRAM, but gets better compression.
    • Uses a dynamic index-color palette.
    • Optional LZ post-compressor stage (RP2).
  • BTIC5B
    • Intended to improve quality over BTIC5A, while still being fairly lightweight.
      • Replaces the palette with differential encodings within the RGB555 space.
    • Still uses a byte-oriented design, but switches over to using a pattern table and differential endpoints.
    • Intent is to be usable for video playback on a 50MHz BJX2 core or similar.
      • This was a problem for 1H and 4B, which were a bit heavyweight for this.
      • Single-threaded decode speeds on my PC can reach into Gpx/s territory.
    • Optional LZ post-compressor stage (RP2 or ULZ).
BTAC Audio Codecs
  • BTAC1C
    • Modified MS-IMA-ADPCM
    • Generally fairly effective.
    • Adds predictive filters to allow improved audio quality.
    • Adds a joint-stereo mode to allow stereo at lower bitrates than normal ADPCM.
  • BTAC2B
    • Possible fancier design (update: never did anything with this).
Data Compression:
  • BTLZA / BTLZH
    • An extended form of Deflate supporting larger windows and matches.
    • It is a backwards-compatible binary superset of Deflate.
    • It was intended as a compromise between Deflate and LZMA.
      • Speed closer to Deflate, but compression closer to LZMA.
      • Thus far mostly used in Huffman only mode (BTLZH).
      • Conceptually, which term is used depends on whether or not AC is used.
  • FeLZ32
    • Speed oriented DWORD-based LZ77 format.
    • Can have a faster decode speed than LZ4 at the expense of worse compression.
    • The cost to compression depends a bit on payload, generally with binary formats faring better.
    • Intended mostly for use-cases where encode/decode needs to happen quickly.
  • BtRP2
    • RP2 is a simple Byte-Oriented LZ77 format.
    • It is able to (typically) get slightly better compression at similar decode speeds if compared with LZ4.
  • TKuLZ
    • Intended to be a relatively simple and fast Huffman coded LZ77 variant.
    • It aims to be simpler and faster to decode than Deflate based designs.
    • It limits symbols to 12 bits, which is good for speed at a slight cost to compression.
Clone this wiki locally