From b02949faeb1d85582c8a42450f83b80cd81329b8 Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Tue, 30 Jun 2009 12:43:04 +0200 Subject: videomixer: I420 mode: Add fast path for 0.0 and 1.0 alpha If the source alpha is 0.0, we take nothing. If the source alpha is 1.0, we overwrite everything. --- gst/videomixer/blend_i420.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'gst/videomixer') diff --git a/gst/videomixer/blend_i420.c b/gst/videomixer/blend_i420.c index e24d0ad4..015f9a10 100644 --- a/gst/videomixer/blend_i420.c +++ b/gst/videomixer/blend_i420.c @@ -190,6 +190,24 @@ gst_i420_do_blend (guint8 * src, guint8 * dest, gint dest_width, gdouble src_alpha) { int i, j; + + /* If it's completely transparent... we just return */ + if (G_UNLIKELY (src_alpha == 0.0)) { + GST_INFO ("Fast copy (alpha == 0.0)"); + return; + } + + /* If it's completely opaque, we do a fast copy */ + if (G_UNLIKELY (src_alpha == 1.0)) { + GST_INFO ("Fast copy (alpha == 1.0)"); + for (i = 0; i < src_height; i++) { + memcpy (dest, src, src_width); + src += src_stride; + dest += dest_stride; + } + return; + } + for (i = 0; i < src_height; i++) { for (j = 0; j < src_width; j++) { *dest = src_alpha * (*src) + (1. - src_alpha) * (*dest); -- cgit