Difference between full-range (420f) and video range (420v) for YCrCb pixel formats on iOS

Video range means that the Y component only uses the byte values from 16 to 235 (for some historical reasons). Full range uses the full range of a byte, namely 0 to 255.

The chroma components (Cb, Cr) always use full range.


This is a really old question, but the previously accepted answer is incorrect, so posting a correct answer.

Video-range vs full-range refers to the range occupied by the luma and chroma components. Video range defined "headroom", luma and chroma values that would not normally be occupied, but which would preserve the signal as it transitioned through various analogue processes which might introduce gain or attenuation of the signal.

kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange

     8-bit 4:2:0 Component Y'CbCr format. Each 2x2 pixel block is represented
     by 4 unsigned eight bit luminance values and two unsigned eight bit
     chroma values. The chroma plane and luma plane are separated in memory. The
     luminance components have a range of [16, 235], while the chroma value
     has a range of [16, 240]. This is consistent with the CCIR601 spec.
     '420v' is the Apple Core Video four-character code for this pixel format.

kCVPixelFormatType_420YpCbCr8BiPlanarFullRange

     8-bit 4:2:0 Component Y'CbCr format. Each 2x2 pixel block is represented
     by 4 unsigned eight bit luminance components and two unsigned eight bit
     chroma components. The chroma plane and luma plane are separated in memory. The
     luminance components have a range of [0, 255], while the chroma value
     has a range of [1, 255].
     '420f' is the Apple Core Video four-character code for this pixel format.
     The equivalent Microsoft fourCC is 'NV12'.

If you have a choice of format, the full-range variant is preferable, since it will more accurately quantize the signal values.