mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-24 10:41:04 +00:00
alpha: Rename and move functions as further preparation for supporting more color formats
This commit is contained in:
parent
46025bbd8f
commit
00b3eb1dfc
1 changed files with 83 additions and 83 deletions
|
@ -449,79 +449,6 @@ gst_alpha_set_caps (GstBaseTransform * btrans,
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
gst_alpha_set_ayuv (const guint8 * src, guint8 * dest, gint width, gint height,
|
|
||||||
GstAlpha * alpha)
|
|
||||||
{
|
|
||||||
gint s_alpha = CLAMP ((gint) (alpha->alpha * 256), 0, 256);
|
|
||||||
gint y, x;
|
|
||||||
|
|
||||||
for (y = 0; y < height; y++) {
|
|
||||||
for (x = 0; x < width; x++) {
|
|
||||||
*dest++ = (*src++ * s_alpha) >> 8;
|
|
||||||
*dest++ = *src++;
|
|
||||||
*dest++ = *src++;
|
|
||||||
*dest++ = *src++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gst_alpha_set_i420 (const guint8 * src, guint8 * dest, gint width, gint height,
|
|
||||||
GstAlpha * alpha)
|
|
||||||
{
|
|
||||||
gint b_alpha = CLAMP ((gint) (alpha->alpha * 255), 0, 255);
|
|
||||||
const guint8 *srcY;
|
|
||||||
const guint8 *srcU;
|
|
||||||
const guint8 *srcV;
|
|
||||||
gint i, j;
|
|
||||||
gint src_wrap, src_uv_wrap;
|
|
||||||
gint y_stride, uv_stride;
|
|
||||||
gboolean odd_width;
|
|
||||||
|
|
||||||
y_stride = gst_video_format_get_row_stride (GST_VIDEO_FORMAT_I420, 0, width);
|
|
||||||
uv_stride = gst_video_format_get_row_stride (GST_VIDEO_FORMAT_I420, 1, width);
|
|
||||||
|
|
||||||
src_wrap = y_stride - width;
|
|
||||||
src_uv_wrap = uv_stride - (width / 2);
|
|
||||||
|
|
||||||
srcY = src;
|
|
||||||
srcU = src + gst_video_format_get_component_offset (GST_VIDEO_FORMAT_I420,
|
|
||||||
1, width, height);
|
|
||||||
srcV = src + gst_video_format_get_component_offset (GST_VIDEO_FORMAT_I420,
|
|
||||||
2, width, height);
|
|
||||||
|
|
||||||
odd_width = (width % 2 != 0);
|
|
||||||
|
|
||||||
for (i = 0; i < height; i++) {
|
|
||||||
for (j = 0; j < width / 2; j++) {
|
|
||||||
*dest++ = b_alpha;
|
|
||||||
*dest++ = *srcY++;
|
|
||||||
*dest++ = *srcU;
|
|
||||||
*dest++ = *srcV;
|
|
||||||
*dest++ = b_alpha;
|
|
||||||
*dest++ = *srcY++;
|
|
||||||
*dest++ = *srcU++;
|
|
||||||
*dest++ = *srcV++;
|
|
||||||
}
|
|
||||||
/* Might have one odd column left to do */
|
|
||||||
if (odd_width) {
|
|
||||||
*dest++ = b_alpha;
|
|
||||||
*dest++ = *srcY++;
|
|
||||||
*dest++ = *srcU;
|
|
||||||
*dest++ = *srcV;
|
|
||||||
}
|
|
||||||
if (i % 2 == 0) {
|
|
||||||
srcU -= width / 2;
|
|
||||||
srcV -= width / 2;
|
|
||||||
} else {
|
|
||||||
srcU += src_uv_wrap;
|
|
||||||
srcV += src_uv_wrap;
|
|
||||||
}
|
|
||||||
srcY += src_wrap;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* based on http://www.cs.utah.edu/~michael/chroma/
|
/* based on http://www.cs.utah.edu/~michael/chroma/
|
||||||
*/
|
*/
|
||||||
static inline gint
|
static inline gint
|
||||||
|
@ -603,7 +530,80 @@ chroma_keying_yuv (gint a, gint * y, guint ny, gint * u,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_alpha_chroma_key_ayuv (const guint8 * src, guint8 * dest, gint width,
|
gst_alpha_set_ayuv_ayuv (const guint8 * src, guint8 * dest, gint width,
|
||||||
|
gint height, GstAlpha * alpha)
|
||||||
|
{
|
||||||
|
gint s_alpha = CLAMP ((gint) (alpha->alpha * 256), 0, 256);
|
||||||
|
gint y, x;
|
||||||
|
|
||||||
|
for (y = 0; y < height; y++) {
|
||||||
|
for (x = 0; x < width; x++) {
|
||||||
|
*dest++ = (*src++ * s_alpha) >> 8;
|
||||||
|
*dest++ = *src++;
|
||||||
|
*dest++ = *src++;
|
||||||
|
*dest++ = *src++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_alpha_set_i420_ayuv (const guint8 * src, guint8 * dest, gint width,
|
||||||
|
gint height, GstAlpha * alpha)
|
||||||
|
{
|
||||||
|
gint b_alpha = CLAMP ((gint) (alpha->alpha * 255), 0, 255);
|
||||||
|
const guint8 *srcY;
|
||||||
|
const guint8 *srcU;
|
||||||
|
const guint8 *srcV;
|
||||||
|
gint i, j;
|
||||||
|
gint src_wrap, src_uv_wrap;
|
||||||
|
gint y_stride, uv_stride;
|
||||||
|
gboolean odd_width;
|
||||||
|
|
||||||
|
y_stride = gst_video_format_get_row_stride (GST_VIDEO_FORMAT_I420, 0, width);
|
||||||
|
uv_stride = gst_video_format_get_row_stride (GST_VIDEO_FORMAT_I420, 1, width);
|
||||||
|
|
||||||
|
src_wrap = y_stride - width;
|
||||||
|
src_uv_wrap = uv_stride - (width / 2);
|
||||||
|
|
||||||
|
srcY = src;
|
||||||
|
srcU = src + gst_video_format_get_component_offset (GST_VIDEO_FORMAT_I420,
|
||||||
|
1, width, height);
|
||||||
|
srcV = src + gst_video_format_get_component_offset (GST_VIDEO_FORMAT_I420,
|
||||||
|
2, width, height);
|
||||||
|
|
||||||
|
odd_width = (width % 2 != 0);
|
||||||
|
|
||||||
|
for (i = 0; i < height; i++) {
|
||||||
|
for (j = 0; j < width / 2; j++) {
|
||||||
|
*dest++ = b_alpha;
|
||||||
|
*dest++ = *srcY++;
|
||||||
|
*dest++ = *srcU;
|
||||||
|
*dest++ = *srcV;
|
||||||
|
*dest++ = b_alpha;
|
||||||
|
*dest++ = *srcY++;
|
||||||
|
*dest++ = *srcU++;
|
||||||
|
*dest++ = *srcV++;
|
||||||
|
}
|
||||||
|
/* Might have one odd column left to do */
|
||||||
|
if (odd_width) {
|
||||||
|
*dest++ = b_alpha;
|
||||||
|
*dest++ = *srcY++;
|
||||||
|
*dest++ = *srcU;
|
||||||
|
*dest++ = *srcV;
|
||||||
|
}
|
||||||
|
if (i % 2 == 0) {
|
||||||
|
srcU -= width / 2;
|
||||||
|
srcV -= width / 2;
|
||||||
|
} else {
|
||||||
|
srcU += src_uv_wrap;
|
||||||
|
srcV += src_uv_wrap;
|
||||||
|
}
|
||||||
|
srcY += src_wrap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_alpha_chroma_key_ayuv_ayuv (const guint8 * src, guint8 * dest, gint width,
|
||||||
gint height, GstAlpha * alpha)
|
gint height, GstAlpha * alpha)
|
||||||
{
|
{
|
||||||
const guint8 *src1;
|
const guint8 *src1;
|
||||||
|
@ -643,9 +643,9 @@ gst_alpha_chroma_key_ayuv (const guint8 * src, guint8 * dest, gint width,
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
gst_alpha_chromakey_row_i420 (GstAlpha * alpha, guint8 * dest1, guint8 * dest2,
|
gst_alpha_chromakey_row_i420_ayuv (GstAlpha * alpha, guint8 * dest1,
|
||||||
const guint8 * srcY1, const guint8 * srcY2, const guint8 * srcU,
|
guint8 * dest2, const guint8 * srcY1, const guint8 * srcY2,
|
||||||
const guint8 * srcV, gint width)
|
const guint8 * srcU, const guint8 * srcV, gint width)
|
||||||
{
|
{
|
||||||
gint xpos;
|
gint xpos;
|
||||||
gint a, a2, y[4], u, v;
|
gint a, a2, y[4], u, v;
|
||||||
|
@ -691,7 +691,7 @@ gst_alpha_chromakey_row_i420 (GstAlpha * alpha, guint8 * dest1, guint8 * dest2,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_alpha_chroma_key_i420 (const guint8 * src, guint8 * dest, gint width,
|
gst_alpha_chroma_key_i420_ayuv (const guint8 * src, guint8 * dest, gint width,
|
||||||
gint height, GstAlpha * alpha)
|
gint height, GstAlpha * alpha)
|
||||||
{
|
{
|
||||||
const guint8 *srcY1, *srcY2, *srcU, *srcV;
|
const guint8 *srcY1, *srcY2, *srcU, *srcV;
|
||||||
|
@ -722,7 +722,7 @@ gst_alpha_chroma_key_i420 (const guint8 * src, guint8 * dest, gint width,
|
||||||
src_y_stride *= 2;
|
src_y_stride *= 2;
|
||||||
|
|
||||||
for (ypos = 0; ypos < height / 2; ypos++) {
|
for (ypos = 0; ypos < height / 2; ypos++) {
|
||||||
gst_alpha_chromakey_row_i420 (alpha, dest1, dest2,
|
gst_alpha_chromakey_row_i420_ayuv (alpha, dest1, dest2,
|
||||||
srcY1, srcY2, srcU, srcV, width);
|
srcY1, srcY2, srcU, srcV, width);
|
||||||
|
|
||||||
dest1 += dest_stride;
|
dest1 += dest_stride;
|
||||||
|
@ -792,10 +792,10 @@ gst_alpha_set_process_function (GstAlpha * alpha)
|
||||||
case GST_VIDEO_FORMAT_AYUV:
|
case GST_VIDEO_FORMAT_AYUV:
|
||||||
switch (alpha->in_format) {
|
switch (alpha->in_format) {
|
||||||
case GST_VIDEO_FORMAT_AYUV:
|
case GST_VIDEO_FORMAT_AYUV:
|
||||||
alpha->process = gst_alpha_set_ayuv;
|
alpha->process = gst_alpha_set_ayuv_ayuv;
|
||||||
break;
|
break;
|
||||||
case GST_VIDEO_FORMAT_I420:
|
case GST_VIDEO_FORMAT_I420:
|
||||||
alpha->process = gst_alpha_set_i420;
|
alpha->process = gst_alpha_set_i420_ayuv;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -811,10 +811,10 @@ gst_alpha_set_process_function (GstAlpha * alpha)
|
||||||
case GST_VIDEO_FORMAT_AYUV:
|
case GST_VIDEO_FORMAT_AYUV:
|
||||||
switch (alpha->in_format) {
|
switch (alpha->in_format) {
|
||||||
case GST_VIDEO_FORMAT_AYUV:
|
case GST_VIDEO_FORMAT_AYUV:
|
||||||
alpha->process = gst_alpha_chroma_key_ayuv;
|
alpha->process = gst_alpha_chroma_key_ayuv_ayuv;
|
||||||
break;
|
break;
|
||||||
case GST_VIDEO_FORMAT_I420:
|
case GST_VIDEO_FORMAT_I420:
|
||||||
alpha->process = gst_alpha_chroma_key_i420;
|
alpha->process = gst_alpha_chroma_key_i420_ayuv;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue