mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-29 19:50:40 +00:00
69b5aedc58
This option allows the videomixer2 element to output a valid alpha channel when the inputs contain a valid alpha channel. This allows mixing to occur in multiple stages serially. The following pipeline shows an example of such a pipeline: gst-launch videotestsrc background-color=0x000000 pattern=ball ! video/x-raw-yuv,format=\(fourcc\)AYUV ! videomixer2 background=transparent name=mix1 ! videomixer2 name=mix2 ! ffmpegcolorspace ! autovideosink videotestsrc ! video/x-raw-yuv,format=\(fourcc\)AYUV ! mix2. The first videotestsrc in this pipeline creates a moving ball on a transparent background. It is then passed to the first videomixer2. Previously, this videomixer2 would have forced the alpha channel to 1.0 and given a background of checker, black, or white to the stream. With this patch, however, you can now specify the background as transparent, and the alpha channel of the input will be preserved. This allows for further mixing downstream, as is shown in the above pipeline where the a second videomixer2 is used to mix in a background of an smpte videotestsrc. So the result is a ball hovering over the smpte test source. This could, of course, have been accomplished with a single mixer element, but staged mixing is useful when it is not convenient to mix all video at once (e.g. a pipeline where a foreground and background bin exist and are mixed at the final output, but the foreground bin needs an internal mixer to create transitions between clips). Fixes bug #639994.
96 lines
4.9 KiB
C
96 lines
4.9 KiB
C
/*
|
|
* Copyright (C) 2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Library General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Library General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Library General Public
|
|
* License along with this library; if not, write to the
|
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
* Boston, MA 02111-1307, USA.
|
|
*/
|
|
|
|
#ifndef __BLEND_H__
|
|
#define __BLEND_H__
|
|
|
|
#include <gst/gst.h>
|
|
|
|
typedef void (*BlendFunction) (const guint8 * src, gint xpos, gint ypos, gint src_width, gint src_height, gdouble src_alpha, guint8 * dest, gint dest_width, gint dest_height);
|
|
typedef void (*FillCheckerFunction) (guint8 * dest, gint width, gint height);
|
|
typedef void (*FillColorFunction) (guint8 * dest, gint width, gint height, gint c1, gint c2, gint c3);
|
|
|
|
extern BlendFunction gst_video_mixer_blend_argb;
|
|
extern BlendFunction gst_video_mixer_blend_bgra;
|
|
#define gst_video_mixer_blend_ayuv gst_video_mixer_blend_argb
|
|
#define gst_video_mixer_blend_abgr gst_video_mixer_blend_argb
|
|
#define gst_video_mixer_blend_rgba gst_video_mixer_blend_bgra
|
|
extern BlendFunction gst_video_mixer_overlay_argb;
|
|
extern BlendFunction gst_video_mixer_overlay_bgra;
|
|
#define gst_video_mixer_overlay_ayuv gst_video_mixer_overlay_argb
|
|
#define gst_video_mixer_overlay_abgr gst_video_mixer_overlay_argb
|
|
#define gst_video_mixer_overlay_rgba gst_video_mixer_overlay_bgra
|
|
extern BlendFunction gst_video_mixer_blend_i420;
|
|
#define gst_video_mixer_blend_yv12 gst_video_mixer_blend_i420
|
|
extern BlendFunction gst_video_mixer_blend_y41b;
|
|
extern BlendFunction gst_video_mixer_blend_y42b;
|
|
extern BlendFunction gst_video_mixer_blend_y444;
|
|
extern BlendFunction gst_video_mixer_blend_rgb;
|
|
#define gst_video_mixer_blend_bgr gst_video_mixer_blend_rgb
|
|
extern BlendFunction gst_video_mixer_blend_rgbx;
|
|
#define gst_video_mixer_blend_bgrx gst_video_mixer_blend_rgbx
|
|
#define gst_video_mixer_blend_xrgb gst_video_mixer_blend_rgbx
|
|
#define gst_video_mixer_blend_xbgr gst_video_mixer_blend_rgbx
|
|
extern BlendFunction gst_video_mixer_blend_yuy2;
|
|
#define gst_video_mixer_blend_uyvy gst_video_mixer_blend_yuy2;
|
|
#define gst_video_mixer_blend_yvyu gst_video_mixer_blend_yuy2;
|
|
|
|
extern FillCheckerFunction gst_video_mixer_fill_checker_argb;
|
|
#define gst_video_mixer_fill_checker_abgr gst_video_mixer_fill_checker_argb
|
|
extern FillCheckerFunction gst_video_mixer_fill_checker_bgra;
|
|
#define gst_video_mixer_fill_checker_rgba gst_video_mixer_fill_checker_bgra
|
|
extern FillCheckerFunction gst_video_mixer_fill_checker_ayuv;
|
|
extern FillCheckerFunction gst_video_mixer_fill_checker_i420;
|
|
#define gst_video_mixer_fill_checker_yv12 gst_video_mixer_fill_checker_i420
|
|
extern FillCheckerFunction gst_video_mixer_fill_checker_y41b;
|
|
extern FillCheckerFunction gst_video_mixer_fill_checker_y42b;
|
|
extern FillCheckerFunction gst_video_mixer_fill_checker_y444;
|
|
extern FillCheckerFunction gst_video_mixer_fill_checker_rgb;
|
|
#define gst_video_mixer_fill_checker_bgr gst_video_mixer_fill_checker_rgb
|
|
extern FillCheckerFunction gst_video_mixer_fill_checker_rgbx;
|
|
#define gst_video_mixer_fill_checker_bgrx gst_video_mixer_fill_checker_rgbx
|
|
#define gst_video_mixer_fill_checker_xrgb gst_video_mixer_fill_checker_rgbx
|
|
#define gst_video_mixer_fill_checker_xbgr gst_video_mixer_fill_checker_rgbx
|
|
extern FillCheckerFunction gst_video_mixer_fill_checker_yuy2;
|
|
#define gst_video_mixer_fill_checker_yvyu gst_video_mixer_fill_checker_yuy2;
|
|
extern FillCheckerFunction gst_video_mixer_fill_checker_uyvy;
|
|
|
|
extern FillColorFunction gst_video_mixer_fill_color_argb;
|
|
extern FillColorFunction gst_video_mixer_fill_color_abgr;
|
|
extern FillColorFunction gst_video_mixer_fill_color_bgra;
|
|
extern FillColorFunction gst_video_mixer_fill_color_rgba;
|
|
extern FillColorFunction gst_video_mixer_fill_color_ayuv;
|
|
extern FillColorFunction gst_video_mixer_fill_color_i420;
|
|
extern FillColorFunction gst_video_mixer_fill_color_yv12;
|
|
extern FillColorFunction gst_video_mixer_fill_color_y41b;
|
|
extern FillColorFunction gst_video_mixer_fill_color_y42b;
|
|
extern FillColorFunction gst_video_mixer_fill_color_y444;
|
|
extern FillColorFunction gst_video_mixer_fill_color_rgb;
|
|
extern FillColorFunction gst_video_mixer_fill_color_bgr;
|
|
extern FillColorFunction gst_video_mixer_fill_color_xrgb;
|
|
extern FillColorFunction gst_video_mixer_fill_color_xbgr;
|
|
extern FillColorFunction gst_video_mixer_fill_color_rgbx;
|
|
extern FillColorFunction gst_video_mixer_fill_color_bgrx;
|
|
extern FillColorFunction gst_video_mixer_fill_color_yuy2;
|
|
extern FillColorFunction gst_video_mixer_fill_color_yvyu;
|
|
extern FillColorFunction gst_video_mixer_fill_color_uyvy;
|
|
|
|
void gst_video_mixer_init_blend (void);
|
|
|
|
#endif /* __BLEND_H__ */
|