[FFmpeg-cvslog] avfilter/vf_blend: add linearlight and glow mode
Paul B Mahol
git at videolan.org
Wed Jun 3 14:40:32 CEST 2015
ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Wed Jun 3 12:23:59 2015 +0000| [b8c0cf7880cfe3734324dcf0ff98b655b59fd41e] | committer: Paul B Mahol
avfilter/vf_blend: add linearlight and glow mode
Signed-off-by: Paul B Mahol <onemda at gmail.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b8c0cf7880cfe3734324dcf0ff98b655b59fd41e
---
doc/filters.texi | 2 ++
libavfilter/vf_blend.c | 8 ++++++++
2 files changed, 10 insertions(+)
diff --git a/doc/filters.texi b/doc/filters.texi
index 333244d..3e61276 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -2748,9 +2748,11 @@ Available values for component modes are:
@item divide
@item dodge
@item exclusion
+ at item glow
@item hardlight
@item hardmix
@item lighten
+ at item linearlight
@item multiply
@item negation
@item normal
diff --git a/libavfilter/vf_blend.c b/libavfilter/vf_blend.c
index 8cfab08..9c93baf 100644
--- a/libavfilter/vf_blend.c
+++ b/libavfilter/vf_blend.c
@@ -60,6 +60,8 @@ enum BlendMode {
BLEND_VIVIDLIGHT,
BLEND_XOR,
BLEND_HARDMIX,
+ BLEND_LINEARLIGHT,
+ BLEND_GLOW,
BLEND_NB
};
@@ -117,9 +119,11 @@ typedef struct {
{ "divide", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_DIVIDE}, 0, 0, FLAGS, "mode" },\
{ "dodge", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_DODGE}, 0, 0, FLAGS, "mode" },\
{ "exclusion", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_EXCLUSION}, 0, 0, FLAGS, "mode" },\
+ { "glow", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_GLOW}, 0, 0, FLAGS, "mode" },\
{ "hardlight", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_HARDLIGHT}, 0, 0, FLAGS, "mode" },\
{ "hardmix", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_HARDMIX}, 0, 0, FLAGS, "mode" },\
{ "lighten", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_LIGHTEN}, 0, 0, FLAGS, "mode" },\
+ { "linearlight","", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_LINEARLIGHT},0, 0, FLAGS, "mode" },\
{ "multiply", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_MULTIPLY}, 0, 0, FLAGS, "mode" },\
{ "negation", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_NEGATION}, 0, 0, FLAGS, "mode" },\
{ "normal", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_NORMAL}, 0, 0, FLAGS, "mode" },\
@@ -214,10 +218,12 @@ DEFINE_BLEND(exclusion, A + B - 2 * A * B / 255)
DEFINE_BLEND(pinlight, (B < 128) ? FFMIN(A, 2 * B) : FFMAX(A, 2 * (B - 128)))
DEFINE_BLEND(phoenix, FFMIN(A, B) - FFMAX(A, B) + 255)
DEFINE_BLEND(reflect, (B == 255) ? B : FFMIN(255, (A * A / (255 - B))))
+DEFINE_BLEND(glow, (A == 255) ? A : FFMIN(255, (B * B / (255 - A))))
DEFINE_BLEND(and, A & B)
DEFINE_BLEND(or, A | B)
DEFINE_BLEND(xor, A ^ B)
DEFINE_BLEND(vividlight, (A < 128) ? BURN(2 * A, B) : DODGE(2 * (A - 128), B))
+DEFINE_BLEND(linearlight,av_clip_uint8((B < 128) ? B + 2 * A - 255 : B + 2 * (A - 128)))
static void blend_expr(const uint8_t *top, int top_linesize,
const uint8_t *bottom, int bottom_linesize,
@@ -328,9 +334,11 @@ static av_cold int init(AVFilterContext *ctx)
case BLEND_DIVIDE: param->blend = blend_divide; break;
case BLEND_DODGE: param->blend = blend_dodge; break;
case BLEND_EXCLUSION: param->blend = blend_exclusion; break;
+ case BLEND_GLOW: param->blend = blend_glow; break;
case BLEND_HARDLIGHT: param->blend = blend_hardlight; break;
case BLEND_HARDMIX: param->blend = blend_hardmix; break;
case BLEND_LIGHTEN: param->blend = blend_lighten; break;
+ case BLEND_LINEARLIGHT:param->blend = blend_linearlight;break;
case BLEND_MULTIPLY: param->blend = blend_multiply; break;
case BLEND_NEGATION: param->blend = blend_negation; break;
case BLEND_NORMAL: param->blend = blend_normal; break;
More information about the ffmpeg-cvslog
mailing list