Skip to content

Reznik.org

Software

This page lists several publicly-available software items that I have (co-)developed in the past.

MPEG integer IDCT standard (ISO/IEC 23002-2)

This is a reference implementation of MPEG's standard for integer approximations of 8x8 DCT/IDCT (Discrete Cosine / Inverse Discrete Cosine Transforms). DCT/IDCT are fundamental operations used in most existing image and video coding standards (including JPEG, MPEG-1, MPEG-2, MPEG-4 p2, H.261, and H.263), and encoder/decoder implementations using this MPEG standard are guaranteed to be drift-free and passing all relevant IDCT precision tests and conformance requirements. Detailed description of the algorithm can be found in:

The algorithm is remarkably simple: it uses only 44 additions and 20 shifts for each 8-point transform. No multiplications. Well suitable for low-power hardware designs.

.IDCT

MPEG-4 ALS: Lossless Audio coding standard (ISO/IEC 14496-3:2009 / 11)

MPEG-4 ALS is a standard for lossless audio coding, developed in 2003-2005 timeframe. It is a linear predictor (LPC)-based waveform coder, transmitting filter coefficients and residual in a manner that allows lossless reconstruction. General description and latest reference software for this standard can be found at TU-Berlin website.

MPEG-4 ALS

My contributions to this standard included algorithms for quantization and coding of Parcor coefficients, coding of residual, and parts of block-switching and multiplexing logic. Detailed description of residual coding can be found in:

Parcor coefficient quantization (quadratic companders), entropy coding, block-switching, and adaptive selection of predictor order is described in:

Type Quantization

This is an implementation of a "type coding" algorithm from:

This algorithm receives simplex-constrained quantities, such as discrete probability distributions, and quantizes them to a set of points known as "types" in universal source coding literature. Plots below show type locations and corresponding Voronoi partitions in 3 dimensions.

type quantizer

Detailed description and analysis of performance of this algorithm can be found in:


Binary Adaptive Block Coder

This library implements a simple binary adaptive encoder described in:

This algorithm encodes data in small (e.g. 8-bits) blocks, and uses a stack of prior blocks for adaptation to source's statistics. In practice, if bits are coming one-by-one, there will be a need to accumulate them, but the benefit of doing so is much faster encoding and decoding. Only a couple of lookups and logic operations are needed to encode each block. This algorithm is significantly faster than binary arithmetic encoders (including H.264's CABAC, and JPEG's Q-Coder). Plots below show redundancy rate characteristics of this particular implementation.

block coder