summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWim Taymans <wtaymans@redhat.com>2015-02-24 17:26:31 +0100
committerWim Taymans <wtaymans@redhat.com>2015-02-24 17:29:18 +0100
commit5077a5e3af29071ae0ad88068942d91db9972ac0 (patch)
treeda531dad71717272eb57431d347f0d98d927fe6f
parent5744b7995c8361cc1e481aed1bf0e0f853ed312b (diff)
video-converter: add alpha handling
Add support for alpha. Make it possible to copy, set and multiply the alpha value of a frame during conversion. Set the border alpha to 0xff by default. Go over some of the fastpaths and add alpha handling. Fixes https://bugzilla.gnome.org/show_bug.cgi?id=745006
-rw-r--r--gst-libs/gst/video/video-converter.c553
-rw-r--r--gst-libs/gst/video/video-converter.h28
-rw-r--r--gst-libs/gst/video/video-orc-dist.c160
-rw-r--r--gst-libs/gst/video/video-orc-dist.h10
-rw-r--r--gst-libs/gst/video/video-orc.orc22
5 files changed, 489 insertions, 284 deletions
diff --git a/gst-libs/gst/video/video-converter.c b/gst-libs/gst/video/video-converter.c
index 9eda3f488..a619769cd 100644
--- a/gst-libs/gst/video/video-converter.c
+++ b/gst-libs/gst/video/video-converter.c
@@ -123,6 +123,14 @@ struct _GammaData
void (*gamma_func) (GammaData * data, gpointer dest, gpointer src);
};
+typedef enum
+{
+ ALPHA_MODE_NONE = 0,
+ ALPHA_MODE_COPY = (1 << 0),
+ ALPHA_MODE_SET = (1 << 1),
+ ALPHA_MODE_MULT = (1 << 2)
+} AlphaMode;
+
typedef struct
{
guint8 *data;
@@ -170,6 +178,8 @@ struct _GstVideoConverter
gpointer borderline;
guint64 borders[4];
guint32 border_argb;
+ guint32 alpha_value;
+ AlphaMode alpha_mode;
void (*convert) (GstVideoConverter * convert, const GstVideoFrame * src,
GstVideoFrame * dest);
@@ -213,6 +223,10 @@ struct _GstVideoConverter
gint in_bits;
gint out_bits;
+ /* alpha correction */
+ GstLineCache *alpha_lines;
+ void (*alpha_func) (GstVideoConverter * convert, gpointer pixels, gint width);
+
/* gamma encode */
GammaData gamma_enc;
/* to Y'CbCr */
@@ -422,6 +436,8 @@ static gboolean do_convert_to_RGB_lines (GstLineCache * cache, gint out_line,
gint in_line, gpointer user_data);
static gboolean do_convert_lines (GstLineCache * cache, gint out_line,
gint in_line, gpointer user_data);
+static gboolean do_alpha_lines (GstLineCache * cache, gint out_line,
+ gint in_line, gpointer user_data);
static gboolean do_convert_to_YUV_lines (GstLineCache * cache, gint out_line,
gint in_line, gpointer user_data);
static gboolean do_upsample_lines (GstLineCache * cache, gint out_line,
@@ -518,6 +534,15 @@ get_opt_uint (GstVideoConverter * convert, const gchar * opt, guint def)
return res;
}
+static gdouble
+get_opt_double (GstVideoConverter * convert, const gchar * opt, gdouble def)
+{
+ gdouble res;
+ if (!gst_structure_get_double (convert->config, opt, &res))
+ res = def;
+ return res;
+}
+
static gboolean
get_opt_bool (GstVideoConverter * convert, const gchar * opt, gboolean def)
{
@@ -547,7 +572,10 @@ get_opt_str (GstVideoConverter * convert, const gchar * opt, const gchar * def)
}
#define DEFAULT_OPT_FILL_BORDER TRUE
-#define DEFAULT_OPT_BORDER_ARGB 0x00000000
+#define DEFAULT_OPT_ALPHA_VALUE 0.5
+/* options copy, set, mult */
+#define DEFAULT_OPT_ALPHA_MODE "copy"
+#define DEFAULT_OPT_BORDER_ARGB 0xff000000
/* options full, input-only, output-only, none */
#define DEFAULT_OPT_MATRIX_MODE "full"
/* none, remap */
@@ -564,6 +592,10 @@ get_opt_str (GstVideoConverter * convert, const gchar * opt, const gchar * def)
#define GET_OPT_FILL_BORDER(c) get_opt_bool(c, \
GST_VIDEO_CONVERTER_OPT_FILL_BORDER, DEFAULT_OPT_FILL_BORDER)
+#define GET_OPT_ALPHA_VALUE(c) get_opt_double(c, \
+ GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE, DEFAULT_OPT_ALPHA_VALUE)
+#define GET_OPT_ALPHA_MODE(c) get_opt_str(c, \
+ GST_VIDEO_CONVERTER_OPT_ALPHA_MODE, DEFAULT_OPT_ALPHA_MODE)
#define GET_OPT_BORDER_ARGB(c) get_opt_uint(c, \
GST_VIDEO_CONVERTER_OPT_BORDER_ARGB, DEFAULT_OPT_BORDER_ARGB)
#define GET_OPT_MATRIX_MODE(c) get_opt_str(c, \
@@ -588,6 +620,10 @@ get_opt_str (GstVideoConverter * convert, const gchar * opt, const gchar * def)
#define GET_OPT_DITHER_QUANTIZATION(c) get_opt_uint(c, \
GST_VIDEO_CONVERTER_OPT_DITHER_QUANTIZATION, DEFAULT_OPT_DITHER_QUANTIZATION)
+#define CHECK_ALPHA_COPY(c) (!g_strcmp0(GET_OPT_ALPHA_MODE(c), "copy"))
+#define CHECK_ALPHA_SET(c) (!g_strcmp0(GET_OPT_ALPHA_MODE(c), "set"))
+#define CHECK_ALPHA_MULT(c) (!g_strcmp0(GET_OPT_ALPHA_MODE(c), "mult"))
+
#define CHECK_MATRIX_FULL(c) (!g_strcmp0(GET_OPT_MATRIX_MODE(c), "full"))
#define CHECK_MATRIX_INPUT(c) (!g_strcmp0(GET_OPT_MATRIX_MODE(c), "input-only"))
#define CHECK_MATRIX_OUTPUT(c) (!g_strcmp0(GET_OPT_MATRIX_MODE(c), "output-only"))
@@ -1317,7 +1353,7 @@ chain_scale (GstVideoConverter * convert, GstLineCache * prev, gboolean force)
s0 = convert->current_width * convert->current_height;
s3 = convert->out_width * convert->out_height;
- GST_DEBUG ("%d <> %d", s0, s3);
+ GST_DEBUG ("in pixels %d <> out pixels %d", s0, s3);
if (s3 <= s0 || force) {
/* we are making the image smaller or are forced to resample */
@@ -1468,6 +1504,92 @@ chain_convert (GstVideoConverter * convert, GstLineCache * prev)
return prev;
}
+static void
+convert_set_alpha_u8 (GstVideoConverter * convert, gpointer pixels, gint width)
+{
+ guint8 *p = pixels;
+ guint8 alpha = CLAMP (convert->alpha_value, 0, 255);
+ int i;
+
+ for (i = 0; i < width; i++)
+ p[i * 4] = alpha;
+}
+
+static void
+convert_set_alpha_u16 (GstVideoConverter * convert, gpointer pixels, gint width)
+{
+ guint16 *p = pixels;
+ guint16 alpha;
+ int i;
+
+ alpha = CLAMP (convert->alpha_value, 0, 255);
+ alpha |= alpha << 8;
+
+ for (i = 0; i < width; i++)
+ p[i * 4] = alpha;
+}
+
+static void
+convert_mult_alpha_u8 (GstVideoConverter * convert, gpointer pixels, gint width)
+{
+ guint8 *p = pixels;
+ guint alpha = convert->alpha_value;
+ int i;
+
+ for (i = 0; i < width; i++) {
+ gint a = (p[i * 4] * alpha) / 255;
+ p[i * 4] = CLAMP (a, 0, 255);
+ }
+}
+
+static void
+convert_mult_alpha_u16 (GstVideoConverter * convert, gpointer pixels,
+ gint width)
+{
+ guint16 *p = pixels;
+ guint alpha = convert->alpha_value;
+ int i;
+
+ for (i = 0; i < width; i++) {
+ gint a = (p[i * 4] * alpha) / 255;
+ p[i * 4] = CLAMP (a, 0, 255);
+ }
+}
+
+static GstLineCache *
+chain_alpha (GstVideoConverter * convert, GstLineCache * prev)
+{
+ switch (convert->alpha_mode) {
+ case ALPHA_MODE_NONE:
+ case ALPHA_MODE_COPY:
+ return prev;
+
+ case ALPHA_MODE_SET:
+ if (convert->current_bits == 8)
+ convert->alpha_func = convert_set_alpha_u8;
+ else
+ convert->alpha_func = convert_set_alpha_u16;
+ break;
+ case ALPHA_MODE_MULT:
+ if (convert->current_bits == 8)
+ convert->alpha_func = convert_mult_alpha_u8;
+ else
+ convert->alpha_func = convert_mult_alpha_u16;
+ break;
+ }
+
+ GST_DEBUG ("chain alpha mode %d", convert->alpha_mode);
+ prev = convert->alpha_lines = gst_line_cache_new (prev);
+ prev->write_input = TRUE;
+ prev->pass_alloc = TRUE;
+ prev->n_lines = 1;
+ prev->stride = convert->current_pstride * convert->current_width;
+ gst_line_cache_set_need_line_func (convert->alpha_lines,
+ do_alpha_lines, convert, NULL);
+
+ return prev;
+}
+
static GstLineCache *
chain_convert_to_YUV (GstVideoConverter * convert, GstLineCache * prev)
{
@@ -1741,6 +1863,38 @@ setup_borderline (GstVideoConverter * convert)
}
}
+static AlphaMode
+convert_get_alpha_mode (GstVideoConverter * convert)
+{
+ gboolean in_alpha, out_alpha;
+
+ in_alpha = GST_VIDEO_INFO_HAS_ALPHA (&convert->in_info);
+ out_alpha = GST_VIDEO_INFO_HAS_ALPHA (&convert->out_info);
+
+ /* no output alpha, do nothing */
+ if (!out_alpha)
+ return ALPHA_MODE_NONE;
+
+ if (in_alpha) {
+ /* in and out */
+ if (CHECK_ALPHA_COPY (convert))
+ return ALPHA_MODE_COPY;
+
+ if (CHECK_ALPHA_MULT (convert)) {
+ if (GET_OPT_ALPHA_VALUE (convert) == 1.0)
+ return ALPHA_MODE_COPY;
+ else
+ return ALPHA_MODE_MULT;
+ }
+ }
+ /* nothing special, this is what unpack etc does automatically */
+ if (GET_OPT_ALPHA_VALUE (convert) == 1.0)
+ return ALPHA_MODE_NONE;
+
+ /* everything else becomes SET */
+ return ALPHA_MODE_SET;
+}
+
/**
* gst_video_converter_new:
* @in_info: a #GstVideoInfo
@@ -1761,6 +1915,8 @@ gst_video_converter_new (GstVideoInfo * in_info, GstVideoInfo * out_info,
GstVideoConverter *convert;
GstLineCache *prev;
const GstVideoFormatInfo *fin, *fout, *finfo;
+ gdouble alpha_value;
+ guint8 av255;
g_return_val_if_fail (in_info != NULL, NULL);
g_return_val_if_fail (out_info != NULL, NULL);
@@ -1822,10 +1978,23 @@ gst_video_converter_new (GstVideoInfo * in_info, GstVideoInfo * out_info,
convert->out_height =
MIN (convert->out_height, convert->out_maxheight - convert->out_y);
- convert->fill_border = get_opt_bool (convert,
- GST_VIDEO_CONVERTER_OPT_FILL_BORDER, TRUE);
+ convert->fill_border = GET_OPT_FILL_BORDER (convert);
convert->border_argb = get_opt_uint (convert,
- GST_VIDEO_CONVERTER_OPT_BORDER_ARGB, 0x00000000);
+ GST_VIDEO_CONVERTER_OPT_BORDER_ARGB, DEFAULT_OPT_BORDER_ARGB);
+
+ alpha_value = GET_OPT_ALPHA_VALUE (convert);
+ convert->alpha_value = 255 * alpha_value;
+ if (CHECK_ALPHA_SET (convert)) {
+ av255 = CLAMP (convert->alpha_value, 0, 255);
+ } else {
+ av255 = convert->border_argb >> 24;
+ if (CHECK_ALPHA_MULT (convert)) {
+ av255 = (av255 * convert->alpha_value) / 255;
+ av255 = CLAMP (av255, 0, 255);
+ }
+ }
+ convert->border_argb = (av255 << 24) | (convert->border_argb & 0x00ffffff);
+ convert->alpha_mode = convert_get_alpha_mode (convert);
convert->unpack_format = in_info->finfo->unpack_format;
finfo = gst_video_format_get_info (convert->unpack_format);
@@ -1865,6 +2034,8 @@ gst_video_converter_new (GstVideoInfo * in_info, GstVideoInfo * out_info,
prev = chain_scale (convert, prev, FALSE);
/* do conversion between color spaces */
prev = chain_convert (convert, prev);
+ /* do alpha channels */
+ prev = chain_alpha (convert, prev);
/* do all remaining (up)scaling */
prev = chain_scale (convert, prev, TRUE);
/* convert to gamma encoded Y'Cb'Cr' */
@@ -1942,6 +2113,8 @@ gst_video_converter_free (GstVideoConverter * convert)
gst_line_cache_free (convert->vscale_lines);
if (convert->convert_lines)
gst_line_cache_free (convert->convert_lines);
+ if (convert->alpha_lines)
+ gst_line_cache_free (convert->alpha_lines);
if (convert->to_YUV_lines)
gst_line_cache_free (convert->to_YUV_lines);
if (convert->downsample_lines)
@@ -2358,6 +2531,25 @@ do_convert_lines (GstLineCache * cache, gint out_line, gint in_line,
}
static gboolean
+do_alpha_lines (GstLineCache * cache, gint out_line, gint in_line,
+ gpointer user_data)
+{
+ gpointer *lines, destline;
+ GstVideoConverter *convert = user_data;
+ gint width = MIN (convert->in_width, convert->out_width);
+
+ lines = gst_line_cache_get_lines (cache->prev, out_line, in_line, 1);
+ destline = lines[0];
+
+ GST_DEBUG ("alpha line %d %p", in_line, destline);
+ convert->alpha_func (convert, destline, width);
+
+ gst_line_cache_add_line (cache, in_line, destline);
+
+ return TRUE;
+}
+
+static gboolean
do_convert_to_YUV_lines (GstLineCache * cache, gint out_line, gint in_line,
gpointer user_data)
{
@@ -2592,6 +2784,7 @@ convert_I420_AYUV (GstVideoConverter * convert, const GstVideoFrame * src,
gint width = convert->in_width;
gint height = convert->in_height;
gboolean interlaced = GST_VIDEO_FRAME_IS_INTERLACED (src);
+ guint8 alpha = CLAMP (convert->alpha_value, 0, 255);
gint l1, l2;
for (i = 0; i < GST_ROUND_DOWN_2 (height); i += 2) {
@@ -2601,12 +2794,15 @@ convert_I420_AYUV (GstVideoConverter * convert, const GstVideoFrame * src,
FRAME_GET_LINE (dest, l2),
FRAME_GET_Y_LINE (src, l1),
FRAME_GET_Y_LINE (src, l2),
- FRAME_GET_U_LINE (src, i >> 1), FRAME_GET_V_LINE (src, i >> 1), width);
+ FRAME_GET_U_LINE (src, i >> 1), FRAME_GET_V_LINE (src, i >> 1),
+ alpha, width);
}
/* now handle last line */
if (height & 1) {
UNPACK_FRAME (src, convert->tmpline, height - 1, convert->in_x, width);
+ if (alpha != 0xff)
+ convert_set_alpha_u8 (convert, convert->tmpline, width);
PACK_FRAME (dest, convert->tmpline, height - 1, width);
}
}
@@ -2645,6 +2841,7 @@ convert_YUY2_AYUV (GstVideoConverter * convert, const GstVideoFrame * src,
gint width = convert->in_width;
gint height = convert->in_height;
guint8 *s, *d;
+ guint8 alpha = CLAMP (convert->alpha_value, 0, 255);
s = FRAME_GET_LINE (src, convert->in_y);
s += (GST_ROUND_UP_2 (convert->in_x) * 2);
@@ -2652,7 +2849,7 @@ convert_YUY2_AYUV (GstVideoConverter * convert, const GstVideoFrame * src,
d += (convert->out_x * 4);
video_orc_convert_YUY2_AYUV (d, FRAME_GET_STRIDE (dest), s,
- FRAME_GET_STRIDE (src), (width + 1) / 2, height);
+ FRAME_GET_STRIDE (src), alpha, (width + 1) / 2, height);
convert_fill_border (convert, dest);
}
@@ -2744,6 +2941,7 @@ convert_UYVY_AYUV (GstVideoConverter * convert, const GstVideoFrame * src,
gint width = convert->in_width;
gint height = convert->in_height;
guint8 *s, *d;
+ guint8 alpha = CLAMP (convert->alpha_value, 0, 255);
s = FRAME_GET_LINE (src, convert->in_y);
s += (GST_ROUND_UP_2 (convert->in_x) * 2);
@@ -2752,7 +2950,7 @@ convert_UYVY_AYUV (GstVideoConverter * convert, const GstVideoFrame * src,
video_orc_convert_UYVY_AYUV (d,
FRAME_GET_STRIDE (dest), s,
- FRAME_GET_STRIDE (src), (width + 1) / 2, height);
+ FRAME_GET_STRIDE (src), alpha, (width + 1) / 2, height);
convert_fill_border (convert, dest);
}
@@ -3020,6 +3218,7 @@ convert_Y42B_AYUV (GstVideoConverter * convert, const GstVideoFrame * src,
gint width = convert->in_width;
gint height = convert->in_height;
guint8 *sy, *su, *sv, *d;
+ guint8 alpha = CLAMP (convert->alpha_value, 0, 255);
sy = FRAME_GET_Y_LINE (src, convert->in_y);
sy += convert->in_x;
@@ -3036,7 +3235,7 @@ convert_Y42B_AYUV (GstVideoConverter * convert, const GstVideoFrame * src,
FRAME_GET_STRIDE (dest), sy,
FRAME_GET_Y_STRIDE (src), su,
FRAME_GET_U_STRIDE (src), sv,
- FRAME_GET_V_STRIDE (src), width / 2, height);
+ FRAME_GET_V_STRIDE (src), alpha, width / 2, height);
convert_fill_border (convert, dest);
}
@@ -3102,6 +3301,7 @@ convert_Y444_AYUV (GstVideoConverter * convert, const GstVideoFrame * src,
gint width = convert->in_width;
gint height = convert->in_height;
guint8 *sy, *su, *sv, *d;
+ guint8 alpha = CLAMP (convert->alpha_value, 0, 255);
sy = FRAME_GET_Y_LINE (src, convert->in_y);
sy += convert->in_x;
@@ -3116,7 +3316,8 @@ convert_Y444_AYUV (GstVideoConverter * convert, const GstVideoFrame * src,
video_orc_convert_Y444_AYUV (d,
FRAME_GET_STRIDE (dest), sy,
FRAME_GET_Y_STRIDE (src), su,
- FRAME_GET_U_STRIDE (src), sv, FRAME_GET_V_STRIDE (src), width, height);
+ FRAME_GET_U_STRIDE (src), sv, FRAME_GET_V_STRIDE (src), alpha, width,
+ height);
convert_fill_border (convert, dest);
}
@@ -3806,14 +4007,14 @@ setup_scale (GstVideoConverter * convert)
convert->fconvert[i] = convert_plane_fill;
if (GST_VIDEO_INFO_IS_YUV (out_info)) {
if (i == 3)
- convert->ffill[i] = 0xff;
+ convert->ffill[i] = convert->alpha_value;
if (i == 0)
convert->ffill[i] = 0x00;
else
convert->ffill[i] = 0x80;
} else {
if (i == 3)
- convert->ffill[i] = 0xff;
+ convert->ffill[i] = convert->alpha_value;
else
convert->ffill[i] = 0x00;
}
@@ -3905,6 +4106,9 @@ typedef struct
gboolean keeps_size;
gboolean do_crop;
gboolean do_border;
+ gboolean alpha_copy;
+ gboolean alpha_set;
+ gboolean alpha_mult;
gint width_align, height_align;
void (*convert) (GstVideoConverter * convert, const GstVideoFrame * src,
GstVideoFrame * dest);
@@ -3913,357 +4117,357 @@ typedef struct
static const VideoTransform transforms[] = {
/* planar -> packed */
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, FALSE,
- FALSE, 0, 0, convert_I420_YUY2},
+ FALSE, FALSE, FALSE, FALSE, 0, 0, convert_I420_YUY2},
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, FALSE,
- FALSE, 0, 0, convert_I420_UYVY},
+ FALSE, FALSE, FALSE, FALSE, 0, 0, convert_I420_UYVY},
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, FALSE,
- FALSE, 0, 0, convert_I420_AYUV},
+ FALSE, FALSE, TRUE, FALSE, 0, 0, convert_I420_AYUV},
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, FALSE,
- FALSE, 0, 0, convert_I420_YUY2},
+ FALSE, FALSE, FALSE, FALSE, 0, 0, convert_I420_YUY2},
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, FALSE,
- FALSE, 0, 0, convert_I420_UYVY},
+ FALSE, FALSE, FALSE, FALSE, 0, 0, convert_I420_UYVY},
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, FALSE,
- FALSE, 0, 0, convert_I420_AYUV},
+ FALSE, FALSE, TRUE, FALSE, 0, 0, convert_I420_AYUV},
{GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, TRUE,
- TRUE, 0, 0, convert_Y42B_YUY2},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_Y42B_YUY2},
{GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, TRUE,
- TRUE, 0, 0, convert_Y42B_UYVY},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_Y42B_UYVY},
{GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, TRUE,
- TRUE, 1, 0, convert_Y42B_AYUV},
+ TRUE, FALSE, TRUE, FALSE, 1, 0, convert_Y42B_AYUV},
{GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, TRUE,
- TRUE, 1, 0, convert_Y444_YUY2},
+ TRUE, FALSE, FALSE, FALSE, 1, 0, convert_Y444_YUY2},
{GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, TRUE,
- TRUE, 1, 0, convert_Y444_UYVY},
+ TRUE, FALSE, FALSE, FALSE, 1, 0, convert_Y444_UYVY},
{GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, TRUE,
- TRUE, 0, 0, convert_Y444_AYUV},
+ TRUE, FALSE, TRUE, FALSE, 0, 0, convert_Y444_AYUV},
/* packed -> packed */
{GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, TRUE,
- TRUE, 0, 0, convert_UYVY_YUY2}, /* alias */
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_UYVY_YUY2}, /* alias */
{GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, TRUE,
- TRUE, 1, 0, convert_YUY2_AYUV},
+ TRUE, FALSE, TRUE, FALSE, 1, 0, convert_YUY2_AYUV},
{GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, TRUE,
- TRUE, 0, 0, convert_UYVY_YUY2},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_UYVY_YUY2},
{GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, TRUE,
- TRUE, 0, 0, convert_UYVY_AYUV},
+ TRUE, FALSE, TRUE, FALSE, 0, 0, convert_UYVY_AYUV},
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, FALSE, TRUE, TRUE,
- 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, TRUE,
- TRUE, 1, 0, convert_AYUV_YUY2},
+ TRUE, FALSE, FALSE, FALSE, 1, 0, convert_AYUV_YUY2},
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, TRUE,
- TRUE, 1, 0, convert_AYUV_UYVY},
+ TRUE, FALSE, FALSE, FALSE, 1, 0, convert_AYUV_UYVY},
/* packed -> planar */
{GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_I420, TRUE, FALSE, TRUE, FALSE,
- FALSE, 0, 0, convert_YUY2_I420},
+ FALSE, FALSE, FALSE, FALSE, 0, 0, convert_YUY2_I420},
{GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_YV12, TRUE, FALSE, TRUE, FALSE,
- FALSE, 0, 0, convert_YUY2_I420},
+ FALSE, FALSE, FALSE, FALSE, 0, 0, convert_YUY2_I420},
{GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_Y42B, TRUE, FALSE, TRUE, TRUE,
- TRUE, 0, 0, convert_YUY2_Y42B},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_YUY2_Y42B},
{GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_Y444, TRUE, FALSE, TRUE, TRUE,
- TRUE, 0, 0, convert_YUY2_Y444},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_YUY2_Y444},
{GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_I420, TRUE, FALSE, TRUE, FALSE,
- FALSE, 0, 0, convert_UYVY_I420},
+ FALSE, FALSE, FALSE, FALSE, 0, 0, convert_UYVY_I420},
{GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_YV12, TRUE, FALSE, TRUE, FALSE,
- FALSE, 0, 0, convert_UYVY_I420},
+ FALSE, FALSE, FALSE, FALSE, 0, 0, convert_UYVY_I420},
{GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_Y42B, TRUE, FALSE, TRUE, TRUE,
- TRUE, 0, 0, convert_UYVY_Y42B},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_UYVY_Y42B},
{GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_Y444, TRUE, FALSE, TRUE, TRUE,
- TRUE, 0, 0, convert_UYVY_Y444},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_UYVY_Y444},
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_I420, FALSE, FALSE, TRUE, TRUE,
- TRUE, 1, 1, convert_AYUV_I420},
+ TRUE, FALSE, FALSE, FALSE, 1, 1, convert_AYUV_I420},
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, TRUE, TRUE,
- TRUE, 1, 1, convert_AYUV_I420},
+ TRUE, FALSE, FALSE, FALSE, 1, 1, convert_AYUV_I420},
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_Y42B, TRUE, FALSE, TRUE, TRUE,
- TRUE, 1, 0, convert_AYUV_Y42B},
+ TRUE, FALSE, FALSE, FALSE, 1, 0, convert_AYUV_Y42B},
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_Y444, TRUE, FALSE, TRUE, TRUE,
- TRUE, 0, 0, convert_AYUV_Y444},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_AYUV_Y444},
/* planar -> planar */
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_I420, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_Y41B, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_GRAY8, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_A420, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, TRUE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_YUV9, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_YVU9, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_I420, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_Y41B, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_GRAY8, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_A420, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, TRUE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_YUV9, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_YVU9, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_I420, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_Y41B, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_GRAY8, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_A420, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, TRUE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_YUV9, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_YVU9, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_I420, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_Y41B, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_GRAY8, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_A420, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, TRUE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_YUV9, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_YVU9, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_I420, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_Y41B, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_GRAY8, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_A420, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, TRUE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_YUV9, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_YVU9, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_I420, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_Y41B, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_GRAY8, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_A420, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, TRUE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_YUV9, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_YVU9, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_I420, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_Y41B, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_GRAY8, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_A420, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, TRUE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_YUV9, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_YVU9, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_I420, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_Y41B, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_GRAY8, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_A420, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, TRUE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_YUV9, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_YVU9, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_I420, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_Y41B, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_GRAY8, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_A420, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, TRUE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_YUV9, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_YVU9, FALSE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
/* sempiplanar -> semiplanar */
{GST_VIDEO_FORMAT_NV12, GST_VIDEO_FORMAT_NV12, TRUE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_NV12, GST_VIDEO_FORMAT_NV16, TRUE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_NV12, GST_VIDEO_FORMAT_NV24, TRUE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_NV21, GST_VIDEO_FORMAT_NV21, TRUE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_NV16, GST_VIDEO_FORMAT_NV12, TRUE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_NV16, GST_VIDEO_FORMAT_NV16, TRUE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_NV16, GST_VIDEO_FORMAT_NV24, TRUE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_NV24, GST_VIDEO_FORMAT_NV12, TRUE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_NV24, GST_VIDEO_FORMAT_NV16, TRUE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_NV24, GST_VIDEO_FORMAT_NV24, TRUE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_ARGB, TRUE, TRUE, TRUE, TRUE, TRUE,
- 0, 0, convert_AYUV_ARGB},
+ TRUE, FALSE, FALSE, 0, 0, convert_AYUV_ARGB},
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_BGRA, TRUE, TRUE, TRUE, TRUE, TRUE,
- 0, 0, convert_AYUV_BGRA},
+ TRUE, FALSE, FALSE, 0, 0, convert_AYUV_BGRA},
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_xRGB, TRUE, TRUE, TRUE, TRUE, TRUE,
- 0, 0, convert_AYUV_ARGB}, /* alias */
+ FALSE, FALSE, FALSE, 0, 0, convert_AYUV_ARGB}, /* alias */
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_BGRx, TRUE, TRUE, TRUE, TRUE, TRUE,
- 0, 0, convert_AYUV_BGRA}, /* alias */
+ FALSE, FALSE, FALSE, 0, 0, convert_AYUV_BGRA}, /* alias */
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_ABGR, TRUE, TRUE, TRUE, TRUE, TRUE,
- 0, 0, convert_AYUV_ABGR},
+ TRUE, FALSE, FALSE, 0, 0, convert_AYUV_ABGR},
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_RGBA, TRUE, TRUE, TRUE, TRUE, TRUE,
- 0, 0, convert_AYUV_RGBA},
+ TRUE, FALSE, FALSE, 0, 0, convert_AYUV_RGBA},
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_xBGR, TRUE, TRUE, TRUE, TRUE, TRUE,
- 0, 0, convert_AYUV_ABGR}, /* alias */
+ FALSE, FALSE, FALSE, 0, 0, convert_AYUV_ABGR}, /* alias */
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_RGBx, TRUE, TRUE, TRUE, TRUE, TRUE,
- 0, 0, convert_AYUV_RGBA}, /* alias */
+ FALSE, FALSE, FALSE, 0, 0, convert_AYUV_RGBA}, /* alias */
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_BGRA, FALSE, TRUE, TRUE, TRUE,
- TRUE, 0, 0, convert_I420_BGRA},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_I420_BGRA},
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_BGRx, FALSE, TRUE, TRUE, TRUE,
- TRUE, 0, 0, convert_I420_BGRA},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_I420_BGRA},
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_BGRA, FALSE, TRUE, TRUE, TRUE,
- TRUE, 0, 0, convert_I420_BGRA},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_I420_BGRA},
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_BGRx, FALSE, TRUE, TRUE, TRUE,
- TRUE, 0, 0, convert_I420_BGRA},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_I420_BGRA},
#endif
/* scalers */
{GST_VIDEO_FORMAT_GBR, GST_VIDEO_FORMAT_GBR, TRUE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_YVYU, GST_VIDEO_FORMAT_YVYU, TRUE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_RGB15, GST_VIDEO_FORMAT_RGB15, TRUE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_RGB16, GST_VIDEO_FORMAT_RGB16, TRUE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_BGR15, GST_VIDEO_FORMAT_BGR15, TRUE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_BGR16, GST_VIDEO_FORMAT_BGR16, TRUE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_RGB, GST_VIDEO_FORMAT_RGB, TRUE, FALSE, FALSE, TRUE, TRUE,
- 0, 0, convert_scale_planes},
+ FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_BGR, GST_VIDEO_FORMAT_BGR, TRUE, FALSE, FALSE, TRUE, TRUE,
- 0, 0, convert_scale_planes},
+ FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_v308, GST_VIDEO_FORMAT_v308, TRUE, FALSE, FALSE, TRUE, TRUE,
- 0, 0, convert_scale_planes},
+ FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_ARGB, GST_VIDEO_FORMAT_ARGB, TRUE, FALSE, FALSE, TRUE, TRUE,
- 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_xRGB, GST_VIDEO_FORMAT_xRGB, TRUE, FALSE, FALSE, TRUE, TRUE,
- 0, 0, convert_scale_planes},
+ FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_ABGR, GST_VIDEO_FORMAT_ABGR, TRUE, FALSE, FALSE, TRUE, TRUE,
- 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_xBGR, GST_VIDEO_FORMAT_xBGR, TRUE, FALSE, FALSE, TRUE, TRUE,
- 0, 0, convert_scale_planes},
+ FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_RGBA, GST_VIDEO_FORMAT_RGBA, TRUE, FALSE, FALSE, TRUE, TRUE,
- 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_RGBx, GST_VIDEO_FORMAT_RGBx, TRUE, FALSE, FALSE, TRUE, TRUE,
- 0, 0, convert_scale_planes},
+ FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_BGRA, GST_VIDEO_FORMAT_BGRA, TRUE, FALSE, FALSE, TRUE, TRUE,
- 0, 0, convert_scale_planes},
+ TRUE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_BGRx, GST_VIDEO_FORMAT_BGRx, TRUE, FALSE, FALSE, TRUE, TRUE,
- 0, 0, convert_scale_planes},
+ FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_ARGB64, GST_VIDEO_FORMAT_ARGB64, TRUE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, TRUE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_AYUV64, GST_VIDEO_FORMAT_AYUV64, TRUE, FALSE, FALSE, TRUE,
- TRUE, 0, 0, convert_scale_planes},
+ TRUE, TRUE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_GRAY16_LE, GST_VIDEO_FORMAT_GRAY16_LE, TRUE, FALSE, FALSE,
- TRUE, TRUE, 0, 0, convert_scale_planes},
+ TRUE, TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
{GST_VIDEO_FORMAT_GRAY16_BE, GST_VIDEO_FORMAT_GRAY16_BE, TRUE, FALSE, FALSE,
- TRUE, TRUE, 0, 0, convert_scale_planes},
+ TRUE, TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
};
static gboolean
@@ -4273,6 +4477,7 @@ video_converter_lookup_fastpath (GstVideoConverter * convert)
GstVideoFormat in_format, out_format;
GstVideoTransferFunction in_transf, out_transf;
gboolean interlaced, same_matrix, same_primaries, same_size, crop, border;
+ gboolean need_copy, need_set, need_mult;
gint width, height;
width = GST_VIDEO_INFO_WIDTH (&convert->in_info);
@@ -4291,6 +4496,11 @@ video_converter_lookup_fastpath (GstVideoConverter * convert)
if (CHECK_GAMMA_REMAP (convert) && (!same_size || in_transf != out_transf))
return FALSE;
+ need_copy = (convert->alpha_mode & ALPHA_MODE_COPY) == ALPHA_MODE_COPY;
+ need_set = (convert->alpha_mode & ALPHA_MODE_SET) == ALPHA_MODE_SET;
+ need_mult = (convert->alpha_mode & ALPHA_MODE_MULT) == ALPHA_MODE_MULT;
+ GST_DEBUG ("alpha copy %d, set %d, mult %d", need_copy, need_set, need_mult);
+
in_format = GST_VIDEO_INFO_FORMAT (&convert->in_info);
out_format = GST_VIDEO_INFO_FORMAT (&convert->out_info);
@@ -4333,7 +4543,10 @@ video_converter_lookup_fastpath (GstVideoConverter * convert)
&& (transforms[i].width_align & width) == 0
&& (transforms[i].height_align & height) == 0
&& (transforms[i].do_crop || !crop)
- && (transforms[i].do_border || !border)) {
+ && (transforms[i].do_border || !border)
+ && (transforms[i].alpha_copy || !need_copy)
+ && (transforms[i].alpha_set || !need_set)
+ && (transforms[i].alpha_mult || !need_mult)) {
GST_DEBUG ("using fastpath");
if (transforms[i].needs_color_matrix)
video_converter_compute_matrix (convert);
diff --git a/gst-libs/gst/video/video-converter.h b/gst-libs/gst/video/video-converter.h
index 9173e029d..f7cea8735 100644
--- a/gst-libs/gst/video/video-converter.h
+++ b/gst-libs/gst/video/video-converter.h
@@ -126,10 +126,36 @@ G_BEGIN_DECLS
*/
#define GST_VIDEO_CONVERTER_OPT_FILL_BORDER "GstVideoConverter.fill-border"
/**
+ * GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE:
+ *
+ * #G_TYPE_DOUBLE, the alpha color value to use.
+ * Default to 1.0
+ */
+#define GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE "GstVideoConverter.alpha-value"
+/**
+ * GST_VIDEO_CONVERTER_OPT_ALPHA_MODE:
+ *
+ * #G_TYPE_STRING, the alpha mode to use.
+ *
+ * "copy": When input and output have alpha, it will be copied.
+ * When the input has no alpha, alpha will be set to
+ * GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE
+ * "set": set all alpha to #GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE
+ * "mult": multiply all alpha with #GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE.
+ * When the input format has no alpha but the output format has,
+ * the alpha value will be set to
+ * #GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE
+ *
+ * Default to "none".
+ */
+#define GST_VIDEO_CONVERTER_OPT_ALPHA_MODE "GstVideoConverter.alpha-mode"
+/**
* GST_VIDEO_CONVERTER_OPT_BORDER_ARGB:
*
* #G_TYPE_UINT, the border color to use if #GST_VIDEO_CONVERTER_OPT_FILL_BORDER
- * is set to %TRUE. Default 0x00000000
+ * is set to %TRUE.
+ * Default 0xff000000 and the alpha component is influenced by
+ * #GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE and #GST_VIDEO_CONVERTER_OPT_ALPHA_MODE.
*/
#define GST_VIDEO_CONVERTER_OPT_BORDER_ARGB "GstVideoConverter.border-argb"
/**
diff --git a/gst-libs/gst/video/video-orc-dist.c b/gst-libs/gst/video/video-orc-dist.c
index fa090b546..eb39de3bd 100644
--- a/gst-libs/gst/video/video-orc-dist.c
+++ b/gst-libs/gst/video/video-orc-dist.c
@@ -219,7 +219,7 @@ void video_orc_convert_I420_YUY2 (guint8 * ORC_RESTRICT d1,
void video_orc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1,
guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3,
- const guint8 * ORC_RESTRICT s4, int n);
+ const guint8 * ORC_RESTRICT s4, int p1, int n);
void video_orc_convert_YUY2_I420 (guint8 * ORC_RESTRICT d1,
guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3,
guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1,
@@ -243,9 +243,9 @@ void video_orc_planar_chroma_422_420 (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride,
const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m);
void video_orc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+ const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
void video_orc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+ const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
void video_orc_convert_YUY2_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
@@ -288,7 +288,7 @@ void video_orc_convert_Y42B_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
void video_orc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride,
const guint8 * ORC_RESTRICT s2, int s2_stride,
- const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
+ const guint8 * ORC_RESTRICT s3, int s3_stride, int p1, int n, int m);
void video_orc_convert_Y444_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride,
const guint8 * ORC_RESTRICT s2, int s2_stride,
@@ -300,7 +300,7 @@ void video_orc_convert_Y444_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
void video_orc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride,
const guint8 * ORC_RESTRICT s2, int s2_stride,
- const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
+ const guint8 * ORC_RESTRICT s3, int s3_stride, int p1, int n, int m);
void video_orc_convert_AYUV_ARGB (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3,
int p4, int p5, int n, int m);
@@ -11983,7 +11983,8 @@ video_orc_convert_I420_YUY2 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
void
video_orc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n)
+ const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1,
+ int n)
{
int i;
orc_union32 *ORC_RESTRICT ptr0;
@@ -11992,11 +11993,7 @@ video_orc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
const orc_int8 *ORC_RESTRICT ptr5;
const orc_int8 *ORC_RESTRICT ptr6;
const orc_int8 *ORC_RESTRICT ptr7;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
- volatile orc_int8 var36;
-#else
orc_int8 var36;
-#endif
orc_int8 var37;
orc_union32 var38;
orc_int8 var39;
@@ -12015,7 +12012,7 @@ video_orc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
ptr7 = (orc_int8 *) s4;
/* 3: loadpb */
- var36 = (int) 0x000000ff; /* 255 or 1.25987e-321f */
+ var36 = p1;
for (i = 0; i < n; i++) {
/* 0: loadupdb */
@@ -12081,11 +12078,7 @@ _backup_video_orc_convert_I420_AYUV (OrcExecutor * ORC_RESTRICT ex)
const orc_int8 *ORC_RESTRICT ptr5;
const orc_int8 *ORC_RESTRICT ptr6;
const orc_int8 *ORC_RESTRICT ptr7;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
- volatile orc_int8 var36;
-#else
orc_int8 var36;
-#endif
orc_int8 var37;
orc_union32 var38;
orc_int8 var39;
@@ -12104,7 +12097,7 @@ _backup_video_orc_convert_I420_AYUV (OrcExecutor * ORC_RESTRICT ex)
ptr7 = (orc_int8 *) ex->arrays[7];
/* 3: loadpb */
- var36 = (int) 0x000000ff; /* 255 or 1.25987e-321f */
+ var36 = ex->params[24];
for (i = 0; i < n; i++) {
/* 0: loadupdb */
@@ -12161,7 +12154,8 @@ _backup_video_orc_convert_I420_AYUV (OrcExecutor * ORC_RESTRICT ex)
void
video_orc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n)
+ const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1,
+ int n)
{
OrcExecutor _ex, *ex = &_ex;
static volatile int p_inited = 0;
@@ -12178,9 +12172,9 @@ video_orc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
1, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, 110,
118, 101, 114, 116, 95, 73, 52, 50, 48, 95, 65, 89, 85, 86, 11, 4,
4, 11, 4, 4, 12, 1, 1, 12, 1, 1, 12, 1, 1, 12, 1, 1,
- 14, 1, 255, 0, 0, 0, 20, 2, 20, 2, 20, 1, 20, 1, 45, 34,
- 6, 45, 35, 7, 196, 32, 34, 35, 196, 33, 16, 4, 195, 0, 33, 32,
- 196, 33, 16, 5, 195, 1, 33, 32, 2, 0,
+ 16, 1, 20, 2, 20, 2, 20, 1, 20, 1, 45, 34, 6, 45, 35, 7,
+ 196, 32, 34, 35, 196, 33, 24, 4, 195, 0, 33, 32, 196, 33, 24, 5,
+ 195, 1, 33, 32, 2, 0,
};
p = orc_program_new_from_static_bytecode (bc);
orc_program_set_backup_function (p, _backup_video_orc_convert_I420_AYUV);
@@ -12194,7 +12188,7 @@ video_orc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
orc_program_add_source (p, 1, "s2");
orc_program_add_source (p, 1, "s3");
orc_program_add_source (p, 1, "s4");
- orc_program_add_constant (p, 1, 0x000000ff, "c1");
+ orc_program_add_parameter (p, 1, "p1");
orc_program_add_temporary (p, 2, "t1");
orc_program_add_temporary (p, 2, "t2");
orc_program_add_temporary (p, 1, "t3");
@@ -12206,11 +12200,11 @@ video_orc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
ORC_VAR_D1, ORC_VAR_D1);
orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4,
ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_S1,
+ orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_P1, ORC_VAR_S1,
ORC_VAR_D1);
orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_S2,
+ orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_P1, ORC_VAR_S2,
ORC_VAR_D1);
orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_T1,
ORC_VAR_D1);
@@ -12233,6 +12227,7 @@ video_orc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
ex->arrays[ORC_VAR_S2] = (void *) s2;
ex->arrays[ORC_VAR_S3] = (void *) s3;
ex->arrays[ORC_VAR_S4] = (void *) s4;
+ ex->params[ORC_VAR_P1] = p1;
func = c->exec;
func (ex);
@@ -13467,18 +13462,14 @@ video_orc_planar_chroma_422_420 (guint8 * ORC_RESTRICT d1, int d1_stride,
#ifdef DISABLE_ORC
void
video_orc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+ const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
{
int i;
int j;
orc_union64 *ORC_RESTRICT ptr0;
const orc_union32 *ORC_RESTRICT ptr4;
orc_union32 var36;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
- volatile orc_union16 var37;
-#else
orc_union16 var37;
-#endif
orc_union64 var38;
orc_union16 var39;
orc_union16 var40;
@@ -13490,8 +13481,8 @@ video_orc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
/* 2: loadpb */
- var37.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- var37.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
+ var37.x2[0] = p1;
+ var37.x2[1] = p1;
for (i = 0; i < n; i++) {
/* 0: loadl */
@@ -13560,11 +13551,7 @@ _backup_video_orc_convert_YUY2_AYUV (OrcExecutor * ORC_RESTRICT ex)
orc_union64 *ORC_RESTRICT ptr0;
const orc_union32 *ORC_RESTRICT ptr4;
orc_union32 var36;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
- volatile orc_union16 var37;
-#else
orc_union16 var37;
-#endif
orc_union64 var38;
orc_union16 var39;
orc_union16 var40;
@@ -13576,8 +13563,8 @@ _backup_video_orc_convert_YUY2_AYUV (OrcExecutor * ORC_RESTRICT ex)
ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
/* 2: loadpb */
- var37.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- var37.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
+ var37.x2[0] = ex->params[24];
+ var37.x2[1] = ex->params[24];
for (i = 0; i < n; i++) {
/* 0: loadl */
@@ -13637,7 +13624,7 @@ _backup_video_orc_convert_YUY2_AYUV (OrcExecutor * ORC_RESTRICT ex)
void
video_orc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+ const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
{
OrcExecutor _ex, *ex = &_ex;
static volatile int p_inited = 0;
@@ -13653,9 +13640,9 @@ video_orc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
static const orc_uint8 bc[] = {
1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111,
110, 118, 101, 114, 116, 95, 89, 85, 89, 50, 95, 65, 89, 85, 86, 11,
- 8, 8, 12, 4, 4, 14, 2, 255, 0, 0, 0, 20, 2, 20, 2, 20,
- 4, 20, 4, 21, 1, 199, 33, 32, 4, 21, 1, 196, 34, 16, 32, 195,
- 35, 33, 33, 21, 1, 195, 0, 34, 35, 2, 0,
+ 8, 8, 12, 4, 4, 16, 1, 20, 2, 20, 2, 20, 4, 20, 4, 21,
+ 1, 199, 33, 32, 4, 21, 1, 196, 34, 24, 32, 195, 35, 33, 33, 21,
+ 1, 195, 0, 34, 35, 2, 0,
};
p = orc_program_new_from_static_bytecode (bc);
orc_program_set_backup_function (p, _backup_video_orc_convert_YUY2_AYUV);
@@ -13666,7 +13653,7 @@ video_orc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
orc_program_set_backup_function (p, _backup_video_orc_convert_YUY2_AYUV);
orc_program_add_destination (p, 8, "d1");
orc_program_add_source (p, 4, "s1");
- orc_program_add_constant (p, 2, 0x000000ff, "c1");
+ orc_program_add_parameter (p, 1, "p1");
orc_program_add_temporary (p, 2, "t1");
orc_program_add_temporary (p, 2, "t2");
orc_program_add_temporary (p, 4, "t3");
@@ -13674,7 +13661,7 @@ video_orc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T3, ORC_VAR_C1, ORC_VAR_T1,
+ orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T3, ORC_VAR_P1, ORC_VAR_T1,
ORC_VAR_D1);
orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T2,
ORC_VAR_D1);
@@ -13698,6 +13685,7 @@ video_orc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
ex->params[ORC_VAR_D1] = d1_stride;
ex->arrays[ORC_VAR_S1] = (void *) s1;
ex->params[ORC_VAR_S1] = s1_stride;
+ ex->params[ORC_VAR_P1] = p1;
func = c->exec;
func (ex);
@@ -13709,18 +13697,14 @@ video_orc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
#ifdef DISABLE_ORC
void
video_orc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+ const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
{
int i;
int j;
orc_union64 *ORC_RESTRICT ptr0;
const orc_union32 *ORC_RESTRICT ptr4;
orc_union32 var36;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
- volatile orc_union16 var37;
-#else
orc_union16 var37;
-#endif
orc_union64 var38;
orc_union16 var39;
orc_union16 var40;
@@ -13732,8 +13716,8 @@ video_orc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
/* 2: loadpb */
- var37.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- var37.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
+ var37.x2[0] = p1;
+ var37.x2[1] = p1;
for (i = 0; i < n; i++) {
/* 0: loadl */
@@ -13802,11 +13786,7 @@ _backup_video_orc_convert_UYVY_AYUV (OrcExecutor * ORC_RESTRICT ex)
orc_union64 *ORC_RESTRICT ptr0;
const orc_union32 *ORC_RESTRICT ptr4;
orc_union32 var36;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
- volatile orc_union16 var37;
-#else
orc_union16 var37;
-#endif
orc_union64 var38;
orc_union16 var39;
orc_union16 var40;
@@ -13818,8 +13798,8 @@ _backup_video_orc_convert_UYVY_AYUV (OrcExecutor * ORC_RESTRICT ex)
ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
/* 2: loadpb */
- var37.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- var37.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
+ var37.x2[0] = ex->params[24];
+ var37.x2[1] = ex->params[24];
for (i = 0; i < n; i++) {
/* 0: loadl */
@@ -13879,7 +13859,7 @@ _backup_video_orc_convert_UYVY_AYUV (OrcExecutor * ORC_RESTRICT ex)
void
video_orc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+ const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
{
OrcExecutor _ex, *ex = &_ex;
static volatile int p_inited = 0;
@@ -13895,9 +13875,9 @@ video_orc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
static const orc_uint8 bc[] = {
1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111,
110, 118, 101, 114, 116, 95, 85, 89, 86, 89, 95, 65, 89, 85, 86, 11,
- 8, 8, 12, 4, 4, 14, 2, 255, 0, 0, 0, 20, 2, 20, 2, 20,
- 4, 20, 4, 21, 1, 199, 32, 33, 4, 21, 1, 196, 34, 16, 32, 195,
- 35, 33, 33, 21, 1, 195, 0, 34, 35, 2, 0,
+ 8, 8, 12, 4, 4, 16, 1, 20, 2, 20, 2, 20, 4, 20, 4, 21,
+ 1, 199, 32, 33, 4, 21, 1, 196, 34, 24, 32, 195, 35, 33, 33, 21,
+ 1, 195, 0, 34, 35, 2, 0,
};
p = orc_program_new_from_static_bytecode (bc);
orc_program_set_backup_function (p, _backup_video_orc_convert_UYVY_AYUV);
@@ -13908,7 +13888,7 @@ video_orc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
orc_program_set_backup_function (p, _backup_video_orc_convert_UYVY_AYUV);
orc_program_add_destination (p, 8, "d1");
orc_program_add_source (p, 4, "s1");
- orc_program_add_constant (p, 2, 0x000000ff, "c1");
+ orc_program_add_parameter (p, 1, "p1");
orc_program_add_temporary (p, 2, "t1");
orc_program_add_temporary (p, 2, "t2");
orc_program_add_temporary (p, 4, "t3");
@@ -13916,7 +13896,7 @@ video_orc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1,
ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T3, ORC_VAR_C1, ORC_VAR_T1,
+ orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T3, ORC_VAR_P1, ORC_VAR_T1,
ORC_VAR_D1);
orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T2,
ORC_VAR_D1);
@@ -13940,6 +13920,7 @@ video_orc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
ex->params[ORC_VAR_D1] = d1_stride;
ex->arrays[ORC_VAR_S1] = (void *) s1;
ex->params[ORC_VAR_S1] = s1_stride;
+ ex->params[ORC_VAR_P1] = p1;
func = c->exec;
func (ex);
@@ -16682,7 +16663,7 @@ void
video_orc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride,
const guint8 * ORC_RESTRICT s2, int s2_stride,
- const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
+ const guint8 * ORC_RESTRICT s3, int s3_stride, int p1, int n, int m)
{
int i;
int j;
@@ -16692,11 +16673,7 @@ video_orc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
const orc_int8 *ORC_RESTRICT ptr6;
orc_int8 var36;
orc_int8 var37;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
- volatile orc_union16 var38;
-#else
orc_union16 var38;
-#endif
orc_union16 var39;
orc_union64 var40;
orc_union16 var41;
@@ -16710,8 +16687,8 @@ video_orc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
/* 3: loadpb */
- var38.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- var38.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
+ var38.x2[0] = p1;
+ var38.x2[1] = p1;
for (i = 0; i < n; i++) {
/* 0: loadb */
@@ -16781,11 +16758,7 @@ _backup_video_orc_convert_Y42B_AYUV (OrcExecutor * ORC_RESTRICT ex)
const orc_int8 *ORC_RESTRICT ptr6;
orc_int8 var36;
orc_int8 var37;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
- volatile orc_union16 var38;
-#else
orc_union16 var38;
-#endif
orc_union16 var39;
orc_union64 var40;
orc_union16 var41;
@@ -16799,8 +16772,8 @@ _backup_video_orc_convert_Y42B_AYUV (OrcExecutor * ORC_RESTRICT ex)
ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
/* 3: loadpb */
- var38.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- var38.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
+ var38.x2[0] = ex->params[24];
+ var38.x2[1] = ex->params[24];
for (i = 0; i < n; i++) {
/* 0: loadb */
@@ -16860,7 +16833,7 @@ void
video_orc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride,
const guint8 * ORC_RESTRICT s2, int s2_stride,
- const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
+ const guint8 * ORC_RESTRICT s3, int s3_stride, int p1, int n, int m)
{
OrcExecutor _ex, *ex = &_ex;
static volatile int p_inited = 0;
@@ -16876,9 +16849,9 @@ video_orc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
static const orc_uint8 bc[] = {
1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111,
110, 118, 101, 114, 116, 95, 89, 52, 50, 66, 95, 65, 89, 85, 86, 11,
- 8, 8, 12, 2, 2, 12, 1, 1, 12, 1, 1, 14, 1, 255, 0, 0,
- 0, 20, 2, 20, 2, 20, 4, 20, 4, 196, 32, 5, 6, 21, 1, 196,
- 35, 16, 4, 195, 34, 32, 32, 21, 1, 195, 0, 35, 34, 2, 0,
+ 8, 8, 12, 2, 2, 12, 1, 1, 12, 1, 1, 16, 1, 20, 2, 20,
+ 2, 20, 4, 20, 4, 196, 32, 5, 6, 21, 1, 196, 35, 24, 4, 195,
+ 34, 32, 32, 21, 1, 195, 0, 35, 34, 2, 0,
};
p = orc_program_new_from_static_bytecode (bc);
orc_program_set_backup_function (p, _backup_video_orc_convert_Y42B_AYUV);
@@ -16891,7 +16864,7 @@ video_orc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
orc_program_add_source (p, 2, "s1");
orc_program_add_source (p, 1, "s2");
orc_program_add_source (p, 1, "s3");
- orc_program_add_constant (p, 1, 0x000000ff, "c1");
+ orc_program_add_parameter (p, 1, "p1");
orc_program_add_temporary (p, 2, "t1");
orc_program_add_temporary (p, 2, "t2");
orc_program_add_temporary (p, 4, "t3");
@@ -16899,7 +16872,7 @@ video_orc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3,
ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T4, ORC_VAR_C1, ORC_VAR_S1,
+ orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T4, ORC_VAR_P1, ORC_VAR_S1,
ORC_VAR_D1);
orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_T1,
ORC_VAR_D1);
@@ -16927,6 +16900,7 @@ video_orc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
ex->params[ORC_VAR_S2] = s2_stride;
ex->arrays[ORC_VAR_S3] = (void *) s3;
ex->params[ORC_VAR_S3] = s3_stride;
+ ex->params[ORC_VAR_P1] = p1;
func = c->exec;
func (ex);
@@ -17418,7 +17392,7 @@ void
video_orc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride,
const guint8 * ORC_RESTRICT s2, int s2_stride,
- const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
+ const guint8 * ORC_RESTRICT s3, int s3_stride, int p1, int n, int m)
{
int i;
int j;
@@ -17428,11 +17402,7 @@ video_orc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
const orc_int8 *ORC_RESTRICT ptr6;
orc_int8 var34;
orc_int8 var35;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
- volatile orc_int8 var36;
-#else
orc_int8 var36;
-#endif
orc_int8 var37;
orc_union32 var38;
orc_union16 var39;
@@ -17445,7 +17415,7 @@ video_orc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
/* 3: loadpb */
- var36 = (int) 0x000000ff; /* 255 or 1.25987e-321f */
+ var36 = p1;
for (i = 0; i < n; i++) {
/* 0: loadb */
@@ -17496,11 +17466,7 @@ _backup_video_orc_convert_Y444_AYUV (OrcExecutor * ORC_RESTRICT ex)
const orc_int8 *ORC_RESTRICT ptr6;
orc_int8 var34;
orc_int8 var35;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
- volatile orc_int8 var36;
-#else
orc_int8 var36;
-#endif
orc_int8 var37;
orc_union32 var38;
orc_union16 var39;
@@ -17513,7 +17479,7 @@ _backup_video_orc_convert_Y444_AYUV (OrcExecutor * ORC_RESTRICT ex)
ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
/* 3: loadpb */
- var36 = (int) 0x000000ff; /* 255 or 1.25987e-321f */
+ var36 = ex->params[24];
for (i = 0; i < n; i++) {
/* 0: loadb */
@@ -17554,7 +17520,7 @@ void
video_orc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride,
const guint8 * ORC_RESTRICT s2, int s2_stride,
- const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
+ const guint8 * ORC_RESTRICT s3, int s3_stride, int p1, int n, int m)
{
OrcExecutor _ex, *ex = &_ex;
static volatile int p_inited = 0;
@@ -17570,9 +17536,8 @@ video_orc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
static const orc_uint8 bc[] = {
1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111,
110, 118, 101, 114, 116, 95, 89, 52, 52, 52, 95, 65, 89, 85, 86, 11,
- 4, 4, 12, 1, 1, 12, 1, 1, 12, 1, 1, 14, 1, 255, 0, 0,
- 0, 20, 2, 20, 2, 196, 32, 5, 6, 196, 33, 16, 4, 195, 0, 33,
- 32, 2, 0,
+ 4, 4, 12, 1, 1, 12, 1, 1, 12, 1, 1, 16, 1, 20, 2, 20,
+ 2, 196, 32, 5, 6, 196, 33, 24, 4, 195, 0, 33, 32, 2, 0,
};
p = orc_program_new_from_static_bytecode (bc);
orc_program_set_backup_function (p, _backup_video_orc_convert_Y444_AYUV);
@@ -17585,13 +17550,13 @@ video_orc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
orc_program_add_source (p, 1, "s1");
orc_program_add_source (p, 1, "s2");
orc_program_add_source (p, 1, "s3");
- orc_program_add_constant (p, 1, 0x000000ff, "c1");
+ orc_program_add_parameter (p, 1, "p1");
orc_program_add_temporary (p, 2, "t1");
orc_program_add_temporary (p, 2, "t2");
orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3,
ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_S1,
+ orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_P1, ORC_VAR_S1,
ORC_VAR_D1);
orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
ORC_VAR_D1);
@@ -17617,6 +17582,7 @@ video_orc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
ex->params[ORC_VAR_S2] = s2_stride;
ex->arrays[ORC_VAR_S3] = (void *) s3;
ex->params[ORC_VAR_S3] = s3_stride;
+ ex->params[ORC_VAR_P1] = p1;
func = c->exec;
func (ex);
diff --git a/gst-libs/gst/video/video-orc-dist.h b/gst-libs/gst/video/video-orc-dist.h
index 915b5dbbe..225e546e0 100644
--- a/gst-libs/gst/video/video-orc-dist.h
+++ b/gst-libs/gst/video/video-orc-dist.h
@@ -137,7 +137,7 @@ void video_orc_splat_u64 (guint8 * ORC_RESTRICT d1, orc_int64 p1, int n);
void video_orc_splat2_u64 (guint8 * ORC_RESTRICT d1, int p1, int n);
void video_orc_convert_I420_UYVY (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n);
void video_orc_convert_I420_YUY2 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n);
-void video_orc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n);
+void video_orc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, int n);
void video_orc_convert_YUY2_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
void video_orc_convert_UYVY_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
void video_orc_planar_chroma_420_422 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
@@ -146,8 +146,8 @@ void video_orc_planar_chroma_422_444 (guint8 * ORC_RESTRICT d1, int d1_stride, c
void video_orc_planar_chroma_444_422 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
void video_orc_planar_chroma_444_420 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m);
void video_orc_planar_chroma_422_420 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m);
-void video_orc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void video_orc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void video_orc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
+void video_orc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
void video_orc_convert_YUY2_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
void video_orc_convert_UYVY_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
void video_orc_convert_YUY2_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
@@ -160,10 +160,10 @@ void video_orc_convert_AYUV_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, guint
void video_orc_convert_AYUV_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
void video_orc_convert_Y42B_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
void video_orc_convert_Y42B_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
-void video_orc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
+void video_orc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int p1, int n, int m);
void video_orc_convert_Y444_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
void video_orc_convert_Y444_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
-void video_orc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
+void video_orc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int p1, int n, int m);
void video_orc_convert_AYUV_ARGB (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, int p4, int p5, int n, int m);
void video_orc_convert_AYUV_BGRA (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, int p4, int p5, int n, int m);
void video_orc_convert_AYUV_ABGR (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, int p4, int p5, int n, int m);
diff --git a/gst-libs/gst/video/video-orc.orc b/gst-libs/gst/video/video-orc.orc
index a0cc5b972..77b22aff1 100644
--- a/gst-libs/gst/video/video-orc.orc
+++ b/gst-libs/gst/video/video-orc.orc
@@ -842,7 +842,7 @@ x2 mergebw d2, y2, uv
.source 1 y2 guint8
.source 1 u guint8
.source 1 v guint8
-.const 1 c255 255
+.param 1 alpha
.temp 2 uv
.temp 2 ay
.temp 1 tu
@@ -851,9 +851,9 @@ x2 mergebw d2, y2, uv
loadupdb tu, u
loadupdb tv, v
mergebw uv, tu, tv
-mergebw ay, c255, y1
+mergebw ay, alpha, y1
mergewl d1, ay, uv
-mergebw ay, c255, y2
+mergebw ay, alpha, y2
mergewl d2, ay, uv
@@ -954,14 +954,14 @@ avgub d, s1, s2
.flags 2d
.dest 8 ayuv guint8
.source 4 yuy2 guint8
-.const 2 c255 0xff
+.param 1 alpha
.temp 2 yy
.temp 2 uv
.temp 4 ayay
.temp 4 uvuv
x2 splitwb uv, yy, yuy2
-x2 mergebw ayay, c255, yy
+x2 mergebw ayay, alpha, yy
mergewl uvuv, uv, uv
x2 mergewl ayuv, ayay, uvuv
@@ -970,14 +970,14 @@ x2 mergewl ayuv, ayay, uvuv
.flags 2d
.dest 8 ayuv guint8
.source 4 uyvy guint8
-.const 2 c255 0xff
+.param 1 alpha
.temp 2 yy
.temp 2 uv
.temp 4 ayay
.temp 4 uvuv
x2 splitwb yy, uv, uyvy
-x2 mergebw ayay, c255, yy
+x2 mergebw ayay, alpha, yy
mergewl uvuv, uv, uv
x2 mergewl ayuv, ayay, uvuv
@@ -1185,14 +1185,14 @@ x2 mergebw uyvy, uv, y
.source 2 yy guint8
.source 1 u guint8
.source 1 v guint8
-.const 1 c255 255
+.param 1 alpha
.temp 2 uv
.temp 2 ay
.temp 4 uvuv
.temp 4 ayay
mergebw uv, u, v
-x2 mergebw ayay, c255, yy
+x2 mergebw ayay, alpha, yy
mergewl uvuv, uv, uv
x2 mergewl ayuv, ayay, uvuv
@@ -1237,12 +1237,12 @@ x2 mergebw uyvy, uv, y
.source 1 yy guint8
.source 1 u guint8
.source 1 v guint8
-.const 1 c255 255
+.param 1 alpha
.temp 2 uv
.temp 2 ay
mergebw uv, u, v
-mergebw ay, c255, yy
+mergebw ay, alpha, yy
mergewl ayuv, ay, uv