]> git.sesse.net Git - movit/blobdiff - gamma_expansion_effect.cpp
Add partial Rec. 2020 support.
[movit] / gamma_expansion_effect.cpp
index 45745673d3420c3152e14434a3ace4741ce208bd..5b5f44d64ac03086acc8db44b3e1b9e8c0b499c1 100644 (file)
@@ -29,13 +29,23 @@ std::string GammaExpansionEffect::output_fragment_shader()
                invalidate_1d_texture("expansion_curve_tex");
                return read_file("gamma_expansion_effect.frag");
        }
-       if (source_curve == GAMMA_REC_709) {  // And Rec. 601.
+       if (source_curve == GAMMA_REC_709 ||  // Also includes Rec. 601, and 10-bit Rec. 2020.
+           source_curve == GAMMA_REC_2020_12_BIT) {
+               // Rec. 2020, page 3.
+               float alpha, beta;
+               if (source_curve == GAMMA_REC_2020_12_BIT) {
+                       alpha = 1.0993f;
+                       beta = 0.0181f;
+               } else {
+                       alpha = 1.099f;
+                       beta = 0.018f;
+               }
                for (unsigned i = 0; i < EXPANSION_CURVE_SIZE; ++i) {
                        float x = i / (float)(EXPANSION_CURVE_SIZE - 1);
-                       if (x < 0.081f) {
+                       if (x < beta * 4.5f) {
                                expansion_curve[i] = (1.0/4.5f) * x;
                        } else {
-                               expansion_curve[i] = pow((x + 0.099) * (1.0/1.099f), 1.0f/0.45f);
+                               expansion_curve[i] = pow((x + (alpha - 1.0f)) / alpha, 1.0f/0.45f);
                        }
                }
                invalidate_1d_texture("expansion_curve_tex");