Personal tools
User menu

H-264 Encoder / Decoder Applications

Jump to: navigation, search

The available H-264 encoder and decoder applications are based on an implementation of an H.264 codec for the HOPES framework and supports the baseline profile of the coding standard.

The considered implementation of the encoder is shown below:

H264encoder.png

It uses task division on the macroblock level to divide the functionality among five processes: Init, ME, Encode, Deblock, and VLC:

  • The init process read the input stream from a file.
  • The ME process reads one macroblock in each firing sent from the Init process and performs inter- and intra-prediction, using the macroblock's reference and neighboring data that is communicated from the Deblock process. The results of the two predictions are compared and the best one is used as the macroblock's predictor, which is sent to the Encode process.
  • The Encode process uses the predictor and the raw macroblock to calculate the residual, which is subsequently transformed and quantized to form the coded macroblock. This result is sent to the VLC process and is reconstructed, with the reconstruction being passed onto the Deblock process.
  • The Deblock process stores the reconstructed macroblocks to form a database containing the reference frame's macroblocks used for inter-prediction, and the current frame's macroblocks used for intra-prediction. Thus, when it receives a reconstructed macroblock, it saves it in the database and loads macroblocks that are needed for inter- and intra-prediction of the next macroblock in line. The Deblock process also performs the task of deblocking filtering. Since intra-prediction requires unfiltered macroblocks, and inter-prediction requires the filtered ones, frames that are used as references are filtered when they are fully processed. When the final macroblock of such a frame is received, the process applies the deblocking filter to the whole frame and saves it as a reference.
  • Finally, the VLC process reorders the elements of the received coded macroblock and produces the final bitstream by applying variable length coding on these elements and every other necessary information needed for reconstructing the macroblock (e.g., the macroblock type, possibly the motion vector etc.). It also creates the headers of the NAL units and writes all this data on the output file.
!!! Dieses Dokument stammt aus dem ETH Web-Archiv und wird nicht mehr gepflegt !!!
!!! This document is stored in the ETH Web archive and is no longer maintained !!!