X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=ycbcr.cpp;h=277ea9c7b3a3de1c97cf95a51b1941661656bcbd;hp=f0124eaab178048a2ae3a00c758355fa275668a2;hb=2b85d54dac93d98400c78eff109750ad19c4219b;hpb=ba60914d4e5eda7b28af700bf43e9699b7aa720d diff --git a/ycbcr.cpp b/ycbcr.cpp index f0124ea..277ea9c 100644 --- a/ycbcr.cpp +++ b/ycbcr.cpp @@ -1,3 +1,6 @@ +// Note: This file does not have its own unit test; it is tested mainly +// through YCbCrInput's unit tests. + #include #include @@ -45,7 +48,12 @@ namespace movit { float compute_chroma_offset(float pos, unsigned subsampling_factor, unsigned resolution) { float local_chroma_pos = (0.5 + pos * (subsampling_factor - 1)) / subsampling_factor; - return (0.5 - local_chroma_pos) / resolution; + if (fabs(local_chroma_pos - 0.5) < 1e-10) { + // x + (-0) can be optimized away freely, as opposed to x + 0. + return -0.0; + } else { + return (0.5 - local_chroma_pos) / resolution; + } } // Given , compute the values needed to turn Y'CbCr into R'G'B';