]> git.sesse.net Git - movit/blobdiff - gamma_compression_effect.cpp
Add partial Rec. 2020 support.
[movit] / gamma_compression_effect.cpp
index 0f0a2e4c73e031f930a243b9f661de1d830c7702..5581fca32c38c14e15fa7905460761a68d271ddb 100644 (file)
@@ -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");