[FFmpeg-cvslog] avfilter/vf_lut: gammaval709()

Peter Ross git at videolan.org
Thu Nov 20 02:04:21 CET 2014


ffmpeg | branch: release/2.4 | Peter Ross <pross at xvid.org> | Fri Nov 14 09:14:24 2014 +1100| [057ee35924187979ae41f8c3f84fe16659a68656] | committer: Carl Eugen Hoyos

avfilter/vf_lut: gammaval709()

See http://www.itu.int/rec/R-REC-BT.709
Item 1.2, overall opto-electronic transfer characteristics at source

Signed-off-by: Peter Ross <pross at xvid.org>
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
(cherry picked from commit b186b7131e160d7e3ea8ef4c52745b56ddcb287b)

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=057ee35924187979ae41f8c3f84fe16659a68656
---

 libavfilter/vf_lut.c |   17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/libavfilter/vf_lut.c b/libavfilter/vf_lut.c
index fff5a2b..0b7a2ca 100644
--- a/libavfilter/vf_lut.c
+++ b/libavfilter/vf_lut.c
@@ -161,15 +161,32 @@ static double compute_gammaval(void *opaque, double gamma)
     return pow((val-minval)/(maxval-minval), gamma) * (maxval-minval)+minval;
 }
 
+/**
+ * Compute Rec.709 gama correction of value val
+ */
+static double compute_gammaval709(void *opaque, double gamma)
+{
+    LutContext *s = opaque;
+    double val    = s->var_values[VAR_CLIPVAL];
+    double minval = s->var_values[VAR_MINVAL];
+    double maxval = s->var_values[VAR_MAXVAL];
+    double level = (val - minval) / (maxval - minval);
+    level = level < 0.018 ? 4.5 * level
+                          : 1.099 * pow(level, 1.0 / gamma) - 0.099;
+    return level * (maxval - minval) + minval;
+}
+
 static double (* const funcs1[])(void *, double) = {
     (void *)clip,
     (void *)compute_gammaval,
+    (void *)compute_gammaval709,
     NULL
 };
 
 static const char * const funcs1_names[] = {
     "clip",
     "gammaval",
+    "gammaval709",
     NULL
 };
 



More information about the ffmpeg-cvslog mailing list