diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2009-07-10 19:34:41 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2009-07-10 19:35:49 +0200 |
commit | 0bf61ecfaf28bb72d2b4cdd20295e8677eef41ed (patch) | |
tree | cdc0e0d6093aed4ceab1fedd06bc1e06f3d50062 /gst/videomixer/videomixer.c | |
parent | bbcb4f8f1501bcb442f48cc1cf1f315a0b18064b (diff) |
videomixer: Add RGB, BGR, xRGB, RGBx, xBGR, BGRx support
Diffstat (limited to 'gst/videomixer/videomixer.c')
-rw-r--r-- | gst/videomixer/videomixer.c | 83 |
1 files changed, 81 insertions, 2 deletions
diff --git a/gst/videomixer/videomixer.c b/gst/videomixer/videomixer.c index cd463148..61409bf0 100644 --- a/gst/videomixer/videomixer.c +++ b/gst/videomixer/videomixer.c @@ -116,6 +116,43 @@ void gst_videomixer_blend_argb_argb (guint8 * src, gint xpos, gint ypos, void gst_videomixer_fill_argb_checker (guint8 * dest, gint width, gint height); void gst_videomixer_fill_argb_color (guint8 * dest, gint width, gint height, gint colY, gint colU, gint colV); +/* RGB function definitions see file: blend_rgb.c */ +void gst_videomixer_blend_rgb_rgb (guint8 * src, gint xpos, gint ypos, + gint src_width, gint src_height, gdouble src_alpha, + guint8 * dest, gint dest_width, gint dest_height); +void gst_videomixer_fill_rgb_checker (guint8 * dest, gint width, gint height); +void gst_videomixer_fill_rgb_color (guint8 * dest, gint width, gint height, + gint colY, gint colU, gint colV); +void gst_videomixer_blend_bgr_bgr (guint8 * src, gint xpos, gint ypos, + gint src_width, gint src_height, gdouble src_alpha, + guint8 * dest, gint dest_width, gint dest_height); +void gst_videomixer_fill_bgr_checker (guint8 * dest, gint width, gint height); +void gst_videomixer_fill_bgr_color (guint8 * dest, gint width, gint height, + gint colY, gint colU, gint colV); +void gst_videomixer_blend_xrgb_xrgb (guint8 * src, gint xpos, gint ypos, + gint src_width, gint src_height, gdouble src_alpha, + guint8 * dest, gint dest_width, gint dest_height); +void gst_videomixer_fill_xrgb_checker (guint8 * dest, gint width, gint height); +void gst_videomixer_fill_xrgb_color (guint8 * dest, gint width, gint height, + gint colY, gint colU, gint colV); +void gst_videomixer_blend_xbgr_xbgr (guint8 * src, gint xpos, gint ypos, + gint src_width, gint src_height, gdouble src_alpha, + guint8 * dest, gint dest_width, gint dest_height); +void gst_videomixer_fill_xbgr_checker (guint8 * dest, gint width, gint height); +void gst_videomixer_fill_xbgr_color (guint8 * dest, gint width, gint height, + gint colY, gint colU, gint colV); +void gst_videomixer_blend_rgbx_rgbx (guint8 * src, gint xpos, gint ypos, + gint src_width, gint src_height, gdouble src_alpha, + guint8 * dest, gint dest_width, gint dest_height); +void gst_videomixer_fill_rgbx_checker (guint8 * dest, gint width, gint height); +void gst_videomixer_fill_rgbx_color (guint8 * dest, gint width, gint height, + gint colY, gint colU, gint colV); +void gst_videomixer_blend_bgrx_bgrx (guint8 * src, gint xpos, gint ypos, + gint src_width, gint src_height, gdouble src_alpha, + guint8 * dest, gint dest_width, gint dest_height); +void gst_videomixer_fill_bgrx_checker (guint8 * dest, gint width, gint height); +void gst_videomixer_fill_bgrx_color (guint8 * dest, gint width, gint height, + gint colY, gint colU, gint colV); /*I420 function definitions see file: blend_i420.c*/ void gst_videomixer_blend_i420_i420 (guint8 * src, gint xpos, gint ypos, gint src_width, gint src_height, gdouble src_alpha, @@ -450,14 +487,20 @@ static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("AYUV") ";" GST_VIDEO_CAPS_BGRA ";" - GST_VIDEO_CAPS_ARGB ";" GST_VIDEO_CAPS_YUV ("I420")) + GST_VIDEO_CAPS_ARGB ";" GST_VIDEO_CAPS_YUV ("I420") + ";" GST_VIDEO_CAPS_RGB ";" GST_VIDEO_CAPS_BGR + ";" GST_VIDEO_CAPS_xRGB ";" GST_VIDEO_CAPS_xBGR + ";" GST_VIDEO_CAPS_RGBx ";" GST_VIDEO_CAPS_BGRx) ); static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink_%d", GST_PAD_SINK, GST_PAD_REQUEST, GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("AYUV") ";" GST_VIDEO_CAPS_BGRA ";" - GST_VIDEO_CAPS_ARGB ";" GST_VIDEO_CAPS_YUV ("I420")) + GST_VIDEO_CAPS_ARGB ";" GST_VIDEO_CAPS_YUV ("I420") + ";" GST_VIDEO_CAPS_RGB ";" GST_VIDEO_CAPS_BGR + ";" GST_VIDEO_CAPS_xRGB ";" GST_VIDEO_CAPS_xBGR + ";" GST_VIDEO_CAPS_RGBx ";" GST_VIDEO_CAPS_BGRx) ); static void gst_videomixer_finalize (GObject * object); @@ -940,6 +983,42 @@ gst_videomixer_setcaps (GstPad * pad, GstCaps * caps) mixer->fill_color = gst_videomixer_fill_argb_color; ret = TRUE; break; + case GST_VIDEO_FORMAT_RGB: + mixer->blend = gst_videomixer_blend_rgb_rgb; + mixer->fill_checker = gst_videomixer_fill_rgb_checker; + mixer->fill_color = gst_videomixer_fill_rgb_color; + ret = TRUE; + break; + case GST_VIDEO_FORMAT_BGR: + mixer->blend = gst_videomixer_blend_bgr_bgr; + mixer->fill_checker = gst_videomixer_fill_bgr_checker; + mixer->fill_color = gst_videomixer_fill_bgr_color; + ret = TRUE; + break; + case GST_VIDEO_FORMAT_xRGB: + mixer->blend = gst_videomixer_blend_xrgb_xrgb; + mixer->fill_checker = gst_videomixer_fill_xrgb_checker; + mixer->fill_color = gst_videomixer_fill_xrgb_color; + ret = TRUE; + break; + case GST_VIDEO_FORMAT_xBGR: + mixer->blend = gst_videomixer_blend_xbgr_xbgr; + mixer->fill_checker = gst_videomixer_fill_xbgr_checker; + mixer->fill_color = gst_videomixer_fill_xbgr_color; + ret = TRUE; + break; + case GST_VIDEO_FORMAT_RGBx: + mixer->blend = gst_videomixer_blend_rgbx_rgbx; + mixer->fill_checker = gst_videomixer_fill_rgbx_checker; + mixer->fill_color = gst_videomixer_fill_rgbx_color; + ret = TRUE; + break; + case GST_VIDEO_FORMAT_BGRx: + mixer->blend = gst_videomixer_blend_bgrx_bgrx; + mixer->fill_checker = gst_videomixer_fill_bgrx_checker; + mixer->fill_color = gst_videomixer_fill_bgrx_color; + ret = TRUE; + break; default: break; } |