Overview
QccPack provides an open-source collection of library routines and utility programs for quantization, compression, and coding of data. QccPack has been written to provide very flexible and general implementations of procedures commonly used in coding and compression applications.The essential component of the QccPack collection is a library (a static library, libQccPack.a, and, if supported on your system, a dynamic library, libQccPack.so) of procedures implementing a large variety of compression and coding algorithms. Application programs may make use of the QccPack library routines by linking the application against the library during compilation. Each library function is very general in its implementation so to be useful in a large variety of applications.
Additionally, much of the functionality of the library routines has been provided in the form of stand-alone executable programs. Probably the prime importance of these utility programs is that they provide examples of how to interface with many of the QccPack library routines. The utility programs could also be called from scripts to simulate the operation of complex coding and compression systems before implementing all the system functionality into one stand-alone program.
Currently, QccPack consists of over 55,000 lines of C code implementing over 500 library routines and over 50 stand-alone utility programs. The major functionalities currently implemented include:
- Entropy coding
- Arithmetic coding including multiple-context adaptive and nonadaptive models
- Huffman coding
- Golomb and adaptive Golomb coding
- Scalar Quantization (SQ)
- Uniform SQ
- Dead-zone SQ
- μ-law and A-law SQ
- Lloyd algorithm for optimal SQ design
- Vector quantization (VQ)
- Generalized Lloyd algorithm (GLA) for VQ-codebook design
- Full-search VQ encoding and decoding
- Entropy-constrained-VQ (ECVQ) training, encoding, and decoding
- Multistage VQ (MSVQ) (also called residual VQ (RVQ)) training, encoding, and decoding
- Adaptive vector quantization (AVQ)
- The generalized-threshold-replenishment (GTR) algorithm
- The Paul algorithm
- Gersho-Yano algorithm
- Coding of side information
- Wavelet transforms, wavelet-based subband coding
- Discrete wavelet transform (DWT) using first-generation filter banks and popular orthonormal and biorthogonal wavelets
- Lifting implementations of DWT for popular wavelets
- Two-dimensional DWT in the form of dyadic subband pyramids
- Three-dimensional DWT in the form of dyadic subband pyramids as well as a packet transform
- Shape-adaptive DWT (SA-DWT) for 1D and 2D signals
- Redundant DWT (RDWT), aka, the algorithme à trous
- The SR algorithm for wavelet-based image coding
- The SFQ algorithm for wavelet-based image coding
- The WDR algorithm for wavelet-based image coding
- The 3D-WDR algorithm for wavelet-based image-cube coding
- The tarp-filter algorithm for wavelet-based image coding
- The 3D-tarp algorithm for wavelet-based image-cube coding
- The TCE algorithm for wavelet-based image coding
- The BISK algorithm for wavelet-based shape-adaptive image coding
- The 3D-BISK algorithm for wavelet-based image-cube coding
- The SPIHT algorithm for wavelet-based shape-adaptive image coding
- The 3D-SPIHT algorithm for wavelet-based image-cube coding
- The SPECK algorithm for wavelet-based shape-adaptive image coding
- The 3D-SPECK algorithm for wavelet-based image-cube coding
- Error-correcting codes
- Field arithmetic, including Gaussian-elimination matrix inversion
- Reed-Solomon encoding and decoding
- CRC codes
- Trellis codes
- Hard and soft Viterbi decoding
- Image processing
- Routines for reading and writing gray and color still images and sequences of images (via PGM and PPM formats)
- Routines for reading and writing 3D image-cube volumes
- Image and image-sequence deinterlacing
- Image differential-pulse-code modulation (DPCM)
- Color-space conversions: RGB, YUV, CIE XYZ, CIE UCS, CIE modified UCS
- Block-based DCT and inverse DCT
- Video coding
- The spatial-block algorithm for image-sequence coding
- The RDWT-block algorithm for image-sequence coding
- The RWMH algorithm for image-sequence coding
- Block-based motion estimation and motion compensation
- Motion estimation and motion compensation using regular triangle meshes
- Encoding and decoding of motion-vector fields
- General routines
- Vector math (up/down sampling, sorting, dot product, addition/subtraction, etc.)
- Matrix math (addition/subtraction, vector-matrix multiplication, etc.)
- Linked lists and associated operations
- Entropy estimation (first and second order)
- General file input and output, including automatic detection and reading/writing of gzip-compressed files
- Character bit-packing for binary bitstream input/output
- Memory-based fifo for binary bitstreams
- Conversion between various file formats used by library routines
- Error-message tracking, formatting, and output
- Automatic command-line parameter parsing
Current State of Development
The QccPack code is currently in BETA-release development stage. That is to say, much desired functionality is still left to be implemented, and documentation is incomplete. Currently, all utility programs are documented; however, only some of the library routines are documented. The documentation that exists is available in both man-page and HTML form. The HTML-format documentation is available online.