Overall, the codec is a classic motion-compensated hybrid
codec. The coder has the architecture shown below,
whilst the decoder performs the inverse operations.
Figure: Overall hybrid encoder architecture
There are four main elements or modules to the coder:
Transform and scaling involves taking frame data and
applying a transform (in this case the wavelet transform) and
scaling the coefficients to perform quantisation;
Entropy coding is applied to quantised transform
coefficients and to motion vector (MV) data and performs
lossless compression on them;
Motion estimation (ME) involves finding matches for
frame data from previously coded frames, trading off
accuracy with motion vector bit rate;
Motion compensation (MC) involves using the motion
vectors to predict the current frame, in such a way as to
minimise the cost of encoding the residual data.
The following sections describe these modules in more
detail, after first describing the rate-distortion framework
used throughout the encoder.
Currently the encoder does not support interlaced coding.
This just means that there are no special tools for motion
estimation and motion compensation which take into account the
different temporal locations of the two fields within a frame.
We hope to develop these tools in the next few months, but
interlaced video can be coded using the standard tools, although
it won't perform as well.
The codec can support any frame dimensions and common chroma
formats (luma only, 444, 422, 420, 411) by means of frame padding.
The padding ensures that the wavelet transform can be applied properly.
Frame padding also allows for any size blocks to be used for motion
estimation, even if they do not evenly fit into the picture dimensions.
NB: frame padding may be required because the (normally subsampled)
chroma components have need padding even if the luma does not; in this
case all components are padded.