X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=gamma_compression_effect.cpp;h=5581fca32c38c14e15fa7905460761a68d271ddb;hb=9b95345e8e1dde29991638ed69def0cf187e28de;hp=0f0a2e4c73e031f930a243b9f661de1d830c7702;hpb=6dea8d2a6695a45aa6209425cdcfb4eabf704340;p=movit diff --git a/gamma_compression_effect.cpp b/gamma_compression_effect.cpp index 0f0a2e4..5581fca 100644 --- a/gamma_compression_effect.cpp +++ b/gamma_compression_effect.cpp @@ -30,13 +30,23 @@ std::string GammaCompressionEffect::output_fragment_shader() invalidate_1d_texture("compression_curve_tex"); return read_file("gamma_compression_effect.frag"); } - if (destination_curve == GAMMA_REC_709) { // And Rec. 601. + if (destination_curve == GAMMA_REC_709 || // And Rec. 601, and 10-bit Rec. 2020. + destination_curve == GAMMA_REC_2020_12_BIT) { + // Rec. 2020, page 3. + float alpha, beta; + if (destination_curve == GAMMA_REC_2020_12_BIT) { + alpha = 1.0993f; + beta = 0.0181f; + } else { + alpha = 1.099f; + beta = 0.018f; + } for (unsigned i = 0; i < COMPRESSION_CURVE_SIZE; ++i) { float x = i / (float)(COMPRESSION_CURVE_SIZE - 1); - if (x < 0.018f) { + if (x < beta) { compression_curve[i] = 4.5f * x; } else { - compression_curve[i] = 1.099f * pow(x, 0.45f) - 0.099; + compression_curve[i] = alpha * pow(x, 0.45f) - (alpha - 1.0f); } } invalidate_1d_texture("compression_curve_tex");