summaryrefslogtreecommitdiff
path: root/libavfilter/vf_overlay.c
diff options
context:
space:
mode:
authorMateusz <mateuszb@poczta.onet.pl>2017-12-18 04:02:25 +0100
committerPaul B Mahol <onemda@gmail.com>2017-12-18 14:48:37 +0100
commit6260ab60a80fd8baebf79f9ce9299b0db72333b5 (patch)
tree6aa3a99bef44d71d040e31fdd2083768f621a40c /libavfilter/vf_overlay.c
parentdf3222d4bb18cbceda443def17b1b29067ed6e3f (diff)
avfilter/vf_overlay: fix packed_rgb case
Signed-off-by: Mateusz Brzostek <mateuszb@poczta.onet.pl>
Diffstat (limited to 'libavfilter/vf_overlay.c')
-rw-r--r--libavfilter/vf_overlay.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/libavfilter/vf_overlay.c b/libavfilter/vf_overlay.c
index a7d3906016..aa5835ae3a 100644
--- a/libavfilter/vf_overlay.c
+++ b/libavfilter/vf_overlay.c
@@ -456,9 +456,12 @@ static av_always_inline void blend_image_packed_rgb(AVFilterContext *ctx,
default:
// main_value = main_value * (1 - alpha) + overlay_value * alpha
// since alpha is in the range 0-255, the result must divided by 255
- d[dr] = is_straight ? FAST_DIV255(d[dr] * (255 - alpha) + S[sr] * alpha) : FAST_DIV255(d[dr] * (255 - alpha) + S[sr]);
- d[dg] = is_straight ? FAST_DIV255(d[dg] * (255 - alpha) + S[sg] * alpha) : FAST_DIV255(d[dr] * (255 - alpha) + S[sr]);
- d[db] = is_straight ? FAST_DIV255(d[db] * (255 - alpha) + S[sb] * alpha) : FAST_DIV255(d[dr] * (255 - alpha) + S[sr]);
+ d[dr] = is_straight ? FAST_DIV255(d[dr] * (255 - alpha) + S[sr] * alpha) :
+ FFMIN(FAST_DIV255(d[dr] * (255 - alpha)) + S[sr], 255);
+ d[dg] = is_straight ? FAST_DIV255(d[dg] * (255 - alpha) + S[sg] * alpha) :
+ FFMIN(FAST_DIV255(d[dg] * (255 - alpha)) + S[sg], 255);
+ d[db] = is_straight ? FAST_DIV255(d[db] * (255 - alpha) + S[sb] * alpha) :
+ FFMIN(FAST_DIV255(d[db] * (255 - alpha)) + S[sb], 255);
}
if (main_has_alpha) {
switch (alpha) {
@@ -742,22 +745,22 @@ static void blend_image_gbrap_pm(AVFilterContext *ctx, AVFrame *dst, const AVFra
static void blend_image_rgb(AVFilterContext *ctx, AVFrame *dst, const AVFrame *src, int x, int y)
{
- blend_image_packed_rgb(ctx, dst, src, 0, x, y, 0);
+ blend_image_packed_rgb(ctx, dst, src, 0, x, y, 1);
}
static void blend_image_rgba(AVFilterContext *ctx, AVFrame *dst, const AVFrame *src, int x, int y)
{
- blend_image_packed_rgb(ctx, dst, src, 1, x, y, 0);
+ blend_image_packed_rgb(ctx, dst, src, 1, x, y, 1);
}
static void blend_image_rgb_pm(AVFilterContext *ctx, AVFrame *dst, const AVFrame *src, int x, int y)
{
- blend_image_packed_rgb(ctx, dst, src, 0, x, y, 1);
+ blend_image_packed_rgb(ctx, dst, src, 0, x, y, 0);
}
static void blend_image_rgba_pm(AVFilterContext *ctx, AVFrame *dst, const AVFrame *src, int x, int y)
{
- blend_image_packed_rgb(ctx, dst, src, 1, x, y, 1);
+ blend_image_packed_rgb(ctx, dst, src, 1, x, y, 0);
}
static int config_input_main(AVFilterLink *inlink)