Centered chroma 2026-11-05
Centered chroma, also called interstitially sited chroma, places colour-difference samples between the corresponding luma sample positions along an axis being subsampled. The term centred chroma is the alternative spelling. A simple two-sample average illustrates how this location arises.[ref]
Let the luma-grid coordinate be an integer , and consider an original colour-difference ramp . Averaging consecutive samples before keeping one result per pair givesThe output exactly equals the ramp at . Assigning that average to would shift its interpretation by half a luma-sample spacing. For , the first averages are50,90 and130 at positions0.5,2.5 and4.5.
The location describes the sampling geometry, not an obligation to use only this averaging filter. A more elaborate filter can have the same effective alignment. Nor does horizontal centering force vertical centering: the Linux documentation includes a 4:2:0 chroma subsampling example with horizontal centering and vertical co-siting.[ref]
A decoder performing chroma upsampling must interpret those offsets consistently. Treating centered samples as co-sited chroma can displace reconstructed colour relative to luma while preserving every stored byte. A pixel format's plane arrangement and framebuffer stride describe memory addressing; they do not, by themselves, establish the sample coordinates.
Chroma interpolation filter 2026-11-05
A chroma interpolation filter combines retained colour-difference samples to estimate values at the output locations required by chroma upsampling. It acts on the components of YCbCr separately from full-resolution luma. The filter coefficients and the assumed chroma sample location jointly determine the reconstruction. Microsoft's primary conversion guide gives a four-sample interpolation example and states its progressive-scan and edge-handling assumptions.[ref]
For an original one-dimensional linear interpolation rule, let retained samples lie at positions . Define output samples byThe two coefficient sets, one for each output parity, both sum to one. A constant input is therefore reproduced at every output position. With , and , the outputs through are . The values at odd-integer positions are estimates, while the retained even-integer positions are unchanged.
Higher-order interpolation need not remain between neighbouring input values. As an original exact-arithmetic illustration, take a half-position rule with coefficients applied to four consecutive samples. Their sum is one, so constants are preserved. But the sample sequence yields between the two central samples; yields . Negative coefficients permit overshoot. Quantization and clipping then change the result further. The primary Microsoft example uses these interpolation coefficients with integer rounding and clipping.[ref]
Recommended 8-Bit YUV Formats for Video Rendering by Gary Sullivan and Stephen Estrop. four-sample Cout formula and subsequent interpolation discussion
The same numerical coefficients can produce spatially misplaced colour if their assumed input grid is wrong. Centered chroma and co-sited chroma require their actual coordinates to be respected. At image boundaries, missing neighbours require an explicit extension rule. No choice of chroma interpolation filter can uniquely recover arbitrary colour variation discarded by chroma subsampling.
Chroma sample location 2026-11-05
A chroma sample location specifies where a colour-difference sample is positioned relative to the luma sampling grid. The counts in 4:2:2 chroma subsampling or 4:2:0 chroma subsampling do not fully specify those positions. Co-sited chroma shares selected luma positions; centered chroma lies between them.[ref]
YUV Formats in the Linux Kernel documentation. Subsampling discussion and centered/co-sited examples
Use an original one-dimensional coordinate system with luma samples at integers. A colour-difference grid at is co-sited with every second luma sample. The equally dense grid at is centered between successive pairs. Both contain half as many horizontal samples, but they have different offsets.
Suppose the first two stored component codes are 20 and 100. At the luma position , linear interpolation on the first grid givesOn the second grid it givesThe same stored array and interpolation rule yield different reconstructed values because the sample coordinates differ. An incorrect location convention can therefore shift colour relative to luma without corrupting the byte buffer.
Horizontal and vertical choices also need not match. The Linux documentation illustrates 4:2:0 with horizontally centered and vertically co-sited colour-difference samples.[ref] By contrast, the original grid diagram in 4:2:0 chroma subsampling deliberately chooses centering in both directions. That is an illustration, not a claim that every format follows it.
A framebuffer stride locates rows in computer memory; it does not identify the physical sampling offset. A decoder performing chroma reconstruction therefore needs both the storage layout and the sample-location convention.