X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=ycbcr.cpp;h=50059125dc4a3c866dff4ef08e82916d94ff7a43;hp=6dbcd9d94691e1a1190d1fcabf36c1ff373e1919;hb=refs%2Fheads%2F1.3.x-release;hpb=9580d67514ec138e65496aa1170c63b53f657207;ds=sidebyside diff --git a/ycbcr.cpp b/ycbcr.cpp index 6dbcd9d..5005912 100644 --- a/ycbcr.cpp +++ b/ycbcr.cpp @@ -1,5 +1,5 @@ -// Note: This file does not have its own unit test; it is tested mainly -// through YCbCrInput's unit tests. +// Note: These functions are tested in ycbcr_input_test.cpp; both through some +// direct matrix tests, but most of all through YCbCrInput's unit tests. #include #include @@ -52,7 +52,7 @@ float compute_chroma_offset(float pos, unsigned subsampling_factor, unsigned res // x + (-0) can be optimized away freely, as opposed to x + 0. return -0.0; } else { - return (local_chroma_pos - 0.5) / resolution; + return (0.5 - local_chroma_pos) / resolution; } } @@ -90,6 +90,7 @@ void compute_ycbcr_matrix(YCbCrFormat ycbcr_format, float* offset, Matrix3d* ycb } if (ycbcr_format.full_range) { + // TODO: Use num_levels. offset[0] = 0.0 / 255.0; offset[1] = 128.0 / 255.0; offset[2] = 128.0 / 255.0; @@ -99,6 +100,7 @@ void compute_ycbcr_matrix(YCbCrFormat ycbcr_format, float* offset, Matrix3d* ycb scale[2] = 1.0; } else { // Rec. 601, page 4; Rec. 709, page 19; Rec. 2020, page 4. + // TODO: Use num_levels. offset[0] = 16.0 / 255.0; offset[1] = 128.0 / 255.0; offset[2] = 128.0 / 255.0; @@ -114,12 +116,12 @@ void compute_ycbcr_matrix(YCbCrFormat ycbcr_format, float* offset, Matrix3d* ycb rgb_to_ycbcr(0,1) = coeff[1]; rgb_to_ycbcr(0,2) = coeff[2]; - float cb_fac = (224.0 / 219.0) / (coeff[0] + coeff[1] + 1.0f - coeff[2]); + float cb_fac = 1.0 / (coeff[0] + coeff[1] + 1.0f - coeff[2]); rgb_to_ycbcr(1,0) = -coeff[0] * cb_fac; rgb_to_ycbcr(1,1) = -coeff[1] * cb_fac; rgb_to_ycbcr(1,2) = (1.0f - coeff[2]) * cb_fac; - float cr_fac = (224.0 / 219.0) / (1.0f - coeff[0] + coeff[1] + coeff[2]); + float cr_fac = 1.0 / (1.0f - coeff[0] + coeff[1] + coeff[2]); rgb_to_ycbcr(2,0) = (1.0f - coeff[0]) * cr_fac; rgb_to_ycbcr(2,1) = -coeff[1] * cr_fac; rgb_to_ycbcr(2,2) = -coeff[2] * cr_fac;