Themacroblock is a processing unit inimage andvideo compression formats based on linear block transforms, typically thediscrete 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 includeJPEG, where they are calledMCU blocks,H.261,MPEG-1 Part 2,H.262/MPEG-2 Part 2,H.263,MPEG-4 Part 2, andH.264/MPEG-4 AVC.[1][2][3][4] InH.265/HEVC, the macroblock as a basic processing unit has been replaced by thecoding tree unit.[5]
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.[1] In theYCbCr color space with4:2:0 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 inJPEG 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 otherchroma 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.[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.[4]
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.[1][2] In more modern standards such as H.264/AVC, a macroblock can be split into multiple variable-sized prediction blocks, called partitions.[4] In an inter-predicted macroblock in H.264/AVC, a separate motion vector is specified for each partition.[4] 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.[4] In H.264/AVC, prediction partition size ranges from 4×4 to 16×16 samples for both inter-prediction (motion compensation) and intra-prediction.[4]
A possible bitstream representation of a macroblock in a video codec which usesmotion compensation andtransform coding is given below.[6] It is similar to the format used inH.261.[1]
+------+------+-------+--------+-----+----+----+--------+| ADDR | TYPE | QUANT | VECTOR | CBP | b0 | b1 | ... b5 |+------+------+-------+--------+-----+----+----+--------+
The termmacroblocking is commonly used to refer to block coding artifacts.