summaryrefslogtreecommitdiff
path: root/libavfilter/vf_colorspace.c
diff options
context:
space:
mode:
authorYonglin Luo <vincenluo@tencent.com>2019-07-03 10:05:36 +0800
committerVittorio Giovara <vittorio.giovara@gmail.com>2019-07-03 13:57:11 -0400
commit664a27ea40be078fe452d0cded513af2078d4a52 (patch)
tree2eff66bfc42b964b8df27edf4f04164c303a1718 /libavfilter/vf_colorspace.c
parent1ac643f06654e97921069e5a5c322e0e168de7e8 (diff)
libavfilter/vf_colorspace.c: fix demarcation point of gamma linearize function
The linearize function (usually refered to EOTF) is the inverse of delinearize function (usually referred to OETF). Demarcation point of EOTF should be beta*delta, but the actual value used now in the source code is beta. For ITU Rec.709, they are 0.081 (0.018*4.5) and 0.018 respectively (beta = 0.018 and delta = 4.5), and they correspond to pixel value 5 and 21 for an 8-bit image. Linearized result of pixel within that range (5-21) will be different, but this commit will make linearize function of the filter more accurate in the mathematical sense. Signed-off-by: Yonglin Luo <vincenluo@tencent.com> Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
Diffstat (limited to 'libavfilter/vf_colorspace.c')
-rw-r--r--libavfilter/vf_colorspace.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/libavfilter/vf_colorspace.c b/libavfilter/vf_colorspace.c
index 2120199bee..df6efffb3d 100644
--- a/libavfilter/vf_colorspace.c
+++ b/libavfilter/vf_colorspace.c
@@ -260,9 +260,9 @@ static int fill_gamma_table(ColorSpaceContext *s)
s->delin_lut[n] = av_clip_int16(lrint(d * 28672.0));
// linearize
- if (v <= -in_beta) {
+ if (v <= -in_beta * in_delta) {
l = -pow((1.0 - in_alpha - v) * in_ialpha, in_igamma);
- } else if (v < in_beta) {
+ } else if (v < in_beta * in_delta) {
l = v * in_idelta;
} else {
l = pow((v + in_alpha - 1.0) * in_ialpha, in_igamma);