There is a confusion here. Y'CbCr 4:4:4 is NOT R'G'B' and you won't ever be able to get back to "true" R'G'B' (ie having every legal codeword representing a discrete color) once your signal went through the matrix transform that convert it to luma and a pair of colour differences, whatever you do. Transcoding to Y'CbCr (with or without chroma subsampling) means that 3/4 of the codewords won't represent a valid R'G'B' combination : you lose signal to noise ratio and won't get it back when transcoding to R'G'B' again. Using 8, 10 or one million bit per channel won't change the fact that you'll still ditch 3/4 of your possible colors when going through this matrix transform and won't get them back. More complete explanations : http://www.poynton.com/papers/Discreet_Logic/index.html Another confusion, luma is mostly (0.7152 coefficient for BT.709) computed from G' but that doesn't mean the inverse is true. As far as I understand the Y'CbCr to R'G'B' decoding matrix, it isn't. Regarding the 8 to 10 bits stuff, what does your app exactly do Thomas ? Averaging the luma value of 2x2 blocks of pixels ?