The macroblock is a processing unit in image and video compression formats based on linear block transforms, typically the discrete cosine transform (DCT). A macroblock typically consists of 16ÃÂ16 samples, and is further subdivided into transform blocks, and may be further subdivided into prediction blocks. Formats which are based on macroblocks include JPEG, where they are called MCU blocks, H.261, MPEG-1 Part 2, H.262/MPEG-2 Part 2, H.263, MPEG-4 Part 2, and H.264/MPEG-4 AVC. In H.265/HEVC, the macroblock as a basic processing unit has been replaced by the coding tree unit.
A macroblock is divided into transform blocks, which serve as input to the linear block transform, e.g. the DCT. In H.261, the first video codec to use macroblocks, transform blocks have a fixed size of 8ÃÂ8 samples. In the YCbCr color space with chroma subsampling, a 16ÃÂ16 macroblock consists of 16ÃÂ16 luma (Y) samples and 8ÃÂ8 chroma (Cb and Cr) samples. These samples are split into four Y blocks, one Cb block and one Cr block. This design is also used in JPEG and most other macroblock-based video codecs with a fixed transform block size, such as MPEG-1 Part 2 and H.262/MPEG-2 Part 2. In other chroma subsampling formats, e.g. 4:0:0, 4:2:2, or 4:4:4, the number of chroma samples in a macroblock will be smaller or larger, and the grouping of chroma samples into blocks will differ accordingly.
In more modern macroblock-based video coding standards such as H.263 and H.264/AVC, transform blocks can be of sizes other than 8ÃÂ8 samples. For instance, in H.264/AVC main profile, the transform block size is 4ÃÂ4. In H.264/AVC High profile, the transform block size can be either 4ÃÂ4 or 8ÃÂ8, adapted on a per-macroblock basis.
Distinct from the division into transform blocks, a macroblock can be split into prediction blocks. In early standards such as H.261, MPEG-1 Part 2, and H.262/MPEG-2 Part 2, motion compensation is performed with one motion vector per macroblock. In more modern standards such as H.264/AVC, a macroblock can be split into multiple variable-sized prediction blocks, called partitions. In an inter-predicted macroblock in H.264/AVC, a separate motion vector is specified for each partition. Correspondingly, in an intra-predicted macroblock, where samples are predicted by extrapolating from the edges of neighboring blocks, the predicted direction is specified on a per-partition basis. In H.264/AVC, prediction partition size ranges from 4ÃÂ4 to 16ÃÂ16 samples for both inter-prediction (motion compensation) and intra-prediction.
A possible bitstream representation of a macroblock in a video codec which uses motion compensation and transform coding is given below. It is similar to the format used in H.261. <pre> +------+------+-------+--------+-----+----+----+--------+ | ADDR | TYPE | QUANT | VECTOR | CBP | b0 | b1 | ... b5 | +------+------+-------+--------+-----+----+----+--------+ </pre>
The term macroblocking is commonly used to refer to block coding artifacts.