ffmpeg | branch: master | Yonglin Luo <[email protected]> | Wed Jul 3 10:05:36 2019 +0800| [664a27ea40be078fe452d0cded513af2078d4a52] | committer: Vittorio Giovara
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 <[email protected]> Signed-off-by: Vittorio Giovara <[email protected]> > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=664a27ea40be078fe452d0cded513af2078d4a52 --- libavfilter/vf_colorspace.c | 4 ++-- 1 file 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); _______________________________________________ ffmpeg-cvslog mailing list [email protected] https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email [email protected] with subject "unsubscribe".
