diff options
-rw-r--r-- | gst/bayer/Makefile.am | 7 | ||||
-rw-r--r-- | gst/bayer/gstbayer2rgb.c | 339 | ||||
-rw-r--r-- | gst/bayer/gstbayerorc-dist.c | 3212 | ||||
-rw-r--r-- | gst/bayer/gstbayerorc-dist.h | 86 | ||||
-rw-r--r-- | gst/bayer/gstbayerorc.orc | 252 |
5 files changed, 3638 insertions, 258 deletions
diff --git a/gst/bayer/Makefile.am b/gst/bayer/Makefile.am index c62ab99a2..69666ea2f 100644 --- a/gst/bayer/Makefile.am +++ b/gst/bayer/Makefile.am @@ -1,16 +1,23 @@ plugin_LTLIBRARIES = libgstbayer.la +ORC_SOURCE=gstbayerorc +include $(top_srcdir)/common/orc.mak + libgstbayer_la_SOURCES = \ gstbayer.c \ gstbayer2rgb.c \ gstrgb2bayer.c \ gstrgb2bayer.h libgstbayer_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) \ + $(ORC_CFLAGS) \ $(GST_CFLAGS) libgstbayer_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_MAJORMINOR) \ + $(ORC_LIBS) \ $(GST_BASE_LIBS) libgstbayer_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstbayer_la_LIBTOOLFLAGS = --tag=disable-static +nodist_libgstbayer_la_SOURCES = $(ORC_NODIST_SOURCES) + Android.mk: Makefile.am $(BUILT_SOURCES) androgenizer \ diff --git a/gst/bayer/gstbayer2rgb.c b/gst/bayer/gstbayer2rgb.c index 5e4dc9aa7..8f9ed124d 100644 --- a/gst/bayer/gstbayer2rgb.c +++ b/gst/bayer/gstbayer2rgb.c @@ -80,7 +80,8 @@ #include <gst/video/video.h> #include <string.h> #include <stdlib.h> -#include "_stdint.h" +#include <_stdint.h> +#include "gstbayerorc.h" #define GST_CAT_DEFAULT gst_bayer2rgb_debug GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT); @@ -125,7 +126,6 @@ struct _GstBayer2RGBClass GstBaseTransformClass parent; }; -//#define SRC_CAPS GST_VIDEO_CAPS_RGBx #define SRC_CAPS \ GST_VIDEO_CAPS_RGBx ";" \ GST_VIDEO_CAPS_xRGB ";" \ @@ -134,9 +134,7 @@ struct _GstBayer2RGBClass GST_VIDEO_CAPS_RGBA ";" \ GST_VIDEO_CAPS_ARGB ";" \ GST_VIDEO_CAPS_BGRA ";" \ - GST_VIDEO_CAPS_ABGR ";" \ - GST_VIDEO_CAPS_RGB ";" \ - GST_VIDEO_CAPS_BGR + GST_VIDEO_CAPS_ABGR #define SINK_CAPS "video/x-raw-bayer,format=(string){bggr,grbg,gbrg,rggb}," \ "width=(int)[1,MAX],height=(int)[1,MAX],framerate=(fraction)[0/1,MAX]" @@ -365,7 +363,6 @@ gst_bayer2rgb_get_unit_size (GstBaseTransform * base, GstCaps * caps, name = gst_structure_get_name (structure); /* Our name must be either video/x-raw-bayer video/x-raw-rgb */ if (strcmp (name, "video/x-raw-rgb")) { - /* For bayer, we handle only BA81 (BGGR), which is BPP=24 */ *size = GST_ROUND_UP_4 (width) * height; return TRUE; } else { @@ -382,282 +379,108 @@ gst_bayer2rgb_get_unit_size (GstBaseTransform * base, GstCaps * caps, return FALSE; } -#define RECONSTRUCT_SQUARE(x) \ - do { \ - int _h1 = next[i-1]; \ - int _h2 = prev[i+1]; \ - int _v1 = next[i+1]; \ - int _v2 = prev[i-1]; \ - (x) = (_h1+_h2+_v1+_v2+2)>>2; \ - } while (0) - -#define RECONSTRUCT_DIAMOND(x) \ - do { \ - int _h1 = src[i-1]; \ - int _h2 = src[i+1]; \ - int _v1 = next[i]; \ - int _v2 = prev[i]; \ - (x) = (_h1+_h2+_v1+_v2+2)>>2; \ - } while (0) - -#define RECONSTRUCT_HORIZ(x) \ - do { \ - (x) = (src[i-1] + src[i+1] + 1) >> 1; \ - } while (0) - -#define RECONSTRUCT_VERT(x) \ - do { \ - (x) = (next[i] + prev[i] + 1) >> 1; \ - } while (0) - - -static void -reconstruct_blue_green (GstBayer2RGB * bayer2rgb, uint8_t * dest, - uint8_t * src, int src_stride, int blue_loc) -{ - int i; - int r, g, b; - uint8_t *prev; - uint8_t *next; - int width = bayer2rgb->width; - - prev = src - src_stride; - next = src + src_stride; - - i = 0; - if ((i & 1) == blue_loc) { - b = src[i]; - r = (next[i + 1] + prev[i + 1] + 1) >> 1; - g = (next[i] + prev[i] + 1) >> 1; - } else { - b = src[i + 1]; - r = (next[i] + prev[i] + 1) >> 1; - g = src[i]; - } - dest[i * 4 + bayer2rgb->r_off] = r; - dest[i * 4 + bayer2rgb->g_off] = g; - dest[i * 4 + bayer2rgb->b_off] = b; - for (i = 1; i < width - 1; i++) { - if ((i & 1) == blue_loc) { - b = src[i]; - RECONSTRUCT_SQUARE (r); - RECONSTRUCT_DIAMOND (g); - } else { - RECONSTRUCT_HORIZ (b); - RECONSTRUCT_VERT (r); - g = src[i]; - } - dest[i * 4 + bayer2rgb->r_off] = r; - dest[i * 4 + bayer2rgb->g_off] = g; - dest[i * 4 + bayer2rgb->b_off] = b; - } - if ((i & 1) == blue_loc) { - b = src[i]; - r = (next[i - 1] + prev[i - 1] + 1) >> 1; - g = (next[i] + prev[i] + 1) >> 1; - } else { - b = src[i - 1]; - r = (next[i] + prev[i] + 1) >> 1; - g = src[i]; - } - dest[i * 4 + bayer2rgb->r_off] = r; - dest[i * 4 + bayer2rgb->g_off] = g; - dest[i * 4 + bayer2rgb->b_off] = b; -} - static void -reconstruct_green_red (GstBayer2RGB * bayer2rgb, uint8_t * dest, - uint8_t * src, int src_stride, int red_loc) +gst_bayer2rgb_split_and_upsample_horiz (guint8 * dest0, guint8 * dest1, + const guint8 * src, int n) { int i; - int r, g, b; - uint8_t *prev; - uint8_t *next; - int width = bayer2rgb->width; - - prev = src - src_stride; - next = src + src_stride; - - i = 0; - if ((i & 1) == red_loc) { - r = src[i]; - b = (next[i + 1] + prev[i + 1] + 1) >> 1; - g = (next[i] + prev[i] + 1) >> 1; - } else { - r = src[i + 1]; - b = (next[i] + prev[i] + 1) >> 1; - g = src[i]; - } - dest[i * 4 + bayer2rgb->r_off] = r; - dest[i * 4 + bayer2rgb->g_off] = g; - dest[i * 4 + bayer2rgb->b_off] = b; - for (i = 1; i < width - 1; i++) { - if ((i & 1) == red_loc) { - r = src[i]; - RECONSTRUCT_SQUARE (b); - RECONSTRUCT_DIAMOND (g); - } else { - RECONSTRUCT_HORIZ (r); - RECONSTRUCT_VERT (b); - g = src[i]; - } - dest[i * 4 + bayer2rgb->r_off] = r; - dest[i * 4 + bayer2rgb->g_off] = g; - dest[i * 4 + bayer2rgb->b_off] = b; - } - if ((i & 1) == red_loc) { - r = src[i]; - b = (next[i - 1] + prev[i - 1] + 1) >> 1; - g = (next[i] + prev[i] + 1) >> 1; - } else { - r = src[i - 1]; - b = (next[i] + prev[i] + 1) >> 1; - g = src[i]; - } - dest[i * 4 + bayer2rgb->r_off] = r; - dest[i * 4 + bayer2rgb->g_off] = g; - dest[i * 4 + bayer2rgb->b_off] = b; -} -static void -reconstruct_blue_green_edge (GstBayer2RGB * bayer2rgb, uint8_t * dest, - uint8_t * src, int src_stride, int blue_loc, int offset) -{ - int i; - int r, g, b; - uint8_t *next; - int width = bayer2rgb->width; + dest0[0] = src[0]; + dest1[0] = src[1]; + dest0[1] = (src[0] + src[2] + 1) >> 1; + dest1[1] = src[1]; - next = src + offset * src_stride; +#if defined(__i386__) || defined(__amd64__) + gst_bayer_horiz_upsample_unaligned (dest0 + 2, dest1 + 2, src + 1, + (n - 4) >> 1); +#else + gst_bayer_horiz_upsample (dest0 + 2, dest1 + 2, src + 2, (n - 4) >> 1); +#endif - i = 0; - if ((i & 1) == blue_loc) { - b = src[i]; - r = next[i + 1]; - g = next[i]; - } else { - b = src[i + 1]; - r = next[i]; - g = src[i]; - } - dest[i * 4 + bayer2rgb->r_off] = r; - dest[i * 4 + bayer2rgb->g_off] = g; - dest[i * 4 + bayer2rgb->b_off] = b; - for (i = 1; i < width - 1; i++) { - if ((i & 1) == blue_loc) { - b = src[i]; - r = (next[i - 1] + next[i + 1] + 1) >> 1; - g = (src[i - 1] + src[i + 1] + 1) >> 1; + for (i = n - 2; i < n; i++) { + if ((i & 1) == 0) { + dest0[i] = src[i]; + dest1[i] = src[i - 1]; } else { - b = (src[i - 1] + src[i + 1] + 1) >> 1; - r = next[i]; - g = src[i]; + dest0[i] = src[i - 1]; + dest1[i] = src[i]; } - dest[i * 4 + bayer2rgb->r_off] = r; - dest[i * 4 + bayer2rgb->g_off] = g; - dest[i * 4 + bayer2rgb->b_off] = b; } - if ((i & 1) == blue_loc) { - b = src[i]; - r = next[i - 1]; - g = next[i]; - } else { - b = src[i - 1]; - r = next[i]; - g = src[i]; - } - dest[i * 4 + bayer2rgb->r_off] = r; - dest[i * 4 + bayer2rgb->g_off] = g; - dest[i * 4 + bayer2rgb->b_off] = b; } +typedef void (*process_func) (guint8 * d0, const guint8 * s0, const guint8 * s1, + const guint8 * s2, const guint8 * s3, const guint8 * s4, const guint8 * s5, + int n); + static void -reconstruct_green_red_edge (GstBayer2RGB * bayer2rgb, uint8_t * dest, - uint8_t * src, int src_stride, int red_loc, int offset) +gst_bayer2rgb_process (GstBayer2RGB * bayer2rgb, uint8_t * dest, + int dest_stride, uint8_t * src, int src_stride) { - int i; - int r, g, b; - uint8_t *next; - int width = bayer2rgb->width; - - next = src + offset * src_stride; - - i = 0; - if ((i & 1) == red_loc) { - r = src[i]; - b = next[i + 1]; - g = next[i]; - } else { - r = src[i + 1]; - b = next[i]; - g = src[i]; + int j; + guint8 *tmp; + process_func merge[2] = { NULL, NULL }; + int r_off, g_off, b_off; + + /* We exploit some symmetry in the functions here. The base functions + * are all named for the BGGR arrangement. For RGGB, we swap the + * red offset and blue offset in the output. For GRBG, we swap the + * order of the merge functions. For GBRG, do both. */ + r_off = bayer2rgb->r_off; + g_off = bayer2rgb->g_off; + b_off = bayer2rgb->b_off; + if (bayer2rgb->format == GST_BAYER_2_RGB_FORMAT_RGGB || + bayer2rgb->format == GST_BAYER_2_RGB_FORMAT_GBRG) { + r_off = bayer2rgb->b_off; + b_off = bayer2rgb->r_off; } - dest[i * 4 + bayer2rgb->r_off] = r; - dest[i * 4 + bayer2rgb->g_off] = g; - dest[i * 4 + bayer2rgb->b_off] = b; - for (i = 1; i < width - 1; i++) { - if ((i & 1) == red_loc) { - r = src[i]; - b = (next[i - 1] + next[i + 1] + 1) >> 1; - g = (src[i - 1] + src[i + 1] + 1) >> 1; - } else { - r = (src[i - 1] + src[i + 1] + 1) >> 1; - b = next[i]; - g = src[i]; - } - dest[i * 4 + bayer2rgb->r_off] = r; - dest[i * 4 + bayer2rgb->g_off] = g; - dest[i * 4 + bayer2rgb->b_off] = b; + + if (r_off == 2 && g_off == 1 && b_off == 0) { + merge[0] = gst_bayer_merge_bg_bgra; + merge[1] = gst_bayer_merge_gr_bgra; + } else if (r_off == 3 && g_off == 2 && b_off == 1) { + merge[0] = gst_bayer_merge_bg_abgr; + merge[1] = gst_bayer_merge_gr_abgr; + } else if (r_off == 1 && g_off == 2 && b_off == 3) { + merge[0] = gst_bayer_merge_bg_argb; + merge[1] = gst_bayer_merge_gr_argb; + } else if (r_off == 0 && g_off == 1 && b_off == 2) { + merge[0] = gst_bayer_merge_bg_rgba; + merge[1] = gst_bayer_merge_gr_rgba; } - if ((i & 1) == red_loc) { - r = src[i]; - b = next[i - 1]; - g = next[i]; - } else { - r = src[i - 1]; - b = next[i]; - g = src[i]; + if (bayer2rgb->format == GST_BAYER_2_RGB_FORMAT_GRBG || + bayer2rgb->format == GST_BAYER_2_RGB_FORMAT_GBRG) { + process_func tmp = merge[0]; + merge[0] = merge[1]; + merge[1] = tmp; } - dest[i * 4 + bayer2rgb->r_off] = r; - dest[i * 4 + bayer2rgb->g_off] = g; - dest[i * 4 + bayer2rgb->b_off] = b; -} -static void -gst_bayer2rgb_process_ref (GstBayer2RGB * bayer2rgb, uint8_t * dest, - int dest_stride, uint8_t * src, int src_stride) -{ - int j; - int format = bayer2rgb->format; + tmp = g_malloc (2 * 4 * bayer2rgb->width); +#define LINE(x) (tmp + ((x)&7) * bayer2rgb->width) + gst_bayer2rgb_split_and_upsample_horiz (LINE (3 * 2 + 0), LINE (3 * 2 + 1), + src + 1 * src_stride, bayer2rgb->width); j = 0; - if ((j & 1) == (format & 2) >> 1) { - reconstruct_blue_green_edge (bayer2rgb, dest + j * dest_stride, - src + j * src_stride, src_stride, format & 1, 1); - } else { - reconstruct_green_red_edge (bayer2rgb, dest + j * dest_stride, - src + j * src_stride, src_stride, (format & 1) ^ 1, 1); - } - for (j = 1; j < bayer2rgb->height - 1; j++) { - if ((j & 1) == (format & 2) >> 1) { - reconstruct_blue_green (bayer2rgb, dest + j * dest_stride, - src + j * src_stride, src_stride, format & 1); - } else { - reconstruct_green_red (bayer2rgb, dest + j * dest_stride, - src + j * src_stride, src_stride, (format & 1) ^ 1); + gst_bayer2rgb_split_and_upsample_horiz (LINE (j * 2 + 0), LINE (j * 2 + 1), + src + j * src_stride, bayer2rgb->width); + + for (j = 0; j < bayer2rgb->height; j++) { + if (j < bayer2rgb->height - 1) { + gst_bayer2rgb_split_and_upsample_horiz (LINE ((j + 1) * 2 + 0), + LINE ((j + 1) * 2 + 1), src + (j + 1) * src_stride, bayer2rgb->width); } - } - if ((j & 1) == (format & 2) >> 1) { - reconstruct_blue_green_edge (bayer2rgb, dest + j * dest_stride, - src + j * src_stride, src_stride, format & 1, -1); - } else { - reconstruct_green_red_edge (bayer2rgb, dest + j * dest_stride, - src + j * src_stride, src_stride, (format & 1) ^ 1, -1); + + merge[j & 1] (dest + j * dest_stride, + LINE (j * 2 - 2), LINE (j * 2 - 1), + LINE (j * 2 + 0), LINE (j * 2 + 1), + LINE (j * 2 + 2), LINE (j * 2 + 3), bayer2rgb->width >> 1); } + g_free (tmp); } + + static GstFlowReturn gst_bayer2rgb_transform (GstBaseTransform * base, GstBuffer * inbuf, GstBuffer * outbuf) @@ -675,7 +498,7 @@ gst_bayer2rgb_transform (GstBaseTransform * base, GstBuffer * inbuf, GST_DEBUG ("transforming buffer"); input = (uint8_t *) GST_BUFFER_DATA (inbuf); output = (uint8_t *) GST_BUFFER_DATA (outbuf); - gst_bayer2rgb_process_ref (filter, output, filter->width * 4, + gst_bayer2rgb_process (filter, output, filter->width * 4, input, filter->width); GST_OBJECT_UNLOCK (filter); diff --git a/gst/bayer/gstbayerorc-dist.c b/gst/bayer/gstbayerorc-dist.c new file mode 100644 index 000000000..a8bc11716 --- /dev/null +++ b/gst/bayer/gstbayerorc-dist.c @@ -0,0 +1,3212 @@ + +/* autogenerated from gstbayerorc.orc */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#include <glib.h> + +#ifndef _ORC_INTEGER_TYPEDEFS_ +#define _ORC_INTEGER_TYPEDEFS_ +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +#include <stdint.h> +typedef int8_t orc_int8; +typedef int16_t orc_int16; +typedef int32_t orc_int32; +typedef int64_t orc_int64; +typedef uint8_t orc_uint8; +typedef uint16_t orc_uint16; +typedef uint32_t orc_uint32; +typedef uint64_t orc_uint64; +#define ORC_UINT64_C(x) UINT64_C(x) +#elif defined(_MSC_VER) +typedef signed __int8 orc_int8; +typedef signed __int16 orc_int16; +typedef signed __int32 orc_int32; +typedef signed __int64 orc_int64; +typedef unsigned __int8 orc_uint8; +typedef unsigned __int16 orc_uint16; +typedef unsigned __int32 orc_uint32; +typedef unsigned __int64 orc_uint64; +#define ORC_UINT64_C(x) (x##Ui64) +#define inline __inline +#else +#include <limits.h> +typedef signed char orc_int8; +typedef short orc_int16; +typedef int orc_int32; +typedef unsigned char orc_uint8; +typedef unsigned short orc_uint16; +typedef unsigned int orc_uint32; +#if INT_MAX == LONG_MAX +typedef long long orc_int64; +typedef unsigned long long orc_uint64; +#define ORC_UINT64_C(x) (x##ULL) +#else +typedef long orc_int64; +typedef unsigned long orc_uint64; +#define ORC_UINT64_C(x) (x##UL) +#endif +#endif +typedef union +{ + orc_int16 i; + orc_int8 x2[2]; +} orc_union16; +typedef union +{ + orc_int32 i; + float f; + orc_int16 x2[2]; + orc_int8 x4[4]; +} orc_union32; +typedef union +{ + orc_int64 i; + double f; + orc_int32 x2[2]; + float x2f[2]; + orc_int16 x4[4]; +} orc_union64; +#endif +#ifndef ORC_RESTRICT +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +#define ORC_RESTRICT restrict +#elif defined(__GNUC__) && __GNUC__ >= 4 +#define ORC_RESTRICT __restrict__ +#else +#define ORC_RESTRICT +#endif +#endif + +#ifndef DISABLE_ORC +#include <orc/orc.h> +#endif +void gst_bayer_horiz_upsample_unaligned (guint8 * ORC_RESTRICT d1, + guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, int n); +void gst_bayer_horiz_upsample (guint8 * ORC_RESTRICT d1, + guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, int n); +void gst_bayer_merge_bg_bgra (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); +void gst_bayer_merge_gr_bgra (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); +void gst_bayer_merge_bg_abgr (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); +void gst_bayer_merge_gr_abgr (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); +void gst_bayer_merge_bg_rgba (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); +void gst_bayer_merge_gr_rgba (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); +void gst_bayer_merge_bg_argb (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); +void gst_bayer_merge_gr_argb (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); + + +/* begin Orc C target preamble */ +#define ORC_CLAMP(x,a,b) ((x)<(a) ? (a) : ((x)>(b) ? (b) : (x))) +#define ORC_ABS(a) ((a)<0 ? -(a) : (a)) +#define ORC_MIN(a,b) ((a)<(b) ? (a) : (b)) +#define ORC_MAX(a,b) ((a)>(b) ? (a) : (b)) +#define ORC_SB_MAX 127 +#define ORC_SB_MIN (-1-ORC_SB_MAX) +#define ORC_UB_MAX 255 +#define ORC_UB_MIN 0 +#define ORC_SW_MAX 32767 +#define ORC_SW_MIN (-1-ORC_SW_MAX) +#define ORC_UW_MAX 65535 +#define ORC_UW_MIN 0 +#define ORC_SL_MAX 2147483647 +#define ORC_SL_MIN (-1-ORC_SL_MAX) +#define ORC_UL_MAX 4294967295U +#define ORC_UL_MIN 0 +#define ORC_CLAMP_SB(x) ORC_CLAMP(x,ORC_SB_MIN,ORC_SB_MAX) +#define ORC_CLAMP_UB(x) ORC_CLAMP(x,ORC_UB_MIN,ORC_UB_MAX) +#define ORC_CLAMP_SW(x) ORC_CLAMP(x,ORC_SW_MIN,ORC_SW_MAX) +#define ORC_CLAMP_UW(x) ORC_CLAMP(x,ORC_UW_MIN,ORC_UW_MAX) +#define ORC_CLAMP_SL(x) ORC_CLAMP(x,ORC_SL_MIN,ORC_SL_MAX) +#define ORC_CLAMP_UL(x) ORC_CLAMP(x,ORC_UL_MIN,ORC_UL_MAX) +#define ORC_SWAP_W(x) ((((x)&0xff)<<8) | (((x)&0xff00)>>8)) +#define ORC_SWAP_L(x) ((((x)&0xff)<<24) | (((x)&0xff00)<<8) | (((x)&0xff0000)>>8) | (((x)&0xff000000)>>24)) +#define ORC_SWAP_Q(x) ((((x)&ORC_UINT64_C(0xff))<<56) | (((x)&ORC_UINT64_C(0xff00))<<40) | (((x)&ORC_UINT64_C(0xff0000))<<24) | (((x)&ORC_UINT64_C(0xff000000))<<8) | (((x)&ORC_UINT64_C(0xff00000000))>>8) | (((x)&ORC_UINT64_C(0xff0000000000))>>24) | (((x)&ORC_UINT64_C(0xff000000000000))>>40) | (((x)&ORC_UINT64_C(0xff00000000000000))>>56)) +#define ORC_PTR_OFFSET(ptr,offset) ((void *)(((unsigned char *)(ptr)) + (offset))) +#define ORC_DENORMAL(x) ((x) & ((((x)&0x7f800000) == 0) ? 0xff800000 : 0xffffffff)) +#define ORC_ISNAN(x) ((((x)&0x7f800000) == 0x7f800000) && (((x)&0x007fffff) != 0)) +#define ORC_DENORMAL_DOUBLE(x) ((x) & ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == 0) ? ORC_UINT64_C(0xfff0000000000000) : ORC_UINT64_C(0xffffffffffffffff))) +#define ORC_ISNAN_DOUBLE(x) ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == ORC_UINT64_C(0x7ff0000000000000)) && (((x)&ORC_UINT64_C(0x000fffffffffffff)) != 0)) +#ifndef ORC_RESTRICT +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +#define ORC_RESTRICT restrict +#elif defined(__GNUC__) && __GNUC__ >= 4 +#define ORC_RESTRICT __restrict__ +#else +#define ORC_RESTRICT +#endif +#endif +/* end Orc C target preamble */ + + + +/* gst_bayer_horiz_upsample_unaligned */ +#ifdef DISABLE_ORC +void +gst_bayer_horiz_upsample_unaligned (guint8 * ORC_RESTRICT d1, + guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; + orc_union16 *ORC_RESTRICT ptr1; + const orc_union16 *ORC_RESTRICT ptr4; + orc_union16 var37; + orc_union16 var38; + orc_union16 var39; + orc_int8 var40; + orc_int8 var41; + orc_union16 var42; + orc_int8 var43; + orc_int8 var44; + orc_int8 var45; + orc_int8 var46; + + ptr0 = (orc_union16 *) d1; + ptr1 = (orc_union16 *) d2; + ptr4 = (orc_union16 *) s1; + + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var37 = ptr4[i]; + /* 1: splitwb */ + { + orc_union16 _src; + _src.i = var37.i; + var40 = _src.x2[1]; + var41 = _src.x2[0]; + } + /* 2: loadoffw */ + var42 = ptr4[i + 1]; + /* 3: splitwb */ + { + orc_union16 _src; + _src.i = var42.i; + var43 = _src.x2[1]; + var44 = _src.x2[0]; + } + /* 4: avgub */ + var45 = ((orc_uint8) var40 + (orc_uint8) var43 + 1) >> 1; + /* 5: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var40; + _dest.x2[1] = var45; + var38.i = _dest.i; + } + /* 6: storew */ + ptr0[i] = var38; + /* 7: avgub */ + var46 = ((orc_uint8) var41 + (orc_uint8) var44 + 1) >> 1; + /* 8: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var46; + _dest.x2[1] = var44; + var39.i = _dest.i; + } + /* 9: storew */ + ptr1[i] = var39; + } + +} + +#else +static void +_backup_gst_bayer_horiz_upsample_unaligned (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; + orc_union16 *ORC_RESTRICT ptr1; + const orc_union16 *ORC_RESTRICT ptr4; + orc_union16 var37; + orc_union16 var38; + orc_union16 var39; + orc_int8 var40; + orc_int8 var41; + orc_union16 var42; + orc_int8 var43; + orc_int8 var44; + orc_int8 var45; + orc_int8 var46; + + ptr0 = (orc_union16 *) ex->arrays[0]; + ptr1 = (orc_union16 *) ex->arrays[1]; + ptr4 = (orc_union16 *) ex->arrays[4]; + + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var37 = ptr4[i]; + /* 1: splitwb */ + { + orc_union16 _src; + _src.i = var37.i; + var40 = _src.x2[1]; + var41 = _src.x2[0]; + } + /* 2: loadoffw */ + var42 = ptr4[i + 1]; + /* 3: splitwb */ + { + orc_union16 _src; + _src.i = var42.i; + var43 = _src.x2[1]; + var44 = _src.x2[0]; + } + /* 4: avgub */ + var45 = ((orc_uint8) var40 + (orc_uint8) var43 + 1) >> 1; + /* 5: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var40; + _dest.x2[1] = var45; + var38.i = _dest.i; + } + /* 6: storew */ + ptr0[i] = var38; + /* 7: avgub */ + var46 = ((orc_uint8) var41 + (orc_uint8) var44 + 1) >> 1; + /* 8: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var46; + _dest.x2[1] = var44; + var39.i = _dest.i; + } + /* 9: storew */ + ptr1[i] = var39; + } + +} + +void +gst_bayer_horiz_upsample_unaligned (guint8 * ORC_RESTRICT d1, + guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static int p_inited = 0; + static OrcProgram *p = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + + p = orc_program_new (); + orc_program_set_name (p, "gst_bayer_horiz_upsample_unaligned"); + orc_program_set_backup_function (p, + _backup_gst_bayer_horiz_upsample_unaligned); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_destination (p, 2, "d2"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_constant (p, 4, 0x00000001, "c1"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 1, "t2"); + orc_program_add_temporary (p, 1, "t3"); + orc_program_add_temporary (p, 1, "t4"); + orc_program_add_temporary (p, 1, "t5"); + + orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "loadoffw", 0, ORC_VAR_T1, ORC_VAR_S1, + ORC_VAR_C1, ORC_VAR_D1); + orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_T1, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 0, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_T4, + ORC_VAR_D1); + + orc_program_compile (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->program = p; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_D2] = d2; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = p->code_exec; + func (ex); +} +#endif + + +/* gst_bayer_horiz_upsample */ +#ifdef DISABLE_ORC +void +gst_bayer_horiz_upsample (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; + orc_union16 *ORC_RESTRICT ptr1; + const orc_union16 *ORC_RESTRICT ptr4; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_int8 var43; + orc_int8 var44; + orc_int8 var45; + orc_int8 var46; + orc_union16 var47; + orc_int8 var48; + orc_int8 var49; + orc_int8 var50; + orc_int8 var51; + + ptr0 = (orc_union16 *) d1; + ptr1 = (orc_union16 *) d2; + ptr4 = (orc_union16 *) s1; + + + for (i = 0; i < n; i++) { + /* 0: loadoffw */ + var42 = ptr4[i + -1]; + /* 1: splitwb */ + { + orc_union16 _src; + _src.i = var42.i; + var43 = _src.x2[1]; + var44 = _src.x2[0]; + } + /* 2: loadw */ + var39 = ptr4[i]; + /* 3: splitwb */ + { + orc_union16 _src; + _src.i = var39.i; + var45 = _src.x2[1]; + var46 = _src.x2[0]; + } + /* 4: loadoffw */ + var47 = ptr4[i + 1]; + /* 5: splitwb */ + { + orc_union16 _src; + _src.i = var47.i; + var48 = _src.x2[1]; + var49 = _src.x2[0]; + } + /* 6: avgub */ + var50 = ((orc_uint8) var46 + (orc_uint8) var49 + 1) >> 1; + /* 7: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var46; + _dest.x2[1] = var50; + var40.i = _dest.i; + } + /* 8: storew */ + ptr0[i] = var40; + /* 9: avgub */ + var51 = ((orc_uint8) var43 + (orc_uint8) var45 + 1) >> 1; + /* 10: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var51; + _dest.x2[1] = var45; + var41.i = _dest.i; + } + /* 11: storew */ + ptr1[i] = var41; + } + +} + +#else +static void +_backup_gst_bayer_horiz_upsample (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; + orc_union16 *ORC_RESTRICT ptr1; + const orc_union16 *ORC_RESTRICT ptr4; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_int8 var43; + orc_int8 var44; + orc_int8 var45; + orc_int8 var46; + orc_union16 var47; + orc_int8 var48; + orc_int8 var49; + orc_int8 var50; + orc_int8 var51; + + ptr0 = (orc_union16 *) ex->arrays[0]; + ptr1 = (orc_union16 *) ex->arrays[1]; + ptr4 = (orc_union16 *) ex->arrays[4]; + + + for (i = 0; i < n; i++) { + /* 0: loadoffw */ + var42 = ptr4[i + -1]; + /* 1: splitwb */ + { + orc_union16 _src; + _src.i = var42.i; + var43 = _src.x2[1]; + var44 = _src.x2[0]; + } + /* 2: loadw */ + var39 = ptr4[i]; + /* 3: splitwb */ + { + orc_union16 _src; + _src.i = var39.i; + var45 = _src.x2[1]; + var46 = _src.x2[0]; + } + /* 4: loadoffw */ + var47 = ptr4[i + 1]; + /* 5: splitwb */ + { + orc_union16 _src; + _src.i = var47.i; + var48 = _src.x2[1]; + var49 = _src.x2[0]; + } + /* 6: avgub */ + var50 = ((orc_uint8) var46 + (orc_uint8) var49 + 1) >> 1; + /* 7: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var46; + _dest.x2[1] = var50; + var40.i = _dest.i; + } + /* 8: storew */ + ptr0[i] = var40; + /* 9: avgub */ + var51 = ((orc_uint8) var43 + (orc_uint8) var45 + 1) >> 1; + /* 10: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var51; + _dest.x2[1] = var45; + var41.i = _dest.i; + } + /* 11: storew */ + ptr1[i] = var41; + } + +} + +void +gst_bayer_horiz_upsample (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static int p_inited = 0; + static OrcProgram *p = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + + p = orc_program_new (); + orc_program_set_name (p, "gst_bayer_horiz_upsample"); + orc_program_set_backup_function (p, _backup_gst_bayer_horiz_upsample); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_destination (p, 2, "d2"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_constant (p, 4, 0xffffffff, "c1"); + orc_program_add_constant (p, 4, 0x00000001, "c2"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 1, "t2"); + orc_program_add_temporary (p, 1, "t3"); + orc_program_add_temporary (p, 1, "t4"); + orc_program_add_temporary (p, 1, "t5"); + orc_program_add_temporary (p, 1, "t6"); + orc_program_add_temporary (p, 1, "t7"); + + orc_program_append_2 (p, "loadoffw", 0, ORC_VAR_T1, ORC_VAR_S1, + ORC_VAR_C1, ORC_VAR_D1); + orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_T1, + ORC_VAR_D1); + orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "loadoffw", 0, ORC_VAR_T1, ORC_VAR_S1, + ORC_VAR_C2, ORC_VAR_D1); + orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T7, ORC_VAR_T6, ORC_VAR_T1, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 0, ORC_VAR_T6, ORC_VAR_T4, ORC_VAR_T6, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 0, ORC_VAR_D1, ORC_VAR_T4, ORC_VAR_T6, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 0, ORC_VAR_D2, ORC_VAR_T3, ORC_VAR_T5, + ORC_VAR_D1); + + orc_program_compile (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->program = p; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_D2] = d2; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = p->code_exec; + func (ex); +} +#endif + + +/* gst_bayer_merge_bg_bgra */ +#ifdef DISABLE_ORC +void +gst_bayer_merge_bg_bgra (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + int i; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + const orc_union16 *ORC_RESTRICT ptr6; + const orc_union16 *ORC_RESTRICT ptr7; + const orc_union16 *ORC_RESTRICT ptr8; + const orc_union16 *ORC_RESTRICT ptr9; + orc_union16 var37; + orc_union16 var38; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union64 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union32 var54; + orc_union32 var55; + + ptr0 = (orc_union64 *) d1; + ptr4 = (orc_union16 *) s1; + ptr5 = (orc_union16 *) s2; + ptr6 = (orc_union16 *) s3; + ptr7 = (orc_union16 *) s4; + ptr8 = (orc_union16 *) s5; + ptr9 = (orc_union16 *) s6; + + /* 9: loadpw */ + var42.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + /* 11: loadpw */ + var43.i = (int) 0x0000ff00; /* 65280 or 3.22526e-319f */ + /* 16: loadpb */ + var45.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + var45.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var37 = ptr5[i]; + /* 1: loadw */ + var38 = ptr9[i]; + /* 2: avgub */ + var47.x2[0] = ((orc_uint8) var37.x2[0] + (orc_uint8) var38.x2[0] + 1) >> 1; + var47.x2[1] = ((orc_uint8) var37.x2[1] + (orc_uint8) var38.x2[1] + 1) >> 1; + /* 3: loadw */ + var39 = ptr4[i]; + /* 4: loadw */ + var40 = ptr8[i]; + /* 5: avgub */ + var48.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var40.x2[0] + 1) >> 1; + var48.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var40.x2[1] + 1) >> 1; + /* 6: loadw */ + var41 = ptr7[i]; + /* 7: copyw */ + var49.i = var41.i; + /* 8: avgub */ + var50.x2[0] = ((orc_uint8) var48.x2[0] + (orc_uint8) var49.x2[0] + 1) >> 1; + var50.x2[1] = ((orc_uint8) var48.x2[1] + (orc_uint8) var49.x2[1] + 1) >> 1; + /* 10: andw */ + var51.i = var50.i & var42.i; + /* 12: andw */ + var52.i = var49.i & var43.i; + /* 13: orw */ + var53.i = var52.i | var51.i; + /* 14: loadw */ + var44 = ptr6[i]; + /* 15: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[0]; + _dest.x2[1] = var53.x2[0]; + var54.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[1]; + _dest.x2[1] = var53.x2[1]; + var54.x2[1] = _dest.i; + } + /* 17: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var47.x2[0]; + _dest.x2[1] = var45.x2[0]; + var55.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var47.x2[1]; + _dest.x2[1] = var45.x2[1]; + var55.x2[1] = _dest.i; + } + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[0]; + _dest.x2[1] = var55.x2[0]; + var46.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[1]; + _dest.x2[1] = var55.x2[1]; + var46.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr0[i] = var46; + } + +} + +#else +static void +_backup_gst_bayer_merge_bg_bgra (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + const orc_union16 *ORC_RESTRICT ptr6; + const orc_union16 *ORC_RESTRICT ptr7; + const orc_union16 *ORC_RESTRICT ptr8; + const orc_union16 *ORC_RESTRICT ptr9; + orc_union16 var37; + orc_union16 var38; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union64 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union32 var54; + orc_union32 var55; + + ptr0 = (orc_union64 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + ptr5 = (orc_union16 *) ex->arrays[5]; + ptr6 = (orc_union16 *) ex->arrays[6]; + ptr7 = (orc_union16 *) ex->arrays[7]; + ptr8 = (orc_union16 *) ex->arrays[8]; + ptr9 = (orc_union16 *) ex->arrays[9]; + + /* 9: loadpw */ + var42.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + /* 11: loadpw */ + var43.i = (int) 0x0000ff00; /* 65280 or 3.22526e-319f */ + /* 16: loadpb */ + var45.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + var45.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var37 = ptr5[i]; + /* 1: loadw */ + var38 = ptr9[i]; + /* 2: avgub */ + var47.x2[0] = ((orc_uint8) var37.x2[0] + (orc_uint8) var38.x2[0] + 1) >> 1; + var47.x2[1] = ((orc_uint8) var37.x2[1] + (orc_uint8) var38.x2[1] + 1) >> 1; + /* 3: loadw */ + var39 = ptr4[i]; + /* 4: loadw */ + var40 = ptr8[i]; + /* 5: avgub */ + var48.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var40.x2[0] + 1) >> 1; + var48.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var40.x2[1] + 1) >> 1; + /* 6: loadw */ + var41 = ptr7[i]; + /* 7: copyw */ + var49.i = var41.i; + /* 8: avgub */ + var50.x2[0] = ((orc_uint8) var48.x2[0] + (orc_uint8) var49.x2[0] + 1) >> 1; + var50.x2[1] = ((orc_uint8) var48.x2[1] + (orc_uint8) var49.x2[1] + 1) >> 1; + /* 10: andw */ + var51.i = var50.i & var42.i; + /* 12: andw */ + var52.i = var49.i & var43.i; + /* 13: orw */ + var53.i = var52.i | var51.i; + /* 14: loadw */ + var44 = ptr6[i]; + /* 15: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[0]; + _dest.x2[1] = var53.x2[0]; + var54.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[1]; + _dest.x2[1] = var53.x2[1]; + var54.x2[1] = _dest.i; + } + /* 17: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var47.x2[0]; + _dest.x2[1] = var45.x2[0]; + var55.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var47.x2[1]; + _dest.x2[1] = var45.x2[1]; + var55.x2[1] = _dest.i; + } + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[0]; + _dest.x2[1] = var55.x2[0]; + var46.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[1]; + _dest.x2[1] = var55.x2[1]; + var46.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr0[i] = var46; + } + +} + +void +gst_bayer_merge_bg_bgra (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static int p_inited = 0; + static OrcProgram *p = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + + p = orc_program_new (); + orc_program_set_name (p, "gst_bayer_merge_bg_bgra"); + orc_program_set_backup_function (p, _backup_gst_bayer_merge_bg_bgra); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_source (p, 2, "s2"); + orc_program_add_source (p, 2, "s3"); + orc_program_add_source (p, 2, "s4"); + orc_program_add_source (p, 2, "s5"); + orc_program_add_source (p, 2, "s6"); + orc_program_add_constant (p, 4, 0x000000ff, "c1"); + orc_program_add_constant (p, 4, 0x0000ff00, "c2"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 2, "t4"); + orc_program_add_temporary (p, 2, "t5"); + + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T3, ORC_VAR_S2, ORC_VAR_S6, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T4, ORC_VAR_S1, ORC_VAR_S5, + ORC_VAR_D1); + orc_program_append_2 (p, "copyw", 0, ORC_VAR_T5, ORC_VAR_S4, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "orw", 0, ORC_VAR_T4, ORC_VAR_T5, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1, + ORC_VAR_D1); + + orc_program_compile (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->program = p; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + ex->arrays[ORC_VAR_S5] = (void *) s5; + ex->arrays[ORC_VAR_S6] = (void *) s6; + + func = p->code_exec; + func (ex); +} +#endif + + +/* gst_bayer_merge_gr_bgra */ +#ifdef DISABLE_ORC +void +gst_bayer_merge_gr_bgra (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + int i; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + const orc_union16 *ORC_RESTRICT ptr6; + const orc_union16 *ORC_RESTRICT ptr7; + const orc_union16 *ORC_RESTRICT ptr8; + const orc_union16 *ORC_RESTRICT ptr9; + orc_union16 var37; + orc_union16 var38; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union64 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union32 var54; + orc_union32 var55; + + ptr0 = (orc_union64 *) d1; + ptr4 = (orc_union16 *) s1; + ptr5 = (orc_union16 *) s2; + ptr6 = (orc_union16 *) s3; + ptr7 = (orc_union16 *) s4; + ptr8 = (orc_union16 *) s5; + ptr9 = (orc_union16 *) s6; + + /* 9: loadpw */ + var42.i = (int) 0x0000ff00; /* 65280 or 3.22526e-319f */ + /* 11: loadpw */ + var43.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + /* 16: loadpb */ + var45.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + var45.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var37 = ptr4[i]; + /* 1: loadw */ + var38 = ptr8[i]; + /* 2: avgub */ + var47.x2[0] = ((orc_uint8) var37.x2[0] + (orc_uint8) var38.x2[0] + 1) >> 1; + var47.x2[1] = ((orc_uint8) var37.x2[1] + (orc_uint8) var38.x2[1] + 1) >> 1; + /* 3: loadw */ + var39 = ptr5[i]; + /* 4: loadw */ + var40 = ptr9[i]; + /* 5: avgub */ + var48.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var40.x2[0] + 1) >> 1; + var48.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var40.x2[1] + 1) >> 1; + /* 6: loadw */ + var41 = ptr6[i]; + /* 7: copyw */ + var49.i = var41.i; + /* 8: avgub */ + var50.x2[0] = ((orc_uint8) var48.x2[0] + (orc_uint8) var49.x2[0] + 1) >> 1; + var50.x2[1] = ((orc_uint8) var48.x2[1] + (orc_uint8) var49.x2[1] + 1) >> 1; + /* 10: andw */ + var51.i = var50.i & var42.i; + /* 12: andw */ + var52.i = var49.i & var43.i; + /* 13: orw */ + var53.i = var52.i | var51.i; + /* 14: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var47.x2[0]; + _dest.x2[1] = var53.x2[0]; + var54.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var47.x2[1]; + _dest.x2[1] = var53.x2[1]; + var54.x2[1] = _dest.i; + } + /* 15: loadw */ + var44 = ptr7[i]; + /* 17: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[0]; + _dest.x2[1] = var45.x2[0]; + var55.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[1]; + _dest.x2[1] = var45.x2[1]; + var55.x2[1] = _dest.i; + } + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[0]; + _dest.x2[1] = var55.x2[0]; + var46.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[1]; + _dest.x2[1] = var55.x2[1]; + var46.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr0[i] = var46; + } + +} + +#else +static void +_backup_gst_bayer_merge_gr_bgra (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + const orc_union16 *ORC_RESTRICT ptr6; + const orc_union16 *ORC_RESTRICT ptr7; + const orc_union16 *ORC_RESTRICT ptr8; + const orc_union16 *ORC_RESTRICT ptr9; + orc_union16 var37; + orc_union16 var38; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union64 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union32 var54; + orc_union32 var55; + + ptr0 = (orc_union64 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + ptr5 = (orc_union16 *) ex->arrays[5]; + ptr6 = (orc_union16 *) ex->arrays[6]; + ptr7 = (orc_union16 *) ex->arrays[7]; + ptr8 = (orc_union16 *) ex->arrays[8]; + ptr9 = (orc_union16 *) ex->arrays[9]; + + /* 9: loadpw */ + var42.i = (int) 0x0000ff00; /* 65280 or 3.22526e-319f */ + /* 11: loadpw */ + var43.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + /* 16: loadpb */ + var45.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + var45.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var37 = ptr4[i]; + /* 1: loadw */ + var38 = ptr8[i]; + /* 2: avgub */ + var47.x2[0] = ((orc_uint8) var37.x2[0] + (orc_uint8) var38.x2[0] + 1) >> 1; + var47.x2[1] = ((orc_uint8) var37.x2[1] + (orc_uint8) var38.x2[1] + 1) >> 1; + /* 3: loadw */ + var39 = ptr5[i]; + /* 4: loadw */ + var40 = ptr9[i]; + /* 5: avgub */ + var48.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var40.x2[0] + 1) >> 1; + var48.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var40.x2[1] + 1) >> 1; + /* 6: loadw */ + var41 = ptr6[i]; + /* 7: copyw */ + var49.i = var41.i; + /* 8: avgub */ + var50.x2[0] = ((orc_uint8) var48.x2[0] + (orc_uint8) var49.x2[0] + 1) >> 1; + var50.x2[1] = ((orc_uint8) var48.x2[1] + (orc_uint8) var49.x2[1] + 1) >> 1; + /* 10: andw */ + var51.i = var50.i & var42.i; + /* 12: andw */ + var52.i = var49.i & var43.i; + /* 13: orw */ + var53.i = var52.i | var51.i; + /* 14: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var47.x2[0]; + _dest.x2[1] = var53.x2[0]; + var54.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var47.x2[1]; + _dest.x2[1] = var53.x2[1]; + var54.x2[1] = _dest.i; + } + /* 15: loadw */ + var44 = ptr7[i]; + /* 17: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[0]; + _dest.x2[1] = var45.x2[0]; + var55.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[1]; + _dest.x2[1] = var45.x2[1]; + var55.x2[1] = _dest.i; + } + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[0]; + _dest.x2[1] = var55.x2[0]; + var46.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[1]; + _dest.x2[1] = var55.x2[1]; + var46.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr0[i] = var46; + } + +} + +void +gst_bayer_merge_gr_bgra (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static int p_inited = 0; + static OrcProgram *p = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + + p = orc_program_new (); + orc_program_set_name (p, "gst_bayer_merge_gr_bgra"); + orc_program_set_backup_function (p, _backup_gst_bayer_merge_gr_bgra); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_source (p, 2, "s2"); + orc_program_add_source (p, 2, "s3"); + orc_program_add_source (p, 2, "s4"); + orc_program_add_source (p, 2, "s5"); + orc_program_add_source (p, 2, "s6"); + orc_program_add_constant (p, 4, 0x0000ff00, "c1"); + orc_program_add_constant (p, 4, 0x000000ff, "c2"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 2, "t4"); + orc_program_add_temporary (p, 2, "t5"); + + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T3, ORC_VAR_S1, ORC_VAR_S5, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T4, ORC_VAR_S2, ORC_VAR_S6, + ORC_VAR_D1); + orc_program_append_2 (p, "copyw", 0, ORC_VAR_T5, ORC_VAR_S3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "orw", 0, ORC_VAR_T4, ORC_VAR_T5, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T1, ORC_VAR_S4, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1, + ORC_VAR_D1); + + orc_program_compile (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->program = p; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + ex->arrays[ORC_VAR_S5] = (void *) s5; + ex->arrays[ORC_VAR_S6] = (void *) s6; + + func = p->code_exec; + func (ex); +} +#endif + + +/* gst_bayer_merge_bg_abgr */ +#ifdef DISABLE_ORC +void +gst_bayer_merge_bg_abgr (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + int i; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + const orc_union16 *ORC_RESTRICT ptr6; + const orc_union16 *ORC_RESTRICT ptr7; + const orc_union16 *ORC_RESTRICT ptr8; + const orc_union16 *ORC_RESTRICT ptr9; + orc_union16 var37; + orc_union16 var38; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union64 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union32 var54; + orc_union32 var55; + + ptr0 = (orc_union64 *) d1; + ptr4 = (orc_union16 *) s1; + ptr5 = (orc_union16 *) s2; + ptr6 = (orc_union16 *) s3; + ptr7 = (orc_union16 *) s4; + ptr8 = (orc_union16 *) s5; + ptr9 = (orc_union16 *) s6; + + /* 9: loadpw */ + var42.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + /* 11: loadpw */ + var43.i = (int) 0x0000ff00; /* 65280 or 3.22526e-319f */ + /* 14: loadpb */ + var44.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + var44.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var37 = ptr5[i]; + /* 1: loadw */ + var38 = ptr9[i]; + /* 2: avgub */ + var47.x2[0] = ((orc_uint8) var37.x2[0] + (orc_uint8) var38.x2[0] + 1) >> 1; + var47.x2[1] = ((orc_uint8) var37.x2[1] + (orc_uint8) var38.x2[1] + 1) >> 1; + /* 3: loadw */ + var39 = ptr4[i]; + /* 4: loadw */ + var40 = ptr8[i]; + /* 5: avgub */ + var48.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var40.x2[0] + 1) >> 1; + var48.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var40.x2[1] + 1) >> 1; + /* 6: loadw */ + var41 = ptr7[i]; + /* 7: copyw */ + var49.i = var41.i; + /* 8: avgub */ + var50.x2[0] = ((orc_uint8) var48.x2[0] + (orc_uint8) var49.x2[0] + 1) >> 1; + var50.x2[1] = ((orc_uint8) var48.x2[1] + (orc_uint8) var49.x2[1] + 1) >> 1; + /* 10: andw */ + var51.i = var50.i & var42.i; + /* 12: andw */ + var52.i = var49.i & var43.i; + /* 13: orw */ + var53.i = var52.i | var51.i; + /* 15: loadw */ + var45 = ptr6[i]; + /* 16: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[0]; + _dest.x2[1] = var45.x2[0]; + var54.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[1]; + _dest.x2[1] = var45.x2[1]; + var54.x2[1] = _dest.i; + } + /* 17: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var53.x2[0]; + _dest.x2[1] = var47.x2[0]; + var55.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var53.x2[1]; + _dest.x2[1] = var47.x2[1]; + var55.x2[1] = _dest.i; + } + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[0]; + _dest.x2[1] = var55.x2[0]; + var46.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[1]; + _dest.x2[1] = var55.x2[1]; + var46.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr0[i] = var46; + } + +} + +#else +static void +_backup_gst_bayer_merge_bg_abgr (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + const orc_union16 *ORC_RESTRICT ptr6; + const orc_union16 *ORC_RESTRICT ptr7; + const orc_union16 *ORC_RESTRICT ptr8; + const orc_union16 *ORC_RESTRICT ptr9; + orc_union16 var37; + orc_union16 var38; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union64 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union32 var54; + orc_union32 var55; + + ptr0 = (orc_union64 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + ptr5 = (orc_union16 *) ex->arrays[5]; + ptr6 = (orc_union16 *) ex->arrays[6]; + ptr7 = (orc_union16 *) ex->arrays[7]; + ptr8 = (orc_union16 *) ex->arrays[8]; + ptr9 = (orc_union16 *) ex->arrays[9]; + + /* 9: loadpw */ + var42.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + /* 11: loadpw */ + var43.i = (int) 0x0000ff00; /* 65280 or 3.22526e-319f */ + /* 14: loadpb */ + var44.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + var44.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var37 = ptr5[i]; + /* 1: loadw */ + var38 = ptr9[i]; + /* 2: avgub */ + var47.x2[0] = ((orc_uint8) var37.x2[0] + (orc_uint8) var38.x2[0] + 1) >> 1; + var47.x2[1] = ((orc_uint8) var37.x2[1] + (orc_uint8) var38.x2[1] + 1) >> 1; + /* 3: loadw */ + var39 = ptr4[i]; + /* 4: loadw */ + var40 = ptr8[i]; + /* 5: avgub */ + var48.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var40.x2[0] + 1) >> 1; + var48.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var40.x2[1] + 1) >> 1; + /* 6: loadw */ + var41 = ptr7[i]; + /* 7: copyw */ + var49.i = var41.i; + /* 8: avgub */ + var50.x2[0] = ((orc_uint8) var48.x2[0] + (orc_uint8) var49.x2[0] + 1) >> 1; + var50.x2[1] = ((orc_uint8) var48.x2[1] + (orc_uint8) var49.x2[1] + 1) >> 1; + /* 10: andw */ + var51.i = var50.i & var42.i; + /* 12: andw */ + var52.i = var49.i & var43.i; + /* 13: orw */ + var53.i = var52.i | var51.i; + /* 15: loadw */ + var45 = ptr6[i]; + /* 16: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[0]; + _dest.x2[1] = var45.x2[0]; + var54.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[1]; + _dest.x2[1] = var45.x2[1]; + var54.x2[1] = _dest.i; + } + /* 17: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var53.x2[0]; + _dest.x2[1] = var47.x2[0]; + var55.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var53.x2[1]; + _dest.x2[1] = var47.x2[1]; + var55.x2[1] = _dest.i; + } + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[0]; + _dest.x2[1] = var55.x2[0]; + var46.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[1]; + _dest.x2[1] = var55.x2[1]; + var46.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr0[i] = var46; + } + +} + +void +gst_bayer_merge_bg_abgr (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static int p_inited = 0; + static OrcProgram *p = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + + p = orc_program_new (); + orc_program_set_name (p, "gst_bayer_merge_bg_abgr"); + orc_program_set_backup_function (p, _backup_gst_bayer_merge_bg_abgr); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_source (p, 2, "s2"); + orc_program_add_source (p, 2, "s3"); + orc_program_add_source (p, 2, "s4"); + orc_program_add_source (p, 2, "s5"); + orc_program_add_source (p, 2, "s6"); + orc_program_add_constant (p, 4, 0x000000ff, "c1"); + orc_program_add_constant (p, 4, 0x0000ff00, "c2"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 2, "t4"); + orc_program_add_temporary (p, 2, "t5"); + + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T3, ORC_VAR_S2, ORC_VAR_S6, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T4, ORC_VAR_S1, ORC_VAR_S5, + ORC_VAR_D1); + orc_program_append_2 (p, "copyw", 0, ORC_VAR_T5, ORC_VAR_S4, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "orw", 0, ORC_VAR_T4, ORC_VAR_T5, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T1, ORC_VAR_C1, ORC_VAR_S3, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T2, ORC_VAR_T4, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + + orc_program_compile (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->program = p; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + ex->arrays[ORC_VAR_S5] = (void *) s5; + ex->arrays[ORC_VAR_S6] = (void *) s6; + + func = p->code_exec; + func (ex); +} +#endif + + +/* gst_bayer_merge_gr_abgr */ +#ifdef DISABLE_ORC +void +gst_bayer_merge_gr_abgr (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + int i; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + const orc_union16 *ORC_RESTRICT ptr6; + const orc_union16 *ORC_RESTRICT ptr7; + const orc_union16 *ORC_RESTRICT ptr8; + const orc_union16 *ORC_RESTRICT ptr9; + orc_union16 var37; + orc_union16 var38; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union64 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union32 var54; + orc_union32 var55; + + ptr0 = (orc_union64 *) d1; + ptr4 = (orc_union16 *) s1; + ptr5 = (orc_union16 *) s2; + ptr6 = (orc_union16 *) s3; + ptr7 = (orc_union16 *) s4; + ptr8 = (orc_union16 *) s5; + ptr9 = (orc_union16 *) s6; + + /* 9: loadpw */ + var42.i = (int) 0x0000ff00; /* 65280 or 3.22526e-319f */ + /* 11: loadpw */ + var43.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + /* 14: loadpb */ + var44.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + var44.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var37 = ptr4[i]; + /* 1: loadw */ + var38 = ptr8[i]; + /* 2: avgub */ + var47.x2[0] = ((orc_uint8) var37.x2[0] + (orc_uint8) var38.x2[0] + 1) >> 1; + var47.x2[1] = ((orc_uint8) var37.x2[1] + (orc_uint8) var38.x2[1] + 1) >> 1; + /* 3: loadw */ + var39 = ptr5[i]; + /* 4: loadw */ + var40 = ptr9[i]; + /* 5: avgub */ + var48.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var40.x2[0] + 1) >> 1; + var48.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var40.x2[1] + 1) >> 1; + /* 6: loadw */ + var41 = ptr6[i]; + /* 7: copyw */ + var49.i = var41.i; + /* 8: avgub */ + var50.x2[0] = ((orc_uint8) var48.x2[0] + (orc_uint8) var49.x2[0] + 1) >> 1; + var50.x2[1] = ((orc_uint8) var48.x2[1] + (orc_uint8) var49.x2[1] + 1) >> 1; + /* 10: andw */ + var51.i = var50.i & var42.i; + /* 12: andw */ + var52.i = var49.i & var43.i; + /* 13: orw */ + var53.i = var52.i | var51.i; + /* 15: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[0]; + _dest.x2[1] = var47.x2[0]; + var54.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[1]; + _dest.x2[1] = var47.x2[1]; + var54.x2[1] = _dest.i; + } + /* 16: loadw */ + var45 = ptr7[i]; + /* 17: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var53.x2[0]; + _dest.x2[1] = var45.x2[0]; + var55.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var53.x2[1]; + _dest.x2[1] = var45.x2[1]; + var55.x2[1] = _dest.i; + } + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[0]; + _dest.x2[1] = var55.x2[0]; + var46.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[1]; + _dest.x2[1] = var55.x2[1]; + var46.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr0[i] = var46; + } + +} + +#else +static void +_backup_gst_bayer_merge_gr_abgr (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + const orc_union16 *ORC_RESTRICT ptr6; + const orc_union16 *ORC_RESTRICT ptr7; + const orc_union16 *ORC_RESTRICT ptr8; + const orc_union16 *ORC_RESTRICT ptr9; + orc_union16 var37; + orc_union16 var38; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union64 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union32 var54; + orc_union32 var55; + + ptr0 = (orc_union64 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + ptr5 = (orc_union16 *) ex->arrays[5]; + ptr6 = (orc_union16 *) ex->arrays[6]; + ptr7 = (orc_union16 *) ex->arrays[7]; + ptr8 = (orc_union16 *) ex->arrays[8]; + ptr9 = (orc_union16 *) ex->arrays[9]; + + /* 9: loadpw */ + var42.i = (int) 0x0000ff00; /* 65280 or 3.22526e-319f */ + /* 11: loadpw */ + var43.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + /* 14: loadpb */ + var44.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + var44.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var37 = ptr4[i]; + /* 1: loadw */ + var38 = ptr8[i]; + /* 2: avgub */ + var47.x2[0] = ((orc_uint8) var37.x2[0] + (orc_uint8) var38.x2[0] + 1) >> 1; + var47.x2[1] = ((orc_uint8) var37.x2[1] + (orc_uint8) var38.x2[1] + 1) >> 1; + /* 3: loadw */ + var39 = ptr5[i]; + /* 4: loadw */ + var40 = ptr9[i]; + /* 5: avgub */ + var48.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var40.x2[0] + 1) >> 1; + var48.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var40.x2[1] + 1) >> 1; + /* 6: loadw */ + var41 = ptr6[i]; + /* 7: copyw */ + var49.i = var41.i; + /* 8: avgub */ + var50.x2[0] = ((orc_uint8) var48.x2[0] + (orc_uint8) var49.x2[0] + 1) >> 1; + var50.x2[1] = ((orc_uint8) var48.x2[1] + (orc_uint8) var49.x2[1] + 1) >> 1; + /* 10: andw */ + var51.i = var50.i & var42.i; + /* 12: andw */ + var52.i = var49.i & var43.i; + /* 13: orw */ + var53.i = var52.i | var51.i; + /* 15: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[0]; + _dest.x2[1] = var47.x2[0]; + var54.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[1]; + _dest.x2[1] = var47.x2[1]; + var54.x2[1] = _dest.i; + } + /* 16: loadw */ + var45 = ptr7[i]; + /* 17: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var53.x2[0]; + _dest.x2[1] = var45.x2[0]; + var55.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var53.x2[1]; + _dest.x2[1] = var45.x2[1]; + var55.x2[1] = _dest.i; + } + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[0]; + _dest.x2[1] = var55.x2[0]; + var46.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[1]; + _dest.x2[1] = var55.x2[1]; + var46.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr0[i] = var46; + } + +} + +void +gst_bayer_merge_gr_abgr (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static int p_inited = 0; + static OrcProgram *p = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + + p = orc_program_new (); + orc_program_set_name (p, "gst_bayer_merge_gr_abgr"); + orc_program_set_backup_function (p, _backup_gst_bayer_merge_gr_abgr); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_source (p, 2, "s2"); + orc_program_add_source (p, 2, "s3"); + orc_program_add_source (p, 2, "s4"); + orc_program_add_source (p, 2, "s5"); + orc_program_add_source (p, 2, "s6"); + orc_program_add_constant (p, 4, 0x0000ff00, "c1"); + orc_program_add_constant (p, 4, 0x000000ff, "c2"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 2, "t4"); + orc_program_add_temporary (p, 2, "t5"); + + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T3, ORC_VAR_S1, ORC_VAR_S5, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T4, ORC_VAR_S2, ORC_VAR_S6, + ORC_VAR_D1); + orc_program_append_2 (p, "copyw", 0, ORC_VAR_T5, ORC_VAR_S3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "orw", 0, ORC_VAR_T4, ORC_VAR_T5, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T1, ORC_VAR_C2, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T2, ORC_VAR_T4, ORC_VAR_S4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + + orc_program_compile (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->program = p; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + ex->arrays[ORC_VAR_S5] = (void *) s5; + ex->arrays[ORC_VAR_S6] = (void *) s6; + + func = p->code_exec; + func (ex); +} +#endif + + +/* gst_bayer_merge_bg_rgba */ +#ifdef DISABLE_ORC +void +gst_bayer_merge_bg_rgba (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + int i; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + const orc_union16 *ORC_RESTRICT ptr6; + const orc_union16 *ORC_RESTRICT ptr7; + const orc_union16 *ORC_RESTRICT ptr8; + const orc_union16 *ORC_RESTRICT ptr9; + orc_union16 var37; + orc_union16 var38; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union64 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union32 var54; + orc_union32 var55; + + ptr0 = (orc_union64 *) d1; + ptr4 = (orc_union16 *) s1; + ptr5 = (orc_union16 *) s2; + ptr6 = (orc_union16 *) s3; + ptr7 = (orc_union16 *) s4; + ptr8 = (orc_union16 *) s5; + ptr9 = (orc_union16 *) s6; + + /* 9: loadpw */ + var42.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + /* 11: loadpw */ + var43.i = (int) 0x0000ff00; /* 65280 or 3.22526e-319f */ + /* 16: loadpb */ + var45.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + var45.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var37 = ptr5[i]; + /* 1: loadw */ + var38 = ptr9[i]; + /* 2: avgub */ + var47.x2[0] = ((orc_uint8) var37.x2[0] + (orc_uint8) var38.x2[0] + 1) >> 1; + var47.x2[1] = ((orc_uint8) var37.x2[1] + (orc_uint8) var38.x2[1] + 1) >> 1; + /* 3: loadw */ + var39 = ptr4[i]; + /* 4: loadw */ + var40 = ptr8[i]; + /* 5: avgub */ + var48.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var40.x2[0] + 1) >> 1; + var48.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var40.x2[1] + 1) >> 1; + /* 6: loadw */ + var41 = ptr7[i]; + /* 7: copyw */ + var49.i = var41.i; + /* 8: avgub */ + var50.x2[0] = ((orc_uint8) var48.x2[0] + (orc_uint8) var49.x2[0] + 1) >> 1; + var50.x2[1] = ((orc_uint8) var48.x2[1] + (orc_uint8) var49.x2[1] + 1) >> 1; + /* 10: andw */ + var51.i = var50.i & var42.i; + /* 12: andw */ + var52.i = var49.i & var43.i; + /* 13: orw */ + var53.i = var52.i | var51.i; + /* 14: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var47.x2[0]; + _dest.x2[1] = var53.x2[0]; + var54.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var47.x2[1]; + _dest.x2[1] = var53.x2[1]; + var54.x2[1] = _dest.i; + } + /* 15: loadw */ + var44 = ptr6[i]; + /* 17: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[0]; + _dest.x2[1] = var45.x2[0]; + var55.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[1]; + _dest.x2[1] = var45.x2[1]; + var55.x2[1] = _dest.i; + } + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[0]; + _dest.x2[1] = var55.x2[0]; + var46.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[1]; + _dest.x2[1] = var55.x2[1]; + var46.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr0[i] = var46; + } + +} + +#else +static void +_backup_gst_bayer_merge_bg_rgba (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + const orc_union16 *ORC_RESTRICT ptr6; + const orc_union16 *ORC_RESTRICT ptr7; + const orc_union16 *ORC_RESTRICT ptr8; + const orc_union16 *ORC_RESTRICT ptr9; + orc_union16 var37; + orc_union16 var38; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union64 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union32 var54; + orc_union32 var55; + + ptr0 = (orc_union64 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + ptr5 = (orc_union16 *) ex->arrays[5]; + ptr6 = (orc_union16 *) ex->arrays[6]; + ptr7 = (orc_union16 *) ex->arrays[7]; + ptr8 = (orc_union16 *) ex->arrays[8]; + ptr9 = (orc_union16 *) ex->arrays[9]; + + /* 9: loadpw */ + var42.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + /* 11: loadpw */ + var43.i = (int) 0x0000ff00; /* 65280 or 3.22526e-319f */ + /* 16: loadpb */ + var45.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + var45.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var37 = ptr5[i]; + /* 1: loadw */ + var38 = ptr9[i]; + /* 2: avgub */ + var47.x2[0] = ((orc_uint8) var37.x2[0] + (orc_uint8) var38.x2[0] + 1) >> 1; + var47.x2[1] = ((orc_uint8) var37.x2[1] + (orc_uint8) var38.x2[1] + 1) >> 1; + /* 3: loadw */ + var39 = ptr4[i]; + /* 4: loadw */ + var40 = ptr8[i]; + /* 5: avgub */ + var48.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var40.x2[0] + 1) >> 1; + var48.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var40.x2[1] + 1) >> 1; + /* 6: loadw */ + var41 = ptr7[i]; + /* 7: copyw */ + var49.i = var41.i; + /* 8: avgub */ + var50.x2[0] = ((orc_uint8) var48.x2[0] + (orc_uint8) var49.x2[0] + 1) >> 1; + var50.x2[1] = ((orc_uint8) var48.x2[1] + (orc_uint8) var49.x2[1] + 1) >> 1; + /* 10: andw */ + var51.i = var50.i & var42.i; + /* 12: andw */ + var52.i = var49.i & var43.i; + /* 13: orw */ + var53.i = var52.i | var51.i; + /* 14: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var47.x2[0]; + _dest.x2[1] = var53.x2[0]; + var54.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var47.x2[1]; + _dest.x2[1] = var53.x2[1]; + var54.x2[1] = _dest.i; + } + /* 15: loadw */ + var44 = ptr6[i]; + /* 17: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[0]; + _dest.x2[1] = var45.x2[0]; + var55.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[1]; + _dest.x2[1] = var45.x2[1]; + var55.x2[1] = _dest.i; + } + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[0]; + _dest.x2[1] = var55.x2[0]; + var46.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[1]; + _dest.x2[1] = var55.x2[1]; + var46.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr0[i] = var46; + } + +} + +void +gst_bayer_merge_bg_rgba (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static int p_inited = 0; + static OrcProgram *p = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + + p = orc_program_new (); + orc_program_set_name (p, "gst_bayer_merge_bg_rgba"); + orc_program_set_backup_function (p, _backup_gst_bayer_merge_bg_rgba); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_source (p, 2, "s2"); + orc_program_add_source (p, 2, "s3"); + orc_program_add_source (p, 2, "s4"); + orc_program_add_source (p, 2, "s5"); + orc_program_add_source (p, 2, "s6"); + orc_program_add_constant (p, 4, 0x000000ff, "c1"); + orc_program_add_constant (p, 4, 0x0000ff00, "c2"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 2, "t4"); + orc_program_add_temporary (p, 2, "t5"); + + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T3, ORC_VAR_S2, ORC_VAR_S6, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T4, ORC_VAR_S1, ORC_VAR_S5, + ORC_VAR_D1); + orc_program_append_2 (p, "copyw", 0, ORC_VAR_T5, ORC_VAR_S4, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "orw", 0, ORC_VAR_T4, ORC_VAR_T5, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + + orc_program_compile (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->program = p; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + ex->arrays[ORC_VAR_S5] = (void *) s5; + ex->arrays[ORC_VAR_S6] = (void *) s6; + + func = p->code_exec; + func (ex); +} +#endif + + +/* gst_bayer_merge_gr_rgba */ +#ifdef DISABLE_ORC +void +gst_bayer_merge_gr_rgba (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + int i; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + const orc_union16 *ORC_RESTRICT ptr6; + const orc_union16 *ORC_RESTRICT ptr7; + const orc_union16 *ORC_RESTRICT ptr8; + const orc_union16 *ORC_RESTRICT ptr9; + orc_union16 var37; + orc_union16 var38; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union64 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union32 var54; + orc_union32 var55; + + ptr0 = (orc_union64 *) d1; + ptr4 = (orc_union16 *) s1; + ptr5 = (orc_union16 *) s2; + ptr6 = (orc_union16 *) s3; + ptr7 = (orc_union16 *) s4; + ptr8 = (orc_union16 *) s5; + ptr9 = (orc_union16 *) s6; + + /* 9: loadpw */ + var42.i = (int) 0x0000ff00; /* 65280 or 3.22526e-319f */ + /* 11: loadpw */ + var43.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + /* 16: loadpb */ + var45.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + var45.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var37 = ptr4[i]; + /* 1: loadw */ + var38 = ptr8[i]; + /* 2: avgub */ + var47.x2[0] = ((orc_uint8) var37.x2[0] + (orc_uint8) var38.x2[0] + 1) >> 1; + var47.x2[1] = ((orc_uint8) var37.x2[1] + (orc_uint8) var38.x2[1] + 1) >> 1; + /* 3: loadw */ + var39 = ptr5[i]; + /* 4: loadw */ + var40 = ptr9[i]; + /* 5: avgub */ + var48.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var40.x2[0] + 1) >> 1; + var48.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var40.x2[1] + 1) >> 1; + /* 6: loadw */ + var41 = ptr6[i]; + /* 7: copyw */ + var49.i = var41.i; + /* 8: avgub */ + var50.x2[0] = ((orc_uint8) var48.x2[0] + (orc_uint8) var49.x2[0] + 1) >> 1; + var50.x2[1] = ((orc_uint8) var48.x2[1] + (orc_uint8) var49.x2[1] + 1) >> 1; + /* 10: andw */ + var51.i = var50.i & var42.i; + /* 12: andw */ + var52.i = var49.i & var43.i; + /* 13: orw */ + var53.i = var52.i | var51.i; + /* 14: loadw */ + var44 = ptr7[i]; + /* 15: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[0]; + _dest.x2[1] = var53.x2[0]; + var54.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[1]; + _dest.x2[1] = var53.x2[1]; + var54.x2[1] = _dest.i; + } + /* 17: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var47.x2[0]; + _dest.x2[1] = var45.x2[0]; + var55.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var47.x2[1]; + _dest.x2[1] = var45.x2[1]; + var55.x2[1] = _dest.i; + } + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[0]; + _dest.x2[1] = var55.x2[0]; + var46.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[1]; + _dest.x2[1] = var55.x2[1]; + var46.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr0[i] = var46; + } + +} + +#else +static void +_backup_gst_bayer_merge_gr_rgba (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + const orc_union16 *ORC_RESTRICT ptr6; + const orc_union16 *ORC_RESTRICT ptr7; + const orc_union16 *ORC_RESTRICT ptr8; + const orc_union16 *ORC_RESTRICT ptr9; + orc_union16 var37; + orc_union16 var38; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union64 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union32 var54; + orc_union32 var55; + + ptr0 = (orc_union64 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + ptr5 = (orc_union16 *) ex->arrays[5]; + ptr6 = (orc_union16 *) ex->arrays[6]; + ptr7 = (orc_union16 *) ex->arrays[7]; + ptr8 = (orc_union16 *) ex->arrays[8]; + ptr9 = (orc_union16 *) ex->arrays[9]; + + /* 9: loadpw */ + var42.i = (int) 0x0000ff00; /* 65280 or 3.22526e-319f */ + /* 11: loadpw */ + var43.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + /* 16: loadpb */ + var45.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + var45.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var37 = ptr4[i]; + /* 1: loadw */ + var38 = ptr8[i]; + /* 2: avgub */ + var47.x2[0] = ((orc_uint8) var37.x2[0] + (orc_uint8) var38.x2[0] + 1) >> 1; + var47.x2[1] = ((orc_uint8) var37.x2[1] + (orc_uint8) var38.x2[1] + 1) >> 1; + /* 3: loadw */ + var39 = ptr5[i]; + /* 4: loadw */ + var40 = ptr9[i]; + /* 5: avgub */ + var48.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var40.x2[0] + 1) >> 1; + var48.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var40.x2[1] + 1) >> 1; + /* 6: loadw */ + var41 = ptr6[i]; + /* 7: copyw */ + var49.i = var41.i; + /* 8: avgub */ + var50.x2[0] = ((orc_uint8) var48.x2[0] + (orc_uint8) var49.x2[0] + 1) >> 1; + var50.x2[1] = ((orc_uint8) var48.x2[1] + (orc_uint8) var49.x2[1] + 1) >> 1; + /* 10: andw */ + var51.i = var50.i & var42.i; + /* 12: andw */ + var52.i = var49.i & var43.i; + /* 13: orw */ + var53.i = var52.i | var51.i; + /* 14: loadw */ + var44 = ptr7[i]; + /* 15: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[0]; + _dest.x2[1] = var53.x2[0]; + var54.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[1]; + _dest.x2[1] = var53.x2[1]; + var54.x2[1] = _dest.i; + } + /* 17: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var47.x2[0]; + _dest.x2[1] = var45.x2[0]; + var55.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var47.x2[1]; + _dest.x2[1] = var45.x2[1]; + var55.x2[1] = _dest.i; + } + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[0]; + _dest.x2[1] = var55.x2[0]; + var46.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[1]; + _dest.x2[1] = var55.x2[1]; + var46.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr0[i] = var46; + } + +} + +void +gst_bayer_merge_gr_rgba (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static int p_inited = 0; + static OrcProgram *p = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + + p = orc_program_new (); + orc_program_set_name (p, "gst_bayer_merge_gr_rgba"); + orc_program_set_backup_function (p, _backup_gst_bayer_merge_gr_rgba); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_source (p, 2, "s2"); + orc_program_add_source (p, 2, "s3"); + orc_program_add_source (p, 2, "s4"); + orc_program_add_source (p, 2, "s5"); + orc_program_add_source (p, 2, "s6"); + orc_program_add_constant (p, 4, 0x0000ff00, "c1"); + orc_program_add_constant (p, 4, 0x000000ff, "c2"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 2, "t4"); + orc_program_add_temporary (p, 2, "t5"); + + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T3, ORC_VAR_S1, ORC_VAR_S5, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T4, ORC_VAR_S2, ORC_VAR_S6, + ORC_VAR_D1); + orc_program_append_2 (p, "copyw", 0, ORC_VAR_T5, ORC_VAR_S3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "orw", 0, ORC_VAR_T4, ORC_VAR_T5, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T1, ORC_VAR_S4, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + + orc_program_compile (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->program = p; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + ex->arrays[ORC_VAR_S5] = (void *) s5; + ex->arrays[ORC_VAR_S6] = (void *) s6; + + func = p->code_exec; + func (ex); +} +#endif + + +/* gst_bayer_merge_bg_argb */ +#ifdef DISABLE_ORC +void +gst_bayer_merge_bg_argb (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + int i; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + const orc_union16 *ORC_RESTRICT ptr6; + const orc_union16 *ORC_RESTRICT ptr7; + const orc_union16 *ORC_RESTRICT ptr8; + const orc_union16 *ORC_RESTRICT ptr9; + orc_union16 var37; + orc_union16 var38; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union64 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union32 var54; + orc_union32 var55; + + ptr0 = (orc_union64 *) d1; + ptr4 = (orc_union16 *) s1; + ptr5 = (orc_union16 *) s2; + ptr6 = (orc_union16 *) s3; + ptr7 = (orc_union16 *) s4; + ptr8 = (orc_union16 *) s5; + ptr9 = (orc_union16 *) s6; + + /* 9: loadpw */ + var42.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + /* 11: loadpw */ + var43.i = (int) 0x0000ff00; /* 65280 or 3.22526e-319f */ + /* 14: loadpb */ + var44.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + var44.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var37 = ptr5[i]; + /* 1: loadw */ + var38 = ptr9[i]; + /* 2: avgub */ + var47.x2[0] = ((orc_uint8) var37.x2[0] + (orc_uint8) var38.x2[0] + 1) >> 1; + var47.x2[1] = ((orc_uint8) var37.x2[1] + (orc_uint8) var38.x2[1] + 1) >> 1; + /* 3: loadw */ + var39 = ptr4[i]; + /* 4: loadw */ + var40 = ptr8[i]; + /* 5: avgub */ + var48.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var40.x2[0] + 1) >> 1; + var48.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var40.x2[1] + 1) >> 1; + /* 6: loadw */ + var41 = ptr7[i]; + /* 7: copyw */ + var49.i = var41.i; + /* 8: avgub */ + var50.x2[0] = ((orc_uint8) var48.x2[0] + (orc_uint8) var49.x2[0] + 1) >> 1; + var50.x2[1] = ((orc_uint8) var48.x2[1] + (orc_uint8) var49.x2[1] + 1) >> 1; + /* 10: andw */ + var51.i = var50.i & var42.i; + /* 12: andw */ + var52.i = var49.i & var43.i; + /* 13: orw */ + var53.i = var52.i | var51.i; + /* 15: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[0]; + _dest.x2[1] = var47.x2[0]; + var54.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[1]; + _dest.x2[1] = var47.x2[1]; + var54.x2[1] = _dest.i; + } + /* 16: loadw */ + var45 = ptr6[i]; + /* 17: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var53.x2[0]; + _dest.x2[1] = var45.x2[0]; + var55.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var53.x2[1]; + _dest.x2[1] = var45.x2[1]; + var55.x2[1] = _dest.i; + } + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[0]; + _dest.x2[1] = var55.x2[0]; + var46.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[1]; + _dest.x2[1] = var55.x2[1]; + var46.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr0[i] = var46; + } + +} + +#else +static void +_backup_gst_bayer_merge_bg_argb (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + const orc_union16 *ORC_RESTRICT ptr6; + const orc_union16 *ORC_RESTRICT ptr7; + const orc_union16 *ORC_RESTRICT ptr8; + const orc_union16 *ORC_RESTRICT ptr9; + orc_union16 var37; + orc_union16 var38; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union64 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union32 var54; + orc_union32 var55; + + ptr0 = (orc_union64 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + ptr5 = (orc_union16 *) ex->arrays[5]; + ptr6 = (orc_union16 *) ex->arrays[6]; + ptr7 = (orc_union16 *) ex->arrays[7]; + ptr8 = (orc_union16 *) ex->arrays[8]; + ptr9 = (orc_union16 *) ex->arrays[9]; + + /* 9: loadpw */ + var42.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + /* 11: loadpw */ + var43.i = (int) 0x0000ff00; /* 65280 or 3.22526e-319f */ + /* 14: loadpb */ + var44.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + var44.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var37 = ptr5[i]; + /* 1: loadw */ + var38 = ptr9[i]; + /* 2: avgub */ + var47.x2[0] = ((orc_uint8) var37.x2[0] + (orc_uint8) var38.x2[0] + 1) >> 1; + var47.x2[1] = ((orc_uint8) var37.x2[1] + (orc_uint8) var38.x2[1] + 1) >> 1; + /* 3: loadw */ + var39 = ptr4[i]; + /* 4: loadw */ + var40 = ptr8[i]; + /* 5: avgub */ + var48.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var40.x2[0] + 1) >> 1; + var48.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var40.x2[1] + 1) >> 1; + /* 6: loadw */ + var41 = ptr7[i]; + /* 7: copyw */ + var49.i = var41.i; + /* 8: avgub */ + var50.x2[0] = ((orc_uint8) var48.x2[0] + (orc_uint8) var49.x2[0] + 1) >> 1; + var50.x2[1] = ((orc_uint8) var48.x2[1] + (orc_uint8) var49.x2[1] + 1) >> 1; + /* 10: andw */ + var51.i = var50.i & var42.i; + /* 12: andw */ + var52.i = var49.i & var43.i; + /* 13: orw */ + var53.i = var52.i | var51.i; + /* 15: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[0]; + _dest.x2[1] = var47.x2[0]; + var54.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[1]; + _dest.x2[1] = var47.x2[1]; + var54.x2[1] = _dest.i; + } + /* 16: loadw */ + var45 = ptr6[i]; + /* 17: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var53.x2[0]; + _dest.x2[1] = var45.x2[0]; + var55.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var53.x2[1]; + _dest.x2[1] = var45.x2[1]; + var55.x2[1] = _dest.i; + } + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[0]; + _dest.x2[1] = var55.x2[0]; + var46.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[1]; + _dest.x2[1] = var55.x2[1]; + var46.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr0[i] = var46; + } + +} + +void +gst_bayer_merge_bg_argb (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static int p_inited = 0; + static OrcProgram *p = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + + p = orc_program_new (); + orc_program_set_name (p, "gst_bayer_merge_bg_argb"); + orc_program_set_backup_function (p, _backup_gst_bayer_merge_bg_argb); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_source (p, 2, "s2"); + orc_program_add_source (p, 2, "s3"); + orc_program_add_source (p, 2, "s4"); + orc_program_add_source (p, 2, "s5"); + orc_program_add_source (p, 2, "s6"); + orc_program_add_constant (p, 4, 0x000000ff, "c1"); + orc_program_add_constant (p, 4, 0x0000ff00, "c2"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 2, "t4"); + orc_program_add_temporary (p, 2, "t5"); + + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T3, ORC_VAR_S2, ORC_VAR_S6, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T4, ORC_VAR_S1, ORC_VAR_S5, + ORC_VAR_D1); + orc_program_append_2 (p, "copyw", 0, ORC_VAR_T5, ORC_VAR_S4, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "orw", 0, ORC_VAR_T4, ORC_VAR_T5, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T1, ORC_VAR_C1, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T2, ORC_VAR_T4, ORC_VAR_S3, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + + orc_program_compile (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->program = p; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + ex->arrays[ORC_VAR_S5] = (void *) s5; + ex->arrays[ORC_VAR_S6] = (void *) s6; + + func = p->code_exec; + func (ex); +} +#endif + + +/* gst_bayer_merge_gr_argb */ +#ifdef DISABLE_ORC +void +gst_bayer_merge_gr_argb (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + int i; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + const orc_union16 *ORC_RESTRICT ptr6; + const orc_union16 *ORC_RESTRICT ptr7; + const orc_union16 *ORC_RESTRICT ptr8; + const orc_union16 *ORC_RESTRICT ptr9; + orc_union16 var37; + orc_union16 var38; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union64 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union32 var54; + orc_union32 var55; + + ptr0 = (orc_union64 *) d1; + ptr4 = (orc_union16 *) s1; + ptr5 = (orc_union16 *) s2; + ptr6 = (orc_union16 *) s3; + ptr7 = (orc_union16 *) s4; + ptr8 = (orc_union16 *) s5; + ptr9 = (orc_union16 *) s6; + + /* 9: loadpw */ + var42.i = (int) 0x0000ff00; /* 65280 or 3.22526e-319f */ + /* 11: loadpw */ + var43.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + /* 14: loadpb */ + var44.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + var44.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var37 = ptr4[i]; + /* 1: loadw */ + var38 = ptr8[i]; + /* 2: avgub */ + var47.x2[0] = ((orc_uint8) var37.x2[0] + (orc_uint8) var38.x2[0] + 1) >> 1; + var47.x2[1] = ((orc_uint8) var37.x2[1] + (orc_uint8) var38.x2[1] + 1) >> 1; + /* 3: loadw */ + var39 = ptr5[i]; + /* 4: loadw */ + var40 = ptr9[i]; + /* 5: avgub */ + var48.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var40.x2[0] + 1) >> 1; + var48.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var40.x2[1] + 1) >> 1; + /* 6: loadw */ + var41 = ptr6[i]; + /* 7: copyw */ + var49.i = var41.i; + /* 8: avgub */ + var50.x2[0] = ((orc_uint8) var48.x2[0] + (orc_uint8) var49.x2[0] + 1) >> 1; + var50.x2[1] = ((orc_uint8) var48.x2[1] + (orc_uint8) var49.x2[1] + 1) >> 1; + /* 10: andw */ + var51.i = var50.i & var42.i; + /* 12: andw */ + var52.i = var49.i & var43.i; + /* 13: orw */ + var53.i = var52.i | var51.i; + /* 15: loadw */ + var45 = ptr7[i]; + /* 16: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[0]; + _dest.x2[1] = var45.x2[0]; + var54.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[1]; + _dest.x2[1] = var45.x2[1]; + var54.x2[1] = _dest.i; + } + /* 17: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var53.x2[0]; + _dest.x2[1] = var47.x2[0]; + var55.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var53.x2[1]; + _dest.x2[1] = var47.x2[1]; + var55.x2[1] = _dest.i; + } + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[0]; + _dest.x2[1] = var55.x2[0]; + var46.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[1]; + _dest.x2[1] = var55.x2[1]; + var46.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr0[i] = var46; + } + +} + +#else +static void +_backup_gst_bayer_merge_gr_argb (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + const orc_union16 *ORC_RESTRICT ptr6; + const orc_union16 *ORC_RESTRICT ptr7; + const orc_union16 *ORC_RESTRICT ptr8; + const orc_union16 *ORC_RESTRICT ptr9; + orc_union16 var37; + orc_union16 var38; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union64 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union32 var54; + orc_union32 var55; + + ptr0 = (orc_union64 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + ptr5 = (orc_union16 *) ex->arrays[5]; + ptr6 = (orc_union16 *) ex->arrays[6]; + ptr7 = (orc_union16 *) ex->arrays[7]; + ptr8 = (orc_union16 *) ex->arrays[8]; + ptr9 = (orc_union16 *) ex->arrays[9]; + + /* 9: loadpw */ + var42.i = (int) 0x0000ff00; /* 65280 or 3.22526e-319f */ + /* 11: loadpw */ + var43.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + /* 14: loadpb */ + var44.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + var44.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var37 = ptr4[i]; + /* 1: loadw */ + var38 = ptr8[i]; + /* 2: avgub */ + var47.x2[0] = ((orc_uint8) var37.x2[0] + (orc_uint8) var38.x2[0] + 1) >> 1; + var47.x2[1] = ((orc_uint8) var37.x2[1] + (orc_uint8) var38.x2[1] + 1) >> 1; + /* 3: loadw */ + var39 = ptr5[i]; + /* 4: loadw */ + var40 = ptr9[i]; + /* 5: avgub */ + var48.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var40.x2[0] + 1) >> 1; + var48.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var40.x2[1] + 1) >> 1; + /* 6: loadw */ + var41 = ptr6[i]; + /* 7: copyw */ + var49.i = var41.i; + /* 8: avgub */ + var50.x2[0] = ((orc_uint8) var48.x2[0] + (orc_uint8) var49.x2[0] + 1) >> 1; + var50.x2[1] = ((orc_uint8) var48.x2[1] + (orc_uint8) var49.x2[1] + 1) >> 1; + /* 10: andw */ + var51.i = var50.i & var42.i; + /* 12: andw */ + var52.i = var49.i & var43.i; + /* 13: orw */ + var53.i = var52.i | var51.i; + /* 15: loadw */ + var45 = ptr7[i]; + /* 16: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[0]; + _dest.x2[1] = var45.x2[0]; + var54.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[1]; + _dest.x2[1] = var45.x2[1]; + var54.x2[1] = _dest.i; + } + /* 17: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var53.x2[0]; + _dest.x2[1] = var47.x2[0]; + var55.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var53.x2[1]; + _dest.x2[1] = var47.x2[1]; + var55.x2[1] = _dest.i; + } + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[0]; + _dest.x2[1] = var55.x2[0]; + var46.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var54.x2[1]; + _dest.x2[1] = var55.x2[1]; + var46.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr0[i] = var46; + } + +} + +void +gst_bayer_merge_gr_argb (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static int p_inited = 0; + static OrcProgram *p = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + + p = orc_program_new (); + orc_program_set_name (p, "gst_bayer_merge_gr_argb"); + orc_program_set_backup_function (p, _backup_gst_bayer_merge_gr_argb); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_source (p, 2, "s2"); + orc_program_add_source (p, 2, "s3"); + orc_program_add_source (p, 2, "s4"); + orc_program_add_source (p, 2, "s5"); + orc_program_add_source (p, 2, "s6"); + orc_program_add_constant (p, 4, 0x0000ff00, "c1"); + orc_program_add_constant (p, 4, 0x000000ff, "c2"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 2, "t4"); + orc_program_add_temporary (p, 2, "t5"); + + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T3, ORC_VAR_S1, ORC_VAR_S5, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T4, ORC_VAR_S2, ORC_VAR_S6, + ORC_VAR_D1); + orc_program_append_2 (p, "copyw", 0, ORC_VAR_T5, ORC_VAR_S3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "orw", 0, ORC_VAR_T4, ORC_VAR_T5, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T1, ORC_VAR_C2, ORC_VAR_S4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T2, ORC_VAR_T4, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + + orc_program_compile (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->program = p; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + ex->arrays[ORC_VAR_S5] = (void *) s5; + ex->arrays[ORC_VAR_S6] = (void *) s6; + + func = p->code_exec; + func (ex); +} +#endif diff --git a/gst/bayer/gstbayerorc-dist.h b/gst/bayer/gstbayerorc-dist.h new file mode 100644 index 000000000..5e8b86556 --- /dev/null +++ b/gst/bayer/gstbayerorc-dist.h @@ -0,0 +1,86 @@ + +/* autogenerated from gstbayerorc.orc */ + +#ifndef _GSTBAYERORC_H_ +#define _GSTBAYERORC_H_ + +#include <glib.h> + +#ifdef __cplusplus +extern "C" { +#endif + + + +#ifndef _ORC_INTEGER_TYPEDEFS_ +#define _ORC_INTEGER_TYPEDEFS_ +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +#include <stdint.h> +typedef int8_t orc_int8; +typedef int16_t orc_int16; +typedef int32_t orc_int32; +typedef int64_t orc_int64; +typedef uint8_t orc_uint8; +typedef uint16_t orc_uint16; +typedef uint32_t orc_uint32; +typedef uint64_t orc_uint64; +#define ORC_UINT64_C(x) UINT64_C(x) +#elif defined(_MSC_VER) +typedef signed __int8 orc_int8; +typedef signed __int16 orc_int16; +typedef signed __int32 orc_int32; +typedef signed __int64 orc_int64; +typedef unsigned __int8 orc_uint8; +typedef unsigned __int16 orc_uint16; +typedef unsigned __int32 orc_uint32; +typedef unsigned __int64 orc_uint64; +#define ORC_UINT64_C(x) (x##Ui64) +#define inline __inline +#else +#include <limits.h> +typedef signed char orc_int8; +typedef short orc_int16; +typedef int orc_int32; +typedef unsigned char orc_uint8; +typedef unsigned short orc_uint16; +typedef unsigned int orc_uint32; +#if INT_MAX == LONG_MAX +typedef long long orc_int64; +typedef unsigned long long orc_uint64; +#define ORC_UINT64_C(x) (x##ULL) +#else +typedef long orc_int64; +typedef unsigned long orc_uint64; +#define ORC_UINT64_C(x) (x##UL) +#endif +#endif +typedef union { orc_int16 i; orc_int8 x2[2]; } orc_union16; +typedef union { orc_int32 i; float f; orc_int16 x2[2]; orc_int8 x4[4]; } orc_union32; +typedef union { orc_int64 i; double f; orc_int32 x2[2]; float x2f[2]; orc_int16 x4[4]; } orc_union64; +#endif +#ifndef ORC_RESTRICT +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +#define ORC_RESTRICT restrict +#elif defined(__GNUC__) && __GNUC__ >= 4 +#define ORC_RESTRICT __restrict__ +#else +#define ORC_RESTRICT +#endif +#endif +void gst_bayer_horiz_upsample_unaligned (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, int n); +void gst_bayer_horiz_upsample (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, int n); +void gst_bayer_merge_bg_bgra (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); +void gst_bayer_merge_gr_bgra (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); +void gst_bayer_merge_bg_abgr (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); +void gst_bayer_merge_gr_abgr (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); +void gst_bayer_merge_bg_rgba (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); +void gst_bayer_merge_gr_rgba (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); +void gst_bayer_merge_bg_argb (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); +void gst_bayer_merge_gr_argb (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/gst/bayer/gstbayerorc.orc b/gst/bayer/gstbayerorc.orc new file mode 100644 index 000000000..e57436b7f --- /dev/null +++ b/gst/bayer/gstbayerorc.orc @@ -0,0 +1,252 @@ + + +.function gst_bayer_horiz_upsample_unaligned +.dest 2 d0 guint8 +.dest 2 d1 guint8 +.source 2 s guint8 +.temp 2 t +.temp 1 b +.temp 1 c +.temp 1 d +.temp 1 e + +splitwb c, b, s +loadoffw t, s, 1 +splitwb e, d, t +avgub e, c, e +mergebw d0, c, e +avgub b, b, d +mergebw d1, b, d + + +.function gst_bayer_horiz_upsample +.dest 2 d0 guint8 +.dest 2 d1 guint8 +.source 2 s guint8 +.temp 2 t +.temp 1 a +.temp 1 b +.temp 1 c +.temp 1 d +.temp 1 e +.temp 1 f + +loadoffw t, s, -1 +splitwb b, a, t +splitwb d, c, s +loadoffw t, s, 1 +splitwb f, e, t +avgub e, c, e +mergebw d0, c, e +avgub b, b, d +mergebw d1, b, d + + +.function gst_bayer_merge_bg_bgra +.dest 8 d guint8 +.source 2 g0 guint8 +.source 2 r0 guint8 +.source 2 b1 guint8 +.source 2 g1 guint8 +.source 2 g2 guint8 +.source 2 r2 guint8 +.temp 4 ra +.temp 4 bg +.temp 2 r +.temp 2 g +.temp 2 t + +x2 avgub r, r0, r2 +x2 avgub g, g0, g2 +copyw t, g1 +x2 avgub g, g, t +andw g, g, 255 +andw t, t, 65280 +orw g, t, g +x2 mergebw bg, b1, g +x2 mergebw ra, r, 255 +x2 mergewl d, bg, ra + + +.function gst_bayer_merge_gr_bgra +.dest 8 d guint8 +.source 2 b0 guint8 +.source 2 g0 guint8 +.source 2 g1 guint8 +.source 2 r1 guint8 +.source 2 b2 guint8 +.source 2 g2 guint8 +.temp 4 ra +.temp 4 bg +.temp 2 b +.temp 2 g +.temp 2 t + +x2 avgub b, b0, b2 +x2 avgub g, g0, g2 +copyw t, g1 +x2 avgub g, g, t +andw g, g, 65280 +andw t, t, 255 +orw g, t, g +x2 mergebw bg, b, g +x2 mergebw ra, r1, 255 +x2 mergewl d, bg, ra + + +.function gst_bayer_merge_bg_abgr +.dest 8 d guint8 +.source 2 g0 guint8 +.source 2 r0 guint8 +.source 2 b1 guint8 +.source 2 g1 guint8 +.source 2 g2 guint8 +.source 2 r2 guint8 +.temp 4 ab +.temp 4 gr +.temp 2 r +.temp 2 g +.temp 2 t + +x2 avgub r, r0, r2 +x2 avgub g, g0, g2 +copyw t, g1 +x2 avgub g, g, t +andw g, g, 255 +andw t, t, 65280 +orw g, t, g +x2 mergebw ab, 255, b1 +x2 mergebw gr, g, r +x2 mergewl d, ab, gr + + +.function gst_bayer_merge_gr_abgr +.dest 8 d guint8 +.source 2 b0 guint8 +.source 2 g0 guint8 +.source 2 g1 guint8 +.source 2 r1 guint8 +.source 2 b2 guint8 +.source 2 g2 guint8 +.temp 4 ab +.temp 4 gr +.temp 2 b +.temp 2 g +.temp 2 t + +x2 avgub b, b0, b2 +x2 avgub g, g0, g2 +copyw t, g1 +x2 avgub g, g, t +andw g, g, 65280 +andw t, t, 255 +orw g, t, g +x2 mergebw ab, 255, b +x2 mergebw gr, g, r1 +x2 mergewl d, ab, gr + + +.function gst_bayer_merge_bg_rgba +.dest 8 d guint8 +.source 2 g0 guint8 +.source 2 r0 guint8 +.source 2 b1 guint8 +.source 2 g1 guint8 +.source 2 g2 guint8 +.source 2 r2 guint8 +.temp 4 rg +.temp 4 ba +.temp 2 r +.temp 2 g +.temp 2 t + +x2 avgub r, r0, r2 +x2 avgub g, g0, g2 +copyw t, g1 +x2 avgub g, g, t +andw g, g, 255 +andw t, t, 65280 +orw g, t, g +x2 mergebw rg, r, g +x2 mergebw ba, b1, 255 +x2 mergewl d, rg, ba + + +.function gst_bayer_merge_gr_rgba +.dest 8 d guint8 +.source 2 b0 guint8 +.source 2 g0 guint8 +.source 2 g1 guint8 +.source 2 r1 guint8 +.source 2 b2 guint8 +.source 2 g2 guint8 +.temp 4 rg +.temp 4 ba +.temp 2 b +.temp 2 g +.temp 2 t + +x2 avgub b, b0, b2 +x2 avgub g, g0, g2 +copyw t, g1 +x2 avgub g, g, t +andw g, g, 65280 +andw t, t, 255 +orw g, t, g +x2 mergebw rg, r1, g +x2 mergebw ba, b, 255 +x2 mergewl d, rg, ba + + +.function gst_bayer_merge_bg_argb +.dest 8 d guint8 +.source 2 g0 guint8 +.source 2 r0 guint8 +.source 2 b1 guint8 +.source 2 g1 guint8 +.source 2 g2 guint8 +.source 2 r2 guint8 +.temp 4 ar +.temp 4 gb +.temp 2 r +.temp 2 g +.temp 2 t + +x2 avgub r, r0, r2 +x2 avgub g, g0, g2 +copyw t, g1 +x2 avgub g, g, t +andw g, g, 255 +andw t, t, 65280 +orw g, t, g +x2 mergebw ar, 255, r +x2 mergebw gb, g, b1 +x2 mergewl d, ar, gb + + +.function gst_bayer_merge_gr_argb +.dest 8 d guint8 +.source 2 b0 guint8 +.source 2 g0 guint8 +.source 2 g1 guint8 +.source 2 r1 guint8 +.source 2 b2 guint8 +.source 2 g2 guint8 +.temp 4 ar +.temp 4 gb +.temp 2 b +.temp 2 g +.temp 2 t + +x2 avgub b, b0, b2 +x2 avgub g, g0, g2 +copyw t, g1 +x2 avgub g, g, t +andw g, g, 65280 +andw t, t, 255 +orw g, t, g +x2 mergebw ar, 255, r1 +x2 mergebw gb, g, b +x2 mergewl d, ar, gb + + |