Re: [FFmpeg-devel] [PATCH] avfilter/vf_overlay: fix packed_rgb case

2017-12-18 Thread Paul B Mahol
On 12/18/17, Mateusz  wrote:
> Signed-off-by: Mateusz Brzostek 
> ---
>  libavfilter/vf_overlay.c | 17 ++---
>  1 file 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)
> --
> 2.15.1.windows.2
>
> ___
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>

lgtm
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH] avfilter/vf_overlay: fix packed_rgb case

2017-12-17 Thread Mateusz
Signed-off-by: Mateusz Brzostek 
---
 libavfilter/vf_overlay.c | 17 ++---
 1 file 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)
-- 
2.15.1.windows.2

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel