- 264 license table entries with exact download URLs (224/264 resolved) - Complete sources/ directory with all BitBake recipes - Build configuration: tqma6ul-multi-mba6ulx, spaetzle (musl) - Full traceability for Softwarefreigabeantrag - GCC 13.4.0, Linux 6.6.102, U-Boot 2023.04, musl 1.2.4 - License distribution: GPL-2.0 (24), MIT (23), GPL-2.0+ (18), BSD-3 (16)
4891 lines
152 KiB
Diff
4891 lines
152 KiB
Diff
From 2ea0dc3f2b5fb61ebb904fb5c8adc66f6f0d32f7 Mon Sep 17 00:00:00 2001
|
|
From: Marek Vasut <marex@denx.de>
|
|
Date: Sat, 20 May 2023 19:33:27 +0200
|
|
Subject: [PATCH 9/9] bayer2rgb: Support video/x-bayer 10/12/14/16 bit depths
|
|
|
|
Add support for 10/12/14/16 bit depths . This consists of multiple parts.
|
|
First is the parsing of caps, which pulls out the bitness and endianness
|
|
from the video/x-bayer format.
|
|
|
|
Second, gst_bayer2rgb_split_and_upsample_horiz() is split into two similar
|
|
functions, one for 8bit bayer handling and another for 16bit bayer handling.
|
|
The content is basically identical, except one uses 8bpp and the other 16bpp
|
|
inputs and outputs, and they each use different ORC code to match. The 16bpp
|
|
variant also handles endian swapping. There is now a wrapper called
|
|
gst_bayer2rgb_split_and_upsample_horiz() which selects the correct function
|
|
based on bpp from the parser.
|
|
|
|
Third, gst_bayer2rgb_process() is extended to handle both 8bit and 16bit
|
|
bayer data. Yet again there are matching ORC functions to handle the 16bit
|
|
data. This time however the 16bit handling of data is slightly special. The
|
|
ORC is not able to emit opcodes for 'x2 mergelq', so the trick here is to
|
|
store the BG and GR longs into separate 'dtmp' temporary buffer, and then
|
|
do one more ORC post-processing step, compensate for the less-than-16bpp
|
|
bitness using left shift, and reorder them into the destination frame
|
|
using 'mergelq' .
|
|
|
|
Example usage:
|
|
```
|
|
$ gst-launch-1.0 videotestsrc ! \
|
|
video/x-bayer,width=512,height=512,format=bggr16le ! \
|
|
bayer2rgb ! \
|
|
video/x-raw,format=RGBA64_LE ! \
|
|
videoconvert ! \
|
|
autovideosink
|
|
```
|
|
|
|
Example usage:
|
|
```
|
|
$ gst-launch-1.0 videotestsrc ! \
|
|
video/x-raw,width=512,height=512,format=ARGB ! \
|
|
rgb2bayer ! \
|
|
video/x-bayer,format=bggr12le ! \
|
|
bayer2rgb ! \
|
|
video/x-raw,format=RGBA64_LE ! \
|
|
videoconvert ! \
|
|
autovideosink
|
|
```
|
|
|
|
Upstream-Status: Backport [https://gitlab.freedesktop.org/gstreamer/gstreamer/-/commit/4c92d4096e976fbf351e28d0455e1c21ec905816]
|
|
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4686>
|
|
---
|
|
docs/plugins/gst_plugins_cache.json | 4 +-
|
|
gst/bayer/gstbayer2rgb.c | 219 +-
|
|
gst/bayer/gstbayerorc-dist.c | 3933 +++++++++++++++++++++++++++
|
|
gst/bayer/gstbayerorc-dist.h | 182 +-
|
|
gst/bayer/gstbayerorc.orc | 280 ++
|
|
5 files changed, 4547 insertions(+), 71 deletions(-)
|
|
|
|
diff --git a/docs/plugins/gst_plugins_cache.json b/docs/plugins/gst_plugins_cache.json
|
|
index 7b09ab6b9c..33e899ddca 100644
|
|
--- a/docs/plugins/gst_plugins_cache.json
|
|
+++ b/docs/plugins/gst_plugins_cache.json
|
|
@@ -3942,12 +3942,12 @@
|
|
"long-name": "Bayer to RGB decoder for cameras",
|
|
"pad-templates": {
|
|
"sink": {
|
|
- "caps": "video/x-bayer:\n format: { bggr, grbg, gbrg, rggb }\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n framerate: [ 0/1, 2147483647/1 ]\n",
|
|
+ "caps": "video/x-bayer:\n format: { bggr, rggb, grbg, gbrg, bggr10le, rggb10le, grbg10le, gbrg10le, bggr10be, rggb10be, grbg10be, gbrg10be, bggr12le, rggb12le, grbg12le, gbrg12le, bggr12be, rggb12be, grbg12be, gbrg12be, bggr14le, rggb14le, grbg14le, gbrg14le, bggr14be, rggb14be, grbg14be, gbrg14be, bggr16le, rggb16le, grbg16le, gbrg16le, bggr16be, rggb16be, grbg16be, gbrg16be }\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n framerate: [ 0/1, 2147483647/1 ]\n",
|
|
"direction": "sink",
|
|
"presence": "always"
|
|
},
|
|
"src": {
|
|
- "caps": "video/x-raw:\n format: { RGBx, xRGB, BGRx, xBGR, RGBA, ARGB, BGRA, ABGR }\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n framerate: [ 0/1, 2147483647/1 ]\n",
|
|
+ "caps": "video/x-raw:\n format: { RGBx, xRGB, BGRx, xBGR, RGBA, ARGB, BGRA, ABGR, RGBA64_LE, ARGB64_LE, BGRA64_LE, ABGR64_LE, RGBA64_BE, ARGB64_BE, BGRA64_BE, ABGR64_BE }\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n framerate: [ 0/1, 2147483647/1 ]\n",
|
|
"direction": "src",
|
|
"presence": "always"
|
|
}
|
|
diff --git a/gst/bayer/gstbayer2rgb.c b/gst/bayer/gstbayer2rgb.c
|
|
index 3dfae46ddd..ec86ea348a 100644
|
|
--- a/gst/bayer/gstbayer2rgb.c
|
|
+++ b/gst/bayer/gstbayer2rgb.c
|
|
@@ -89,6 +89,8 @@
|
|
#include "gstbayerelements.h"
|
|
#include "gstbayerorc.h"
|
|
|
|
+#define DIV_ROUND_UP(s,v) (((s) + ((v)-1)) / (v))
|
|
+
|
|
#define GST_CAT_DEFAULT gst_bayer2rgb_debug
|
|
GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
|
|
|
|
@@ -124,6 +126,8 @@ struct _GstBayer2RGB
|
|
int g_off; /* offset for green */
|
|
int b_off; /* offset for blue */
|
|
int format;
|
|
+ int bpp; /* bits per pixel, 8/10/12/14/16 */
|
|
+ int bigendian;
|
|
};
|
|
|
|
struct _GstBayer2RGBClass
|
|
@@ -131,10 +135,32 @@ struct _GstBayer2RGBClass
|
|
GstBaseTransformClass parent;
|
|
};
|
|
|
|
+#define BAYER_CAPS_GEN(mask, bits, endian) \
|
|
+ " "#mask#bits#endian
|
|
+
|
|
+#define BAYER_CAPS_ORD(bits, endian) \
|
|
+ BAYER_CAPS_GEN(bggr, bits, endian)"," \
|
|
+ BAYER_CAPS_GEN(rggb, bits, endian)"," \
|
|
+ BAYER_CAPS_GEN(grbg, bits, endian)"," \
|
|
+ BAYER_CAPS_GEN(gbrg, bits, endian)
|
|
+
|
|
+#define BAYER_CAPS_BITS(bits) \
|
|
+ BAYER_CAPS_ORD(bits, le)"," \
|
|
+ BAYER_CAPS_ORD(bits, be)
|
|
+
|
|
+#define BAYER_CAPS_ALL \
|
|
+ BAYER_CAPS_ORD(,)"," \
|
|
+ BAYER_CAPS_BITS(10)"," \
|
|
+ BAYER_CAPS_BITS(12)"," \
|
|
+ BAYER_CAPS_BITS(14)"," \
|
|
+ BAYER_CAPS_BITS(16)
|
|
+
|
|
#define SRC_CAPS \
|
|
- GST_VIDEO_CAPS_MAKE ("{ RGBx, xRGB, BGRx, xBGR, RGBA, ARGB, BGRA, ABGR }")
|
|
+ GST_VIDEO_CAPS_MAKE ("{ RGBx, xRGB, BGRx, xBGR, RGBA, ARGB, BGRA, ABGR, " \
|
|
+ "RGBA64_LE, ARGB64_LE, BGRA64_LE, ABGR64_LE, " \
|
|
+ "RGBA64_BE, ARGB64_BE, BGRA64_BE, ABGR64_BE }")
|
|
|
|
-#define SINK_CAPS "video/x-bayer,format=(string){bggr,grbg,gbrg,rggb}," \
|
|
+#define SINK_CAPS "video/x-bayer,format=(string){" BAYER_CAPS_ALL " }, "\
|
|
"width=(int)[1,MAX],height=(int)[1,MAX],framerate=(fraction)[0/1,MAX]"
|
|
|
|
enum
|
|
@@ -252,23 +278,47 @@ gst_bayer2rgb_set_caps (GstBaseTransform * base, GstCaps * incaps,
|
|
gst_structure_get_int (structure, "height", &bayer2rgb->height);
|
|
|
|
format = gst_structure_get_string (structure, "format");
|
|
- if (g_str_equal (format, "bggr")) {
|
|
+ if (g_str_has_prefix (format, "bggr")) {
|
|
bayer2rgb->format = GST_BAYER_2_RGB_FORMAT_BGGR;
|
|
- } else if (g_str_equal (format, "gbrg")) {
|
|
+ } else if (g_str_has_prefix (format, "gbrg")) {
|
|
bayer2rgb->format = GST_BAYER_2_RGB_FORMAT_GBRG;
|
|
- } else if (g_str_equal (format, "grbg")) {
|
|
+ } else if (g_str_has_prefix (format, "grbg")) {
|
|
bayer2rgb->format = GST_BAYER_2_RGB_FORMAT_GRBG;
|
|
- } else if (g_str_equal (format, "rggb")) {
|
|
+ } else if (g_str_has_prefix (format, "rggb")) {
|
|
bayer2rgb->format = GST_BAYER_2_RGB_FORMAT_RGGB;
|
|
} else {
|
|
return FALSE;
|
|
}
|
|
|
|
+ if (strlen (format) == 4) { /* 8bit bayer */
|
|
+ bayer2rgb->bpp = 8;
|
|
+ } else if (strlen (format) == 8) { /* 10/12/14/16 le/be bayer */
|
|
+ bayer2rgb->bpp = (gint) g_ascii_strtoull (format + 4, NULL, 10);
|
|
+ if (bayer2rgb->bpp & 1) /* odd bayer2rgb->bpp bayer formats not supported */
|
|
+ return FALSE;
|
|
+ if (bayer2rgb->bpp < 10 || bayer2rgb->bpp > 16) /* bayer 10,12,14,16 only */
|
|
+ return FALSE;
|
|
+
|
|
+ if (g_str_has_suffix (format, "le"))
|
|
+ bayer2rgb->bigendian = 0;
|
|
+ else if (g_str_has_suffix (format, "be"))
|
|
+ bayer2rgb->bigendian = 1;
|
|
+ else
|
|
+ return FALSE;
|
|
+ } else
|
|
+ return FALSE;
|
|
+
|
|
/* To cater for different RGB formats, we need to set params for later */
|
|
gst_video_info_from_caps (&info, outcaps);
|
|
- bayer2rgb->r_off = GST_VIDEO_INFO_COMP_OFFSET (&info, 0);
|
|
- bayer2rgb->g_off = GST_VIDEO_INFO_COMP_OFFSET (&info, 1);
|
|
- bayer2rgb->b_off = GST_VIDEO_INFO_COMP_OFFSET (&info, 2);
|
|
+ bayer2rgb->r_off =
|
|
+ GST_VIDEO_INFO_COMP_OFFSET (&info,
|
|
+ 0) / DIV_ROUND_UP (GST_VIDEO_INFO_COMP_DEPTH (&info, 0), 8);
|
|
+ bayer2rgb->g_off =
|
|
+ GST_VIDEO_INFO_COMP_OFFSET (&info,
|
|
+ 1) / DIV_ROUND_UP (GST_VIDEO_INFO_COMP_DEPTH (&info, 1), 8);
|
|
+ bayer2rgb->b_off =
|
|
+ GST_VIDEO_INFO_COMP_OFFSET (&info,
|
|
+ 2) / DIV_ROUND_UP (GST_VIDEO_INFO_COMP_DEPTH (&info, 2), 8);
|
|
|
|
bayer2rgb->info = info;
|
|
|
|
@@ -283,6 +333,8 @@ gst_bayer2rgb_reset (GstBayer2RGB * filter)
|
|
filter->r_off = 0;
|
|
filter->g_off = 0;
|
|
filter->b_off = 0;
|
|
+ filter->bpp = 8;
|
|
+ filter->bigendian = 0;
|
|
gst_video_info_init (&filter->info);
|
|
}
|
|
|
|
@@ -326,22 +378,25 @@ gst_bayer2rgb_get_unit_size (GstBaseTransform * base, GstCaps * caps,
|
|
gsize * size)
|
|
{
|
|
GstStructure *structure;
|
|
+ GstBayer2RGB *bayer2rgb;
|
|
int width;
|
|
int height;
|
|
const char *name;
|
|
|
|
structure = gst_caps_get_structure (caps, 0);
|
|
+ bayer2rgb = GST_BAYER2RGB (base);
|
|
|
|
if (gst_structure_get_int (structure, "width", &width) &&
|
|
gst_structure_get_int (structure, "height", &height)) {
|
|
name = gst_structure_get_name (structure);
|
|
/* Our name must be either video/x-bayer video/x-raw */
|
|
if (strcmp (name, "video/x-raw")) {
|
|
- *size = GST_ROUND_UP_4 (width) * height;
|
|
+ *size =
|
|
+ GST_ROUND_UP_4 (width) * height * DIV_ROUND_UP (bayer2rgb->bpp, 8);
|
|
return TRUE;
|
|
} else {
|
|
- /* For output, calculate according to format (always 32 bits) */
|
|
- *size = width * height * 4;
|
|
+ /* For output, calculate according to format */
|
|
+ *size = width * height * DIV_ROUND_UP (bayer2rgb->bpp, 8);
|
|
return TRUE;
|
|
}
|
|
|
|
@@ -352,7 +407,7 @@ gst_bayer2rgb_get_unit_size (GstBaseTransform * base, GstCaps * caps,
|
|
}
|
|
|
|
static void
|
|
-gst_bayer2rgb_split_and_upsample_horiz (guint8 * dest0, guint8 * dest1,
|
|
+gst_bayer2rgb8_split_and_upsample_horiz (guint8 * dest0, guint8 * dest1,
|
|
const guint8 * src, GstBayer2RGB * bayer2rgb)
|
|
{
|
|
int n = bayer2rgb->width;
|
|
@@ -433,20 +488,99 @@ gst_bayer2rgb_split_and_upsample_horiz (guint8 * dest0, guint8 * dest1,
|
|
}
|
|
}
|
|
|
|
+static guint16
|
|
+gswab16 (guint16 val, guint8 swap)
|
|
+{
|
|
+ if (swap) {
|
|
+ return GUINT16_FROM_BE (val);
|
|
+ } else {
|
|
+ return val;
|
|
+ }
|
|
+}
|
|
+
|
|
+static void
|
|
+gst_bayer2rgb16_split_and_upsample_horiz (guint16 * dest0, guint16 * dest1,
|
|
+ const guint16 * src, GstBayer2RGB * bayer2rgb)
|
|
+{
|
|
+ int swap = bayer2rgb->bigendian;
|
|
+ int n = bayer2rgb->width;
|
|
+ int i;
|
|
+
|
|
+ dest0[0] = gswab16 (src[0], swap);
|
|
+ dest1[0] = gswab16 (src[1], swap);
|
|
+ dest0[1] = (gswab16 (src[0], swap) + gswab16 (src[2], swap) + 1) >> 1;
|
|
+ dest1[1] = gswab16 (src[1], swap);
|
|
+
|
|
+ if (swap) {
|
|
+ bayer16_orc_horiz_upsample_be (dest0 + 2, dest1 + 2, src + 1, (n - 4) >> 1);
|
|
+ } else {
|
|
+ bayer16_orc_horiz_upsample_le (dest0 + 2, dest1 + 2, src + 1, (n - 4) >> 1);
|
|
+ }
|
|
+
|
|
+ for (i = n - 2; i < n; i++) {
|
|
+ if ((i & 1) == 0) {
|
|
+ dest0[i] = gswab16 (src[i], swap);
|
|
+ dest1[i] = gswab16 (src[i - 1], swap);
|
|
+ } else {
|
|
+ dest0[i] = gswab16 (src[i - 1], swap);
|
|
+ dest1[i] = gswab16 (src[i], swap);
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
+static void
|
|
+gst_bayer2rgb_split_and_upsample_horiz (guint8 * dest0, guint8 * dest1,
|
|
+ const guint8 * src, GstBayer2RGB * bayer2rgb)
|
|
+{
|
|
+ if (bayer2rgb->bpp == 8) {
|
|
+ gst_bayer2rgb8_split_and_upsample_horiz (dest0, dest1, src, bayer2rgb);
|
|
+ } else {
|
|
+ gst_bayer2rgb16_split_and_upsample_horiz ((guint16 *) dest0,
|
|
+ (guint16 *) dest1, (const guint16 *) src, bayer2rgb);
|
|
+ }
|
|
+}
|
|
+
|
|
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);
|
|
|
|
+typedef void (*process_func16) (guint16 * d0, guint16 * d1, const guint8 * s0,
|
|
+ const guint8 * s1, const guint8 * s2, const guint8 * s3, const guint8 * s4,
|
|
+ const guint8 * s5, int n);
|
|
+
|
|
+#define LINE(t, x, b) ((t) + (((x) & 7) * ((b)->width * DIV_ROUND_UP((b)->bpp, 8))))
|
|
+
|
|
static void
|
|
gst_bayer2rgb_process (GstBayer2RGB * bayer2rgb, uint8_t * dest,
|
|
int dest_stride, uint8_t * src)
|
|
{
|
|
- const int src_stride = GST_ROUND_UP_4 (bayer2rgb->width);
|
|
+ const int src_stride =
|
|
+ GST_ROUND_UP_4 (bayer2rgb->width) * DIV_ROUND_UP (bayer2rgb->bpp, 8);
|
|
+ const int bayersrc16 = bayer2rgb->bpp > 8;
|
|
int j;
|
|
guint8 *tmp;
|
|
+ guint32 *dtmp;
|
|
process_func merge[2] = { NULL, NULL };
|
|
+ process_func16 merge16[2] = { NULL, NULL };
|
|
int r_off, g_off, b_off;
|
|
|
|
+ /*
|
|
+ * Handle emission of either RGBA64 or RGBA (32bpp) . The default is
|
|
+ * emission of RGBA64 in case the input bayer data are >8 bit, since
|
|
+ * there is no loss of precision that way.
|
|
+ *
|
|
+ * The emission of RGBA (32bpp) as done here is done by shifting the
|
|
+ * debayered data by the bpp-8 bits right, to fit into the 8 bits per
|
|
+ * channel output buffer. This retains precision during calculation,
|
|
+ * and the calculation is a bit more expensive in terms of CPU cycles
|
|
+ * and memory. An alternative approach would be to downgrade the input
|
|
+ * bayer data in gst_bayer2rgb16_split_and_upsample_horiz() already,
|
|
+ * and then perform this second part of debayering as if those input
|
|
+ * data were 8bpp bayer data. This would increase speed, but decrease
|
|
+ * precision.
|
|
+ */
|
|
+ const int bayerdst16 = (dest_stride / bayer2rgb->width / 4) == 2;
|
|
+
|
|
/* 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
|
|
@@ -463,25 +597,38 @@ gst_bayer2rgb_process (GstBayer2RGB * bayer2rgb, uint8_t * dest,
|
|
if (r_off == 2 && g_off == 1 && b_off == 0) {
|
|
merge[0] = bayer_orc_merge_bg_bgra;
|
|
merge[1] = bayer_orc_merge_gr_bgra;
|
|
+ merge16[0] = bayer16_orc_merge_bg_bgra;
|
|
+ merge16[1] = bayer16_orc_merge_gr_bgra;
|
|
} else if (r_off == 3 && g_off == 2 && b_off == 1) {
|
|
merge[0] = bayer_orc_merge_bg_abgr;
|
|
merge[1] = bayer_orc_merge_gr_abgr;
|
|
+ merge16[0] = bayer16_orc_merge_bg_abgr;
|
|
+ merge16[1] = bayer16_orc_merge_gr_abgr;
|
|
} else if (r_off == 1 && g_off == 2 && b_off == 3) {
|
|
merge[0] = bayer_orc_merge_bg_argb;
|
|
merge[1] = bayer_orc_merge_gr_argb;
|
|
+ merge16[0] = bayer16_orc_merge_bg_argb;
|
|
+ merge16[1] = bayer16_orc_merge_gr_argb;
|
|
} else if (r_off == 0 && g_off == 1 && b_off == 2) {
|
|
merge[0] = bayer_orc_merge_bg_rgba;
|
|
merge[1] = bayer_orc_merge_gr_rgba;
|
|
+ merge16[0] = bayer16_orc_merge_bg_rgba;
|
|
+ merge16[1] = bayer16_orc_merge_gr_rgba;
|
|
}
|
|
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;
|
|
+ process_func16 tmp16 = merge16[0];
|
|
+ merge16[0] = merge16[1];
|
|
+ merge16[1] = tmp16;
|
|
}
|
|
|
|
- tmp = g_malloc (2 * 4 * bayer2rgb->width);
|
|
-#define LINE(t, x, b) ((t) + (((x) & 7) * ((b)->width)))
|
|
+ tmp = g_malloc (DIV_ROUND_UP (bayer2rgb->bpp, 8) * 2 * 4 * bayer2rgb->width);
|
|
+
|
|
+ if (bayersrc16 || bayerdst16)
|
|
+ dtmp = g_malloc (sizeof (*dtmp) * 2 * bayer2rgb->width);
|
|
|
|
/* Pre-process source line 1 into bottom two lines 6 and 7 as PREVIOUS line */
|
|
gst_bayer2rgb_split_and_upsample_horiz ( /* src line 1 */
|
|
@@ -571,16 +718,40 @@ gst_bayer2rgb_process (GstBayer2RGB * bayer2rgb, uint8_t * dest,
|
|
* inputs from lines 0,1,2,3,4,5 i.e. b0,g0,g1,r1,b2,g2 and the merge
|
|
* function would be bayer_orc_merge_gr_* .
|
|
*/
|
|
- merge[j & 1] (dest + j * dest_stride, /* output line j */
|
|
- LINE (tmp, j * 2 - 2, bayer2rgb), /* PREVIOUS: even: BG g0 , odd: GR b0 */
|
|
- LINE (tmp, j * 2 - 1, bayer2rgb), /* PREVIOUS: even: BG r0 , odd: GR g0 */
|
|
- LINE (tmp, j * 2 + 0, bayer2rgb), /* CURRENT: even: BG b1 , odd: GR g1 */
|
|
- LINE (tmp, j * 2 + 1, bayer2rgb), /* CURRENT: even: BG g1 , odd: GR r1 */
|
|
- LINE (tmp, j * 2 + 2, bayer2rgb), /* NEXT: even: BG g2 , odd: GR b2 */
|
|
- LINE (tmp, j * 2 + 3, bayer2rgb), /* NEXT: even: BG r2 , odd: GR g2 */
|
|
- bayer2rgb->width >> 1);
|
|
+ if (bayersrc16) {
|
|
+ merge16[j & 1] ((guint16 *) dtmp, /* temporary buffer BG */
|
|
+ (guint16 *) (dtmp + bayer2rgb->width), /* temporary buffer GR */
|
|
+ LINE (tmp, j * 2 - 2, bayer2rgb), /* PREVIOUS: even: BG g0 , odd: GR b0 */
|
|
+ LINE (tmp, j * 2 - 1, bayer2rgb), /* PREVIOUS: even: BG r0 , odd: GR g0 */
|
|
+ LINE (tmp, j * 2 + 0, bayer2rgb), /* CURRENT: even: BG b1 , odd: GR g1 */
|
|
+ LINE (tmp, j * 2 + 1, bayer2rgb), /* CURRENT: even: BG g1 , odd: GR r1 */
|
|
+ LINE (tmp, j * 2 + 2, bayer2rgb), /* NEXT: even: BG g2 , odd: GR b2 */
|
|
+ LINE (tmp, j * 2 + 3, bayer2rgb), /* NEXT: even: BG r2 , odd: GR g2 */
|
|
+ bayer2rgb->width >> 1);
|
|
+
|
|
+ if (bayerdst16)
|
|
+ bayer16to16_orc_reorder (dest + j * dest_stride,
|
|
+ dtmp, dtmp + bayer2rgb->width, bayer2rgb->bpp, bayer2rgb->width);
|
|
+ else
|
|
+ bayer16to8_orc_reorder (dest + j * dest_stride,
|
|
+ dtmp, dtmp + bayer2rgb->width, bayer2rgb->bpp - 8,
|
|
+ bayer2rgb->width);
|
|
+ } else {
|
|
+ merge[j & 1] (bayerdst16 ? (guint8 *) dtmp : (dest + j * dest_stride), /* output line j */
|
|
+ LINE (tmp, j * 2 - 2, bayer2rgb), /* PREVIOUS: even: BG g0 , odd: GR b0 */
|
|
+ LINE (tmp, j * 2 - 1, bayer2rgb), /* PREVIOUS: even: BG r0 , odd: GR g0 */
|
|
+ LINE (tmp, j * 2 + 0, bayer2rgb), /* CURRENT: even: BG b1 , odd: GR g1 */
|
|
+ LINE (tmp, j * 2 + 1, bayer2rgb), /* CURRENT: even: BG g1 , odd: GR r1 */
|
|
+ LINE (tmp, j * 2 + 2, bayer2rgb), /* NEXT: even: BG g2 , odd: GR b2 */
|
|
+ LINE (tmp, j * 2 + 3, bayer2rgb), /* NEXT: even: BG r2 , odd: GR g2 */
|
|
+ bayer2rgb->width >> 1);
|
|
+ if (bayerdst16)
|
|
+ bayer8to16_orc_reorder (dest + j * dest_stride, dtmp, bayer2rgb->width);
|
|
+ }
|
|
}
|
|
|
|
+ if (bayersrc16)
|
|
+ g_free (dtmp);
|
|
g_free (tmp);
|
|
}
|
|
|
|
diff --git a/gst/bayer/gstbayerorc-dist.c b/gst/bayer/gstbayerorc-dist.c
|
|
index 0e309cdbae..093cfeb2c7 100644
|
|
--- a/gst/bayer/gstbayerorc-dist.c
|
|
+++ b/gst/bayer/gstbayerorc-dist.c
|
|
@@ -131,6 +131,58 @@ void bayer_orc_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);
|
|
+void bayer16_orc_horiz_upsample_le (guint16 * ORC_RESTRICT d1,
|
|
+ guint16 * ORC_RESTRICT d2, const guint16 * ORC_RESTRICT s1, int n);
|
|
+void bayer16_orc_horiz_upsample_be (guint16 * ORC_RESTRICT d1,
|
|
+ guint16 * ORC_RESTRICT d2, const guint16 * ORC_RESTRICT s1, int n);
|
|
+void bayer16_orc_merge_bg_bgra (guint16 * ORC_RESTRICT d1,
|
|
+ guint16 * ORC_RESTRICT d2, 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 bayer16_orc_merge_gr_bgra (guint16 * ORC_RESTRICT d1,
|
|
+ guint16 * ORC_RESTRICT d2, 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 bayer16_orc_merge_bg_abgr (guint16 * ORC_RESTRICT d1,
|
|
+ guint16 * ORC_RESTRICT d2, 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 bayer16_orc_merge_gr_abgr (guint16 * ORC_RESTRICT d1,
|
|
+ guint16 * ORC_RESTRICT d2, 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 bayer16_orc_merge_bg_rgba (guint16 * ORC_RESTRICT d1,
|
|
+ guint16 * ORC_RESTRICT d2, 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 bayer16_orc_merge_gr_rgba (guint16 * ORC_RESTRICT d1,
|
|
+ guint16 * ORC_RESTRICT d2, 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 bayer16_orc_merge_bg_argb (guint16 * ORC_RESTRICT d1,
|
|
+ guint16 * ORC_RESTRICT d2, 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 bayer16_orc_merge_gr_argb (guint16 * ORC_RESTRICT d1,
|
|
+ guint16 * ORC_RESTRICT d2, 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 bayer16to16_orc_reorder (guint8 * ORC_RESTRICT d1,
|
|
+ const guint32 * ORC_RESTRICT s1, const guint32 * ORC_RESTRICT s2, int p1,
|
|
+ int n);
|
|
+void bayer16to8_orc_reorder (guint8 * ORC_RESTRICT d1,
|
|
+ const guint32 * ORC_RESTRICT s1, const guint32 * ORC_RESTRICT s2, int p1,
|
|
+ int n);
|
|
+void bayer8to16_orc_reorder (guint8 * ORC_RESTRICT d1,
|
|
+ const guint32 * ORC_RESTRICT s1, int n);
|
|
|
|
|
|
/* begin Orc C target preamble */
|
|
@@ -3609,3 +3661,3884 @@ bayer_orc_merge_gr_argb (guint8 * ORC_RESTRICT d1,
|
|
func (ex);
|
|
}
|
|
#endif
|
|
+
|
|
+
|
|
+/* bayer16_orc_horiz_upsample_le */
|
|
+#ifdef DISABLE_ORC
|
|
+void
|
|
+bayer16_orc_horiz_upsample_le (guint16 * ORC_RESTRICT d1,
|
|
+ guint16 * ORC_RESTRICT d2, const guint16 * ORC_RESTRICT s1, int n)
|
|
+{
|
|
+ int i;
|
|
+ orc_union32 *ORC_RESTRICT ptr0;
|
|
+ orc_union32 *ORC_RESTRICT ptr1;
|
|
+ const orc_union32 *ORC_RESTRICT ptr4;
|
|
+ orc_union32 var37;
|
|
+ orc_union32 var38;
|
|
+ orc_union32 var39;
|
|
+ orc_union16 var40;
|
|
+ orc_union16 var41;
|
|
+ orc_union32 var42;
|
|
+ orc_union16 var43;
|
|
+ orc_union16 var44;
|
|
+ orc_union16 var45;
|
|
+ orc_union16 var46;
|
|
+
|
|
+ ptr0 = (orc_union32 *) d1;
|
|
+ ptr1 = (orc_union32 *) d2;
|
|
+ ptr4 = (orc_union32 *) s1;
|
|
+
|
|
+
|
|
+ for (i = 0; i < n; i++) {
|
|
+ /* 0: loadl */
|
|
+ var37 = ptr4[i];
|
|
+ /* 1: splitlw */
|
|
+ {
|
|
+ orc_union32 _src;
|
|
+ _src.i = var37.i;
|
|
+ var40.i = _src.x2[1];
|
|
+ var41.i = _src.x2[0];
|
|
+ }
|
|
+ /* 2: loadoffl */
|
|
+ var42 = ptr4[i + 1];
|
|
+ /* 3: splitlw */
|
|
+ {
|
|
+ orc_union32 _src;
|
|
+ _src.i = var42.i;
|
|
+ var43.i = _src.x2[1];
|
|
+ var44.i = _src.x2[0];
|
|
+ }
|
|
+ /* 4: avguw */
|
|
+ var45.i = ((orc_uint16) var40.i + (orc_uint16) var43.i + 1) >> 1;
|
|
+ /* 5: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var40.i;
|
|
+ _dest.x2[1] = var45.i;
|
|
+ var38.i = _dest.i;
|
|
+ }
|
|
+ /* 6: storel */
|
|
+ ptr0[i] = var38;
|
|
+ /* 7: avguw */
|
|
+ var46.i = ((orc_uint16) var41.i + (orc_uint16) var44.i + 1) >> 1;
|
|
+ /* 8: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var46.i;
|
|
+ _dest.x2[1] = var44.i;
|
|
+ var39.i = _dest.i;
|
|
+ }
|
|
+ /* 9: storel */
|
|
+ ptr1[i] = var39;
|
|
+ }
|
|
+
|
|
+}
|
|
+
|
|
+#else
|
|
+static void
|
|
+_backup_bayer16_orc_horiz_upsample_le (OrcExecutor * ORC_RESTRICT ex)
|
|
+{
|
|
+ int i;
|
|
+ int n = ex->n;
|
|
+ orc_union32 *ORC_RESTRICT ptr0;
|
|
+ orc_union32 *ORC_RESTRICT ptr1;
|
|
+ const orc_union32 *ORC_RESTRICT ptr4;
|
|
+ orc_union32 var37;
|
|
+ orc_union32 var38;
|
|
+ orc_union32 var39;
|
|
+ orc_union16 var40;
|
|
+ orc_union16 var41;
|
|
+ orc_union32 var42;
|
|
+ orc_union16 var43;
|
|
+ orc_union16 var44;
|
|
+ orc_union16 var45;
|
|
+ orc_union16 var46;
|
|
+
|
|
+ ptr0 = (orc_union32 *) ex->arrays[0];
|
|
+ ptr1 = (orc_union32 *) ex->arrays[1];
|
|
+ ptr4 = (orc_union32 *) ex->arrays[4];
|
|
+
|
|
+
|
|
+ for (i = 0; i < n; i++) {
|
|
+ /* 0: loadl */
|
|
+ var37 = ptr4[i];
|
|
+ /* 1: splitlw */
|
|
+ {
|
|
+ orc_union32 _src;
|
|
+ _src.i = var37.i;
|
|
+ var40.i = _src.x2[1];
|
|
+ var41.i = _src.x2[0];
|
|
+ }
|
|
+ /* 2: loadoffl */
|
|
+ var42 = ptr4[i + 1];
|
|
+ /* 3: splitlw */
|
|
+ {
|
|
+ orc_union32 _src;
|
|
+ _src.i = var42.i;
|
|
+ var43.i = _src.x2[1];
|
|
+ var44.i = _src.x2[0];
|
|
+ }
|
|
+ /* 4: avguw */
|
|
+ var45.i = ((orc_uint16) var40.i + (orc_uint16) var43.i + 1) >> 1;
|
|
+ /* 5: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var40.i;
|
|
+ _dest.x2[1] = var45.i;
|
|
+ var38.i = _dest.i;
|
|
+ }
|
|
+ /* 6: storel */
|
|
+ ptr0[i] = var38;
|
|
+ /* 7: avguw */
|
|
+ var46.i = ((orc_uint16) var41.i + (orc_uint16) var44.i + 1) >> 1;
|
|
+ /* 8: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var46.i;
|
|
+ _dest.x2[1] = var44.i;
|
|
+ var39.i = _dest.i;
|
|
+ }
|
|
+ /* 9: storel */
|
|
+ ptr1[i] = var39;
|
|
+ }
|
|
+
|
|
+}
|
|
+
|
|
+void
|
|
+bayer16_orc_horiz_upsample_le (guint16 * ORC_RESTRICT d1,
|
|
+ guint16 * ORC_RESTRICT d2, const guint16 * ORC_RESTRICT s1, int n)
|
|
+{
|
|
+ OrcExecutor _ex, *ex = &_ex;
|
|
+ static volatile int p_inited = 0;
|
|
+ static OrcCode *c = 0;
|
|
+ void (*func) (OrcExecutor *);
|
|
+
|
|
+ if (!p_inited) {
|
|
+ orc_once_mutex_lock ();
|
|
+ if (!p_inited) {
|
|
+ OrcProgram *p;
|
|
+
|
|
+#if 1
|
|
+ static const orc_uint8 bc[] = {
|
|
+ 1, 9, 29, 98, 97, 121, 101, 114, 49, 54, 95, 111, 114, 99, 95, 104,
|
|
+ 111, 114, 105, 122, 95, 117, 112, 115, 97, 109, 112, 108, 101, 95, 108,
|
|
+ 101,
|
|
+ 11, 4, 4, 11, 4, 4, 12, 4, 4, 14, 4, 1, 0, 0, 0, 20,
|
|
+ 4, 20, 2, 20, 2, 20, 2, 20, 2, 198, 34, 33, 4, 114, 32, 4,
|
|
+ 16, 198, 36, 35, 32, 76, 36, 34, 36, 195, 0, 34, 36, 76, 33, 33,
|
|
+ 35, 195, 1, 33, 35, 2, 0,
|
|
+ };
|
|
+ p = orc_program_new_from_static_bytecode (bc);
|
|
+ orc_program_set_backup_function (p,
|
|
+ _backup_bayer16_orc_horiz_upsample_le);
|
|
+#else
|
|
+ p = orc_program_new ();
|
|
+ orc_program_set_name (p, "bayer16_orc_horiz_upsample_le");
|
|
+ orc_program_set_backup_function (p,
|
|
+ _backup_bayer16_orc_horiz_upsample_le);
|
|
+ orc_program_add_destination (p, 4, "d1");
|
|
+ orc_program_add_destination (p, 4, "d2");
|
|
+ orc_program_add_source (p, 4, "s1");
|
|
+ orc_program_add_constant (p, 4, 0x00000001, "c1");
|
|
+ orc_program_add_temporary (p, 4, "t1");
|
|
+ orc_program_add_temporary (p, 2, "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, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_S1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "loadoffl", 0, ORC_VAR_T1, ORC_VAR_S1,
|
|
+ ORC_VAR_C1, ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_T1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "avguw", 0, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_T5,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T5,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "avguw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T4,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_T4,
|
|
+ ORC_VAR_D1);
|
|
+#endif
|
|
+
|
|
+ orc_program_compile (p);
|
|
+ c = orc_program_take_code (p);
|
|
+ orc_program_free (p);
|
|
+ }
|
|
+ p_inited = TRUE;
|
|
+ orc_once_mutex_unlock ();
|
|
+ }
|
|
+ ex->arrays[ORC_VAR_A2] = c;
|
|
+ ex->program = 0;
|
|
+
|
|
+ ex->n = n;
|
|
+ ex->arrays[ORC_VAR_D1] = d1;
|
|
+ ex->arrays[ORC_VAR_D2] = d2;
|
|
+ ex->arrays[ORC_VAR_S1] = (void *) s1;
|
|
+
|
|
+ func = c->exec;
|
|
+ func (ex);
|
|
+}
|
|
+#endif
|
|
+
|
|
+
|
|
+/* bayer16_orc_horiz_upsample_be */
|
|
+#ifdef DISABLE_ORC
|
|
+void
|
|
+bayer16_orc_horiz_upsample_be (guint16 * ORC_RESTRICT d1,
|
|
+ guint16 * ORC_RESTRICT d2, const guint16 * ORC_RESTRICT s1, int n)
|
|
+{
|
|
+ int i;
|
|
+ orc_union32 *ORC_RESTRICT ptr0;
|
|
+ orc_union32 *ORC_RESTRICT ptr1;
|
|
+ const orc_union32 *ORC_RESTRICT ptr4;
|
|
+ orc_union32 var37;
|
|
+ orc_union32 var38;
|
|
+ orc_union32 var39;
|
|
+ orc_union16 var40;
|
|
+ orc_union16 var41;
|
|
+ orc_union16 var42;
|
|
+ orc_union16 var43;
|
|
+ orc_union32 var44;
|
|
+ orc_union16 var45;
|
|
+ orc_union16 var46;
|
|
+ orc_union16 var47;
|
|
+ orc_union16 var48;
|
|
+ orc_union16 var49;
|
|
+ orc_union16 var50;
|
|
+
|
|
+ ptr0 = (orc_union32 *) d1;
|
|
+ ptr1 = (orc_union32 *) d2;
|
|
+ ptr4 = (orc_union32 *) s1;
|
|
+
|
|
+
|
|
+ for (i = 0; i < n; i++) {
|
|
+ /* 0: loadl */
|
|
+ var37 = ptr4[i];
|
|
+ /* 1: splitlw */
|
|
+ {
|
|
+ orc_union32 _src;
|
|
+ _src.i = var37.i;
|
|
+ var40.i = _src.x2[1];
|
|
+ var41.i = _src.x2[0];
|
|
+ }
|
|
+ /* 2: swapw */
|
|
+ var42.i = ORC_SWAP_W (var41.i);
|
|
+ /* 3: swapw */
|
|
+ var43.i = ORC_SWAP_W (var40.i);
|
|
+ /* 4: loadoffl */
|
|
+ var44 = ptr4[i + 1];
|
|
+ /* 5: splitlw */
|
|
+ {
|
|
+ orc_union32 _src;
|
|
+ _src.i = var44.i;
|
|
+ var45.i = _src.x2[1];
|
|
+ var46.i = _src.x2[0];
|
|
+ }
|
|
+ /* 6: swapw */
|
|
+ var47.i = ORC_SWAP_W (var46.i);
|
|
+ /* 7: swapw */
|
|
+ var48.i = ORC_SWAP_W (var45.i);
|
|
+ /* 8: avguw */
|
|
+ var49.i = ((orc_uint16) var43.i + (orc_uint16) var48.i + 1) >> 1;
|
|
+ /* 9: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var43.i;
|
|
+ _dest.x2[1] = var49.i;
|
|
+ var38.i = _dest.i;
|
|
+ }
|
|
+ /* 10: storel */
|
|
+ ptr0[i] = var38;
|
|
+ /* 11: avguw */
|
|
+ var50.i = ((orc_uint16) var42.i + (orc_uint16) var47.i + 1) >> 1;
|
|
+ /* 12: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var50.i;
|
|
+ _dest.x2[1] = var47.i;
|
|
+ var39.i = _dest.i;
|
|
+ }
|
|
+ /* 13: storel */
|
|
+ ptr1[i] = var39;
|
|
+ }
|
|
+
|
|
+}
|
|
+
|
|
+#else
|
|
+static void
|
|
+_backup_bayer16_orc_horiz_upsample_be (OrcExecutor * ORC_RESTRICT ex)
|
|
+{
|
|
+ int i;
|
|
+ int n = ex->n;
|
|
+ orc_union32 *ORC_RESTRICT ptr0;
|
|
+ orc_union32 *ORC_RESTRICT ptr1;
|
|
+ const orc_union32 *ORC_RESTRICT ptr4;
|
|
+ orc_union32 var37;
|
|
+ orc_union32 var38;
|
|
+ orc_union32 var39;
|
|
+ orc_union16 var40;
|
|
+ orc_union16 var41;
|
|
+ orc_union16 var42;
|
|
+ orc_union16 var43;
|
|
+ orc_union32 var44;
|
|
+ orc_union16 var45;
|
|
+ orc_union16 var46;
|
|
+ orc_union16 var47;
|
|
+ orc_union16 var48;
|
|
+ orc_union16 var49;
|
|
+ orc_union16 var50;
|
|
+
|
|
+ ptr0 = (orc_union32 *) ex->arrays[0];
|
|
+ ptr1 = (orc_union32 *) ex->arrays[1];
|
|
+ ptr4 = (orc_union32 *) ex->arrays[4];
|
|
+
|
|
+
|
|
+ for (i = 0; i < n; i++) {
|
|
+ /* 0: loadl */
|
|
+ var37 = ptr4[i];
|
|
+ /* 1: splitlw */
|
|
+ {
|
|
+ orc_union32 _src;
|
|
+ _src.i = var37.i;
|
|
+ var40.i = _src.x2[1];
|
|
+ var41.i = _src.x2[0];
|
|
+ }
|
|
+ /* 2: swapw */
|
|
+ var42.i = ORC_SWAP_W (var41.i);
|
|
+ /* 3: swapw */
|
|
+ var43.i = ORC_SWAP_W (var40.i);
|
|
+ /* 4: loadoffl */
|
|
+ var44 = ptr4[i + 1];
|
|
+ /* 5: splitlw */
|
|
+ {
|
|
+ orc_union32 _src;
|
|
+ _src.i = var44.i;
|
|
+ var45.i = _src.x2[1];
|
|
+ var46.i = _src.x2[0];
|
|
+ }
|
|
+ /* 6: swapw */
|
|
+ var47.i = ORC_SWAP_W (var46.i);
|
|
+ /* 7: swapw */
|
|
+ var48.i = ORC_SWAP_W (var45.i);
|
|
+ /* 8: avguw */
|
|
+ var49.i = ((orc_uint16) var43.i + (orc_uint16) var48.i + 1) >> 1;
|
|
+ /* 9: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var43.i;
|
|
+ _dest.x2[1] = var49.i;
|
|
+ var38.i = _dest.i;
|
|
+ }
|
|
+ /* 10: storel */
|
|
+ ptr0[i] = var38;
|
|
+ /* 11: avguw */
|
|
+ var50.i = ((orc_uint16) var42.i + (orc_uint16) var47.i + 1) >> 1;
|
|
+ /* 12: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var50.i;
|
|
+ _dest.x2[1] = var47.i;
|
|
+ var39.i = _dest.i;
|
|
+ }
|
|
+ /* 13: storel */
|
|
+ ptr1[i] = var39;
|
|
+ }
|
|
+
|
|
+}
|
|
+
|
|
+void
|
|
+bayer16_orc_horiz_upsample_be (guint16 * ORC_RESTRICT d1,
|
|
+ guint16 * ORC_RESTRICT d2, const guint16 * ORC_RESTRICT s1, int n)
|
|
+{
|
|
+ OrcExecutor _ex, *ex = &_ex;
|
|
+ static volatile int p_inited = 0;
|
|
+ static OrcCode *c = 0;
|
|
+ void (*func) (OrcExecutor *);
|
|
+
|
|
+ if (!p_inited) {
|
|
+ orc_once_mutex_lock ();
|
|
+ if (!p_inited) {
|
|
+ OrcProgram *p;
|
|
+
|
|
+#if 1
|
|
+ static const orc_uint8 bc[] = {
|
|
+ 1, 9, 29, 98, 97, 121, 101, 114, 49, 54, 95, 111, 114, 99, 95, 104,
|
|
+ 111, 114, 105, 122, 95, 117, 112, 115, 97, 109, 112, 108, 101, 95, 98,
|
|
+ 101,
|
|
+ 11, 4, 4, 11, 4, 4, 12, 4, 4, 14, 4, 1, 0, 0, 0, 20,
|
|
+ 4, 20, 2, 20, 2, 20, 2, 20, 2, 198, 34, 33, 4, 183, 33, 33,
|
|
+ 183, 34, 34, 114, 32, 4, 16, 198, 36, 35, 32, 183, 35, 35, 183, 36,
|
|
+ 36, 76, 36, 34, 36, 195, 0, 34, 36, 76, 33, 33, 35, 195, 1, 33,
|
|
+ 35, 2, 0,
|
|
+ };
|
|
+ p = orc_program_new_from_static_bytecode (bc);
|
|
+ orc_program_set_backup_function (p,
|
|
+ _backup_bayer16_orc_horiz_upsample_be);
|
|
+#else
|
|
+ p = orc_program_new ();
|
|
+ orc_program_set_name (p, "bayer16_orc_horiz_upsample_be");
|
|
+ orc_program_set_backup_function (p,
|
|
+ _backup_bayer16_orc_horiz_upsample_be);
|
|
+ orc_program_add_destination (p, 4, "d1");
|
|
+ orc_program_add_destination (p, 4, "d2");
|
|
+ orc_program_add_source (p, 4, "s1");
|
|
+ orc_program_add_constant (p, 4, 0x00000001, "c1");
|
|
+ orc_program_add_temporary (p, 4, "t1");
|
|
+ orc_program_add_temporary (p, 2, "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, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_S1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "swapw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_D1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "swapw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_D1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "loadoffl", 0, ORC_VAR_T1, ORC_VAR_S1,
|
|
+ ORC_VAR_C1, ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_T1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "swapw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_D1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "swapw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_D1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "avguw", 0, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_T5,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T5,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "avguw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T4,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_T4,
|
|
+ ORC_VAR_D1);
|
|
+#endif
|
|
+
|
|
+ orc_program_compile (p);
|
|
+ c = orc_program_take_code (p);
|
|
+ orc_program_free (p);
|
|
+ }
|
|
+ p_inited = TRUE;
|
|
+ orc_once_mutex_unlock ();
|
|
+ }
|
|
+ ex->arrays[ORC_VAR_A2] = c;
|
|
+ ex->program = 0;
|
|
+
|
|
+ ex->n = n;
|
|
+ ex->arrays[ORC_VAR_D1] = d1;
|
|
+ ex->arrays[ORC_VAR_D2] = d2;
|
|
+ ex->arrays[ORC_VAR_S1] = (void *) s1;
|
|
+
|
|
+ func = c->exec;
|
|
+ func (ex);
|
|
+}
|
|
+#endif
|
|
+
|
|
+
|
|
+/* bayer16_orc_merge_bg_bgra */
|
|
+#ifdef DISABLE_ORC
|
|
+void
|
|
+bayer16_orc_merge_bg_bgra (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2,
|
|
+ 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;
|
|
+ orc_union64 *ORC_RESTRICT ptr1;
|
|
+ const orc_union32 *ORC_RESTRICT ptr4;
|
|
+ const orc_union32 *ORC_RESTRICT ptr5;
|
|
+ const orc_union32 *ORC_RESTRICT ptr6;
|
|
+ const orc_union32 *ORC_RESTRICT ptr7;
|
|
+ const orc_union32 *ORC_RESTRICT ptr8;
|
|
+ const orc_union32 *ORC_RESTRICT ptr9;
|
|
+ orc_union32 var35;
|
|
+ orc_union32 var36;
|
|
+ orc_union32 var37;
|
|
+ orc_union32 var38;
|
|
+ orc_union32 var39;
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var40;
|
|
+#else
|
|
+ orc_union32 var40;
|
|
+#endif
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var41;
|
|
+#else
|
|
+ orc_union32 var41;
|
|
+#endif
|
|
+ orc_union32 var42;
|
|
+ orc_union64 var43;
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var44;
|
|
+#else
|
|
+ orc_union32 var44;
|
|
+#endif
|
|
+ orc_union64 var45;
|
|
+ orc_union32 var46;
|
|
+ orc_union32 var47;
|
|
+ orc_union32 var48;
|
|
+ orc_union32 var49;
|
|
+ orc_union32 var50;
|
|
+ orc_union32 var51;
|
|
+ orc_union32 var52;
|
|
+
|
|
+ ptr0 = (orc_union64 *) d1;
|
|
+ ptr1 = (orc_union64 *) d2;
|
|
+ ptr4 = (orc_union32 *) s1;
|
|
+ ptr5 = (orc_union32 *) s2;
|
|
+ ptr6 = (orc_union32 *) s3;
|
|
+ ptr7 = (orc_union32 *) s4;
|
|
+ ptr8 = (orc_union32 *) s5;
|
|
+ ptr9 = (orc_union32 *) s6;
|
|
+
|
|
+ /* 9: loadpl */
|
|
+ var40.i = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ /* 11: loadpl */
|
|
+ var41.i = 0xffff0000; /* -65536 or 2.12196e-314f */
|
|
+ /* 17: loadpw */
|
|
+ var44.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ var44.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+
|
|
+ for (i = 0; i < n; i++) {
|
|
+ /* 0: loadl */
|
|
+ var35 = ptr5[i];
|
|
+ /* 1: loadl */
|
|
+ var36 = ptr9[i];
|
|
+ /* 2: avguw */
|
|
+ var46.x2[0] =
|
|
+ ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1;
|
|
+ var46.x2[1] =
|
|
+ ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1;
|
|
+ /* 3: loadl */
|
|
+ var37 = ptr4[i];
|
|
+ /* 4: loadl */
|
|
+ var38 = ptr8[i];
|
|
+ /* 5: avguw */
|
|
+ var47.x2[0] =
|
|
+ ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1;
|
|
+ var47.x2[1] =
|
|
+ ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1;
|
|
+ /* 6: loadl */
|
|
+ var39 = ptr7[i];
|
|
+ /* 7: copyl */
|
|
+ var48.i = var39.i;
|
|
+ /* 8: avguw */
|
|
+ var49.x2[0] =
|
|
+ ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1;
|
|
+ var49.x2[1] =
|
|
+ ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1;
|
|
+ /* 10: andl */
|
|
+ var50.i = var49.i & var40.i;
|
|
+ /* 12: andl */
|
|
+ var51.i = var48.i & var41.i;
|
|
+ /* 13: orl */
|
|
+ var52.i = var51.i | var50.i;
|
|
+ /* 14: loadl */
|
|
+ var42 = ptr6[i];
|
|
+ /* 15: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var42.x2[0];
|
|
+ _dest.x2[1] = var52.x2[0];
|
|
+ var43.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var42.x2[1];
|
|
+ _dest.x2[1] = var52.x2[1];
|
|
+ var43.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 16: storeq */
|
|
+ ptr0[i] = var43;
|
|
+ /* 18: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var46.x2[0];
|
|
+ _dest.x2[1] = var44.x2[0];
|
|
+ var45.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var46.x2[1];
|
|
+ _dest.x2[1] = var44.x2[1];
|
|
+ var45.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 19: storeq */
|
|
+ ptr1[i] = var45;
|
|
+ }
|
|
+
|
|
+}
|
|
+
|
|
+#else
|
|
+static void
|
|
+_backup_bayer16_orc_merge_bg_bgra (OrcExecutor * ORC_RESTRICT ex)
|
|
+{
|
|
+ int i;
|
|
+ int n = ex->n;
|
|
+ orc_union64 *ORC_RESTRICT ptr0;
|
|
+ orc_union64 *ORC_RESTRICT ptr1;
|
|
+ const orc_union32 *ORC_RESTRICT ptr4;
|
|
+ const orc_union32 *ORC_RESTRICT ptr5;
|
|
+ const orc_union32 *ORC_RESTRICT ptr6;
|
|
+ const orc_union32 *ORC_RESTRICT ptr7;
|
|
+ const orc_union32 *ORC_RESTRICT ptr8;
|
|
+ const orc_union32 *ORC_RESTRICT ptr9;
|
|
+ orc_union32 var35;
|
|
+ orc_union32 var36;
|
|
+ orc_union32 var37;
|
|
+ orc_union32 var38;
|
|
+ orc_union32 var39;
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var40;
|
|
+#else
|
|
+ orc_union32 var40;
|
|
+#endif
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var41;
|
|
+#else
|
|
+ orc_union32 var41;
|
|
+#endif
|
|
+ orc_union32 var42;
|
|
+ orc_union64 var43;
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var44;
|
|
+#else
|
|
+ orc_union32 var44;
|
|
+#endif
|
|
+ orc_union64 var45;
|
|
+ orc_union32 var46;
|
|
+ orc_union32 var47;
|
|
+ orc_union32 var48;
|
|
+ orc_union32 var49;
|
|
+ orc_union32 var50;
|
|
+ orc_union32 var51;
|
|
+ orc_union32 var52;
|
|
+
|
|
+ ptr0 = (orc_union64 *) ex->arrays[0];
|
|
+ ptr1 = (orc_union64 *) ex->arrays[1];
|
|
+ ptr4 = (orc_union32 *) ex->arrays[4];
|
|
+ ptr5 = (orc_union32 *) ex->arrays[5];
|
|
+ ptr6 = (orc_union32 *) ex->arrays[6];
|
|
+ ptr7 = (orc_union32 *) ex->arrays[7];
|
|
+ ptr8 = (orc_union32 *) ex->arrays[8];
|
|
+ ptr9 = (orc_union32 *) ex->arrays[9];
|
|
+
|
|
+ /* 9: loadpl */
|
|
+ var40.i = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ /* 11: loadpl */
|
|
+ var41.i = 0xffff0000; /* -65536 or 2.12196e-314f */
|
|
+ /* 17: loadpw */
|
|
+ var44.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ var44.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+
|
|
+ for (i = 0; i < n; i++) {
|
|
+ /* 0: loadl */
|
|
+ var35 = ptr5[i];
|
|
+ /* 1: loadl */
|
|
+ var36 = ptr9[i];
|
|
+ /* 2: avguw */
|
|
+ var46.x2[0] =
|
|
+ ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1;
|
|
+ var46.x2[1] =
|
|
+ ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1;
|
|
+ /* 3: loadl */
|
|
+ var37 = ptr4[i];
|
|
+ /* 4: loadl */
|
|
+ var38 = ptr8[i];
|
|
+ /* 5: avguw */
|
|
+ var47.x2[0] =
|
|
+ ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1;
|
|
+ var47.x2[1] =
|
|
+ ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1;
|
|
+ /* 6: loadl */
|
|
+ var39 = ptr7[i];
|
|
+ /* 7: copyl */
|
|
+ var48.i = var39.i;
|
|
+ /* 8: avguw */
|
|
+ var49.x2[0] =
|
|
+ ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1;
|
|
+ var49.x2[1] =
|
|
+ ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1;
|
|
+ /* 10: andl */
|
|
+ var50.i = var49.i & var40.i;
|
|
+ /* 12: andl */
|
|
+ var51.i = var48.i & var41.i;
|
|
+ /* 13: orl */
|
|
+ var52.i = var51.i | var50.i;
|
|
+ /* 14: loadl */
|
|
+ var42 = ptr6[i];
|
|
+ /* 15: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var42.x2[0];
|
|
+ _dest.x2[1] = var52.x2[0];
|
|
+ var43.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var42.x2[1];
|
|
+ _dest.x2[1] = var52.x2[1];
|
|
+ var43.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 16: storeq */
|
|
+ ptr0[i] = var43;
|
|
+ /* 18: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var46.x2[0];
|
|
+ _dest.x2[1] = var44.x2[0];
|
|
+ var45.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var46.x2[1];
|
|
+ _dest.x2[1] = var44.x2[1];
|
|
+ var45.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 19: storeq */
|
|
+ ptr1[i] = var45;
|
|
+ }
|
|
+
|
|
+}
|
|
+
|
|
+void
|
|
+bayer16_orc_merge_bg_bgra (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2,
|
|
+ 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 volatile int p_inited = 0;
|
|
+ static OrcCode *c = 0;
|
|
+ void (*func) (OrcExecutor *);
|
|
+
|
|
+ if (!p_inited) {
|
|
+ orc_once_mutex_lock ();
|
|
+ if (!p_inited) {
|
|
+ OrcProgram *p;
|
|
+
|
|
+#if 1
|
|
+ static const orc_uint8 bc[] = {
|
|
+ 1, 9, 25, 98, 97, 121, 101, 114, 49, 54, 95, 111, 114, 99, 95, 109,
|
|
+ 101, 114, 103, 101, 95, 98, 103, 95, 98, 103, 114, 97, 11, 8, 8, 11,
|
|
+ 8, 8, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4,
|
|
+ 4, 12, 4, 4, 14, 4, 255, 255, 0, 0, 14, 4, 0, 0, 255, 255,
|
|
+ 14, 2, 255, 255, 0, 0, 20, 4, 20, 4, 20, 4, 21, 1, 76, 32,
|
|
+ 5, 9, 21, 1, 76, 33, 4, 8, 112, 34, 7, 21, 1, 76, 33, 33,
|
|
+ 34, 106, 33, 33, 16, 106, 34, 34, 17, 123, 33, 34, 33, 21, 1, 195,
|
|
+ 0, 6, 33, 21, 1, 195, 1, 32, 18, 2, 0,
|
|
+ };
|
|
+ p = orc_program_new_from_static_bytecode (bc);
|
|
+ orc_program_set_backup_function (p, _backup_bayer16_orc_merge_bg_bgra);
|
|
+#else
|
|
+ p = orc_program_new ();
|
|
+ orc_program_set_name (p, "bayer16_orc_merge_bg_bgra");
|
|
+ orc_program_set_backup_function (p, _backup_bayer16_orc_merge_bg_bgra);
|
|
+ orc_program_add_destination (p, 8, "d1");
|
|
+ orc_program_add_destination (p, 8, "d2");
|
|
+ orc_program_add_source (p, 4, "s1");
|
|
+ orc_program_add_source (p, 4, "s2");
|
|
+ orc_program_add_source (p, 4, "s3");
|
|
+ orc_program_add_source (p, 4, "s4");
|
|
+ orc_program_add_source (p, 4, "s5");
|
|
+ orc_program_add_source (p, 4, "s6");
|
|
+ orc_program_add_constant (p, 4, 0x0000ffff, "c1");
|
|
+ orc_program_add_constant (p, 4, 0xffff0000, "c2");
|
|
+ orc_program_add_constant (p, 2, 0x0000ffff, "c3");
|
|
+ orc_program_add_temporary (p, 4, "t1");
|
|
+ orc_program_add_temporary (p, 4, "t2");
|
|
+ orc_program_add_temporary (p, 4, "t3");
|
|
+
|
|
+ orc_program_append_2 (p, "avguw", 1, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S6,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_S5,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "copyl", 0, ORC_VAR_T3, ORC_VAR_S4, ORC_VAR_D1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "orl", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T2,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_S3, ORC_VAR_T2,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D2, ORC_VAR_T1, ORC_VAR_C3,
|
|
+ ORC_VAR_D1);
|
|
+#endif
|
|
+
|
|
+ orc_program_compile (p);
|
|
+ c = orc_program_take_code (p);
|
|
+ orc_program_free (p);
|
|
+ }
|
|
+ p_inited = TRUE;
|
|
+ orc_once_mutex_unlock ();
|
|
+ }
|
|
+ ex->arrays[ORC_VAR_A2] = c;
|
|
+ ex->program = 0;
|
|
+
|
|
+ ex->n = n;
|
|
+ ex->arrays[ORC_VAR_D1] = d1;
|
|
+ ex->arrays[ORC_VAR_D2] = d2;
|
|
+ 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 = c->exec;
|
|
+ func (ex);
|
|
+}
|
|
+#endif
|
|
+
|
|
+
|
|
+/* bayer16_orc_merge_gr_bgra */
|
|
+#ifdef DISABLE_ORC
|
|
+void
|
|
+bayer16_orc_merge_gr_bgra (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2,
|
|
+ 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;
|
|
+ orc_union64 *ORC_RESTRICT ptr1;
|
|
+ const orc_union32 *ORC_RESTRICT ptr4;
|
|
+ const orc_union32 *ORC_RESTRICT ptr5;
|
|
+ const orc_union32 *ORC_RESTRICT ptr6;
|
|
+ const orc_union32 *ORC_RESTRICT ptr7;
|
|
+ const orc_union32 *ORC_RESTRICT ptr8;
|
|
+ const orc_union32 *ORC_RESTRICT ptr9;
|
|
+ orc_union32 var35;
|
|
+ orc_union32 var36;
|
|
+ orc_union32 var37;
|
|
+ orc_union32 var38;
|
|
+ orc_union32 var39;
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var40;
|
|
+#else
|
|
+ orc_union32 var40;
|
|
+#endif
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var41;
|
|
+#else
|
|
+ orc_union32 var41;
|
|
+#endif
|
|
+ orc_union64 var42;
|
|
+ orc_union32 var43;
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var44;
|
|
+#else
|
|
+ orc_union32 var44;
|
|
+#endif
|
|
+ orc_union64 var45;
|
|
+ orc_union32 var46;
|
|
+ orc_union32 var47;
|
|
+ orc_union32 var48;
|
|
+ orc_union32 var49;
|
|
+ orc_union32 var50;
|
|
+ orc_union32 var51;
|
|
+ orc_union32 var52;
|
|
+
|
|
+ ptr0 = (orc_union64 *) d1;
|
|
+ ptr1 = (orc_union64 *) d2;
|
|
+ ptr4 = (orc_union32 *) s1;
|
|
+ ptr5 = (orc_union32 *) s2;
|
|
+ ptr6 = (orc_union32 *) s3;
|
|
+ ptr7 = (orc_union32 *) s4;
|
|
+ ptr8 = (orc_union32 *) s5;
|
|
+ ptr9 = (orc_union32 *) s6;
|
|
+
|
|
+ /* 9: loadpl */
|
|
+ var40.i = 0xffff0000; /* -65536 or 2.12196e-314f */
|
|
+ /* 11: loadpl */
|
|
+ var41.i = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ /* 17: loadpw */
|
|
+ var44.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ var44.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+
|
|
+ for (i = 0; i < n; i++) {
|
|
+ /* 0: loadl */
|
|
+ var35 = ptr4[i];
|
|
+ /* 1: loadl */
|
|
+ var36 = ptr8[i];
|
|
+ /* 2: avguw */
|
|
+ var46.x2[0] =
|
|
+ ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1;
|
|
+ var46.x2[1] =
|
|
+ ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1;
|
|
+ /* 3: loadl */
|
|
+ var37 = ptr5[i];
|
|
+ /* 4: loadl */
|
|
+ var38 = ptr9[i];
|
|
+ /* 5: avguw */
|
|
+ var47.x2[0] =
|
|
+ ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1;
|
|
+ var47.x2[1] =
|
|
+ ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1;
|
|
+ /* 6: loadl */
|
|
+ var39 = ptr6[i];
|
|
+ /* 7: copyl */
|
|
+ var48.i = var39.i;
|
|
+ /* 8: avguw */
|
|
+ var49.x2[0] =
|
|
+ ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1;
|
|
+ var49.x2[1] =
|
|
+ ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1;
|
|
+ /* 10: andl */
|
|
+ var50.i = var49.i & var40.i;
|
|
+ /* 12: andl */
|
|
+ var51.i = var48.i & var41.i;
|
|
+ /* 13: orl */
|
|
+ var52.i = var51.i | var50.i;
|
|
+ /* 14: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var46.x2[0];
|
|
+ _dest.x2[1] = var52.x2[0];
|
|
+ var42.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var46.x2[1];
|
|
+ _dest.x2[1] = var52.x2[1];
|
|
+ var42.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 15: storeq */
|
|
+ ptr0[i] = var42;
|
|
+ /* 16: loadl */
|
|
+ var43 = ptr7[i];
|
|
+ /* 18: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var43.x2[0];
|
|
+ _dest.x2[1] = var44.x2[0];
|
|
+ var45.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var43.x2[1];
|
|
+ _dest.x2[1] = var44.x2[1];
|
|
+ var45.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 19: storeq */
|
|
+ ptr1[i] = var45;
|
|
+ }
|
|
+
|
|
+}
|
|
+
|
|
+#else
|
|
+static void
|
|
+_backup_bayer16_orc_merge_gr_bgra (OrcExecutor * ORC_RESTRICT ex)
|
|
+{
|
|
+ int i;
|
|
+ int n = ex->n;
|
|
+ orc_union64 *ORC_RESTRICT ptr0;
|
|
+ orc_union64 *ORC_RESTRICT ptr1;
|
|
+ const orc_union32 *ORC_RESTRICT ptr4;
|
|
+ const orc_union32 *ORC_RESTRICT ptr5;
|
|
+ const orc_union32 *ORC_RESTRICT ptr6;
|
|
+ const orc_union32 *ORC_RESTRICT ptr7;
|
|
+ const orc_union32 *ORC_RESTRICT ptr8;
|
|
+ const orc_union32 *ORC_RESTRICT ptr9;
|
|
+ orc_union32 var35;
|
|
+ orc_union32 var36;
|
|
+ orc_union32 var37;
|
|
+ orc_union32 var38;
|
|
+ orc_union32 var39;
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var40;
|
|
+#else
|
|
+ orc_union32 var40;
|
|
+#endif
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var41;
|
|
+#else
|
|
+ orc_union32 var41;
|
|
+#endif
|
|
+ orc_union64 var42;
|
|
+ orc_union32 var43;
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var44;
|
|
+#else
|
|
+ orc_union32 var44;
|
|
+#endif
|
|
+ orc_union64 var45;
|
|
+ orc_union32 var46;
|
|
+ orc_union32 var47;
|
|
+ orc_union32 var48;
|
|
+ orc_union32 var49;
|
|
+ orc_union32 var50;
|
|
+ orc_union32 var51;
|
|
+ orc_union32 var52;
|
|
+
|
|
+ ptr0 = (orc_union64 *) ex->arrays[0];
|
|
+ ptr1 = (orc_union64 *) ex->arrays[1];
|
|
+ ptr4 = (orc_union32 *) ex->arrays[4];
|
|
+ ptr5 = (orc_union32 *) ex->arrays[5];
|
|
+ ptr6 = (orc_union32 *) ex->arrays[6];
|
|
+ ptr7 = (orc_union32 *) ex->arrays[7];
|
|
+ ptr8 = (orc_union32 *) ex->arrays[8];
|
|
+ ptr9 = (orc_union32 *) ex->arrays[9];
|
|
+
|
|
+ /* 9: loadpl */
|
|
+ var40.i = 0xffff0000; /* -65536 or 2.12196e-314f */
|
|
+ /* 11: loadpl */
|
|
+ var41.i = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ /* 17: loadpw */
|
|
+ var44.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ var44.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+
|
|
+ for (i = 0; i < n; i++) {
|
|
+ /* 0: loadl */
|
|
+ var35 = ptr4[i];
|
|
+ /* 1: loadl */
|
|
+ var36 = ptr8[i];
|
|
+ /* 2: avguw */
|
|
+ var46.x2[0] =
|
|
+ ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1;
|
|
+ var46.x2[1] =
|
|
+ ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1;
|
|
+ /* 3: loadl */
|
|
+ var37 = ptr5[i];
|
|
+ /* 4: loadl */
|
|
+ var38 = ptr9[i];
|
|
+ /* 5: avguw */
|
|
+ var47.x2[0] =
|
|
+ ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1;
|
|
+ var47.x2[1] =
|
|
+ ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1;
|
|
+ /* 6: loadl */
|
|
+ var39 = ptr6[i];
|
|
+ /* 7: copyl */
|
|
+ var48.i = var39.i;
|
|
+ /* 8: avguw */
|
|
+ var49.x2[0] =
|
|
+ ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1;
|
|
+ var49.x2[1] =
|
|
+ ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1;
|
|
+ /* 10: andl */
|
|
+ var50.i = var49.i & var40.i;
|
|
+ /* 12: andl */
|
|
+ var51.i = var48.i & var41.i;
|
|
+ /* 13: orl */
|
|
+ var52.i = var51.i | var50.i;
|
|
+ /* 14: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var46.x2[0];
|
|
+ _dest.x2[1] = var52.x2[0];
|
|
+ var42.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var46.x2[1];
|
|
+ _dest.x2[1] = var52.x2[1];
|
|
+ var42.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 15: storeq */
|
|
+ ptr0[i] = var42;
|
|
+ /* 16: loadl */
|
|
+ var43 = ptr7[i];
|
|
+ /* 18: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var43.x2[0];
|
|
+ _dest.x2[1] = var44.x2[0];
|
|
+ var45.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var43.x2[1];
|
|
+ _dest.x2[1] = var44.x2[1];
|
|
+ var45.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 19: storeq */
|
|
+ ptr1[i] = var45;
|
|
+ }
|
|
+
|
|
+}
|
|
+
|
|
+void
|
|
+bayer16_orc_merge_gr_bgra (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2,
|
|
+ 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 volatile int p_inited = 0;
|
|
+ static OrcCode *c = 0;
|
|
+ void (*func) (OrcExecutor *);
|
|
+
|
|
+ if (!p_inited) {
|
|
+ orc_once_mutex_lock ();
|
|
+ if (!p_inited) {
|
|
+ OrcProgram *p;
|
|
+
|
|
+#if 1
|
|
+ static const orc_uint8 bc[] = {
|
|
+ 1, 9, 25, 98, 97, 121, 101, 114, 49, 54, 95, 111, 114, 99, 95, 109,
|
|
+ 101, 114, 103, 101, 95, 103, 114, 95, 98, 103, 114, 97, 11, 8, 8, 11,
|
|
+ 8, 8, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4,
|
|
+ 4, 12, 4, 4, 14, 4, 0, 0, 255, 255, 14, 4, 255, 255, 0, 0,
|
|
+ 14, 2, 255, 255, 0, 0, 20, 4, 20, 4, 20, 4, 21, 1, 76, 32,
|
|
+ 4, 8, 21, 1, 76, 33, 5, 9, 112, 34, 6, 21, 1, 76, 33, 33,
|
|
+ 34, 106, 33, 33, 16, 106, 34, 34, 17, 123, 33, 34, 33, 21, 1, 195,
|
|
+ 0, 32, 33, 21, 1, 195, 1, 7, 18, 2, 0,
|
|
+ };
|
|
+ p = orc_program_new_from_static_bytecode (bc);
|
|
+ orc_program_set_backup_function (p, _backup_bayer16_orc_merge_gr_bgra);
|
|
+#else
|
|
+ p = orc_program_new ();
|
|
+ orc_program_set_name (p, "bayer16_orc_merge_gr_bgra");
|
|
+ orc_program_set_backup_function (p, _backup_bayer16_orc_merge_gr_bgra);
|
|
+ orc_program_add_destination (p, 8, "d1");
|
|
+ orc_program_add_destination (p, 8, "d2");
|
|
+ orc_program_add_source (p, 4, "s1");
|
|
+ orc_program_add_source (p, 4, "s2");
|
|
+ orc_program_add_source (p, 4, "s3");
|
|
+ orc_program_add_source (p, 4, "s4");
|
|
+ orc_program_add_source (p, 4, "s5");
|
|
+ orc_program_add_source (p, 4, "s6");
|
|
+ orc_program_add_constant (p, 4, 0xffff0000, "c1");
|
|
+ orc_program_add_constant (p, 4, 0x0000ffff, "c2");
|
|
+ orc_program_add_constant (p, 2, 0x0000ffff, "c3");
|
|
+ orc_program_add_temporary (p, 4, "t1");
|
|
+ orc_program_add_temporary (p, 4, "t2");
|
|
+ orc_program_add_temporary (p, 4, "t3");
|
|
+
|
|
+ orc_program_append_2 (p, "avguw", 1, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_S5,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_S6,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "copyl", 0, ORC_VAR_T3, ORC_VAR_S3, ORC_VAR_D1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "orl", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T2,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D2, ORC_VAR_S4, ORC_VAR_C3,
|
|
+ ORC_VAR_D1);
|
|
+#endif
|
|
+
|
|
+ orc_program_compile (p);
|
|
+ c = orc_program_take_code (p);
|
|
+ orc_program_free (p);
|
|
+ }
|
|
+ p_inited = TRUE;
|
|
+ orc_once_mutex_unlock ();
|
|
+ }
|
|
+ ex->arrays[ORC_VAR_A2] = c;
|
|
+ ex->program = 0;
|
|
+
|
|
+ ex->n = n;
|
|
+ ex->arrays[ORC_VAR_D1] = d1;
|
|
+ ex->arrays[ORC_VAR_D2] = d2;
|
|
+ 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 = c->exec;
|
|
+ func (ex);
|
|
+}
|
|
+#endif
|
|
+
|
|
+
|
|
+/* bayer16_orc_merge_bg_abgr */
|
|
+#ifdef DISABLE_ORC
|
|
+void
|
|
+bayer16_orc_merge_bg_abgr (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2,
|
|
+ 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;
|
|
+ orc_union64 *ORC_RESTRICT ptr1;
|
|
+ const orc_union32 *ORC_RESTRICT ptr4;
|
|
+ const orc_union32 *ORC_RESTRICT ptr5;
|
|
+ const orc_union32 *ORC_RESTRICT ptr6;
|
|
+ const orc_union32 *ORC_RESTRICT ptr7;
|
|
+ const orc_union32 *ORC_RESTRICT ptr8;
|
|
+ const orc_union32 *ORC_RESTRICT ptr9;
|
|
+ orc_union32 var35;
|
|
+ orc_union32 var36;
|
|
+ orc_union32 var37;
|
|
+ orc_union32 var38;
|
|
+ orc_union32 var39;
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var40;
|
|
+#else
|
|
+ orc_union32 var40;
|
|
+#endif
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var41;
|
|
+#else
|
|
+ orc_union32 var41;
|
|
+#endif
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var42;
|
|
+#else
|
|
+ orc_union32 var42;
|
|
+#endif
|
|
+ orc_union32 var43;
|
|
+ orc_union64 var44;
|
|
+ orc_union64 var45;
|
|
+ orc_union32 var46;
|
|
+ orc_union32 var47;
|
|
+ orc_union32 var48;
|
|
+ orc_union32 var49;
|
|
+ orc_union32 var50;
|
|
+ orc_union32 var51;
|
|
+ orc_union32 var52;
|
|
+
|
|
+ ptr0 = (orc_union64 *) d1;
|
|
+ ptr1 = (orc_union64 *) d2;
|
|
+ ptr4 = (orc_union32 *) s1;
|
|
+ ptr5 = (orc_union32 *) s2;
|
|
+ ptr6 = (orc_union32 *) s3;
|
|
+ ptr7 = (orc_union32 *) s4;
|
|
+ ptr8 = (orc_union32 *) s5;
|
|
+ ptr9 = (orc_union32 *) s6;
|
|
+
|
|
+ /* 9: loadpl */
|
|
+ var40.i = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ /* 11: loadpl */
|
|
+ var41.i = 0xffff0000; /* -65536 or 2.12196e-314f */
|
|
+ /* 14: loadpw */
|
|
+ var42.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ var42.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+
|
|
+ for (i = 0; i < n; i++) {
|
|
+ /* 0: loadl */
|
|
+ var35 = ptr5[i];
|
|
+ /* 1: loadl */
|
|
+ var36 = ptr9[i];
|
|
+ /* 2: avguw */
|
|
+ var46.x2[0] =
|
|
+ ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1;
|
|
+ var46.x2[1] =
|
|
+ ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1;
|
|
+ /* 3: loadl */
|
|
+ var37 = ptr4[i];
|
|
+ /* 4: loadl */
|
|
+ var38 = ptr8[i];
|
|
+ /* 5: avguw */
|
|
+ var47.x2[0] =
|
|
+ ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1;
|
|
+ var47.x2[1] =
|
|
+ ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1;
|
|
+ /* 6: loadl */
|
|
+ var39 = ptr7[i];
|
|
+ /* 7: copyl */
|
|
+ var48.i = var39.i;
|
|
+ /* 8: avguw */
|
|
+ var49.x2[0] =
|
|
+ ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1;
|
|
+ var49.x2[1] =
|
|
+ ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1;
|
|
+ /* 10: andl */
|
|
+ var50.i = var49.i & var40.i;
|
|
+ /* 12: andl */
|
|
+ var51.i = var48.i & var41.i;
|
|
+ /* 13: orl */
|
|
+ var52.i = var51.i | var50.i;
|
|
+ /* 15: loadl */
|
|
+ var43 = ptr6[i];
|
|
+ /* 16: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var42.x2[0];
|
|
+ _dest.x2[1] = var43.x2[0];
|
|
+ var44.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var42.x2[1];
|
|
+ _dest.x2[1] = var43.x2[1];
|
|
+ var44.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 17: storeq */
|
|
+ ptr0[i] = var44;
|
|
+ /* 18: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var52.x2[0];
|
|
+ _dest.x2[1] = var46.x2[0];
|
|
+ var45.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var52.x2[1];
|
|
+ _dest.x2[1] = var46.x2[1];
|
|
+ var45.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 19: storeq */
|
|
+ ptr1[i] = var45;
|
|
+ }
|
|
+
|
|
+}
|
|
+
|
|
+#else
|
|
+static void
|
|
+_backup_bayer16_orc_merge_bg_abgr (OrcExecutor * ORC_RESTRICT ex)
|
|
+{
|
|
+ int i;
|
|
+ int n = ex->n;
|
|
+ orc_union64 *ORC_RESTRICT ptr0;
|
|
+ orc_union64 *ORC_RESTRICT ptr1;
|
|
+ const orc_union32 *ORC_RESTRICT ptr4;
|
|
+ const orc_union32 *ORC_RESTRICT ptr5;
|
|
+ const orc_union32 *ORC_RESTRICT ptr6;
|
|
+ const orc_union32 *ORC_RESTRICT ptr7;
|
|
+ const orc_union32 *ORC_RESTRICT ptr8;
|
|
+ const orc_union32 *ORC_RESTRICT ptr9;
|
|
+ orc_union32 var35;
|
|
+ orc_union32 var36;
|
|
+ orc_union32 var37;
|
|
+ orc_union32 var38;
|
|
+ orc_union32 var39;
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var40;
|
|
+#else
|
|
+ orc_union32 var40;
|
|
+#endif
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var41;
|
|
+#else
|
|
+ orc_union32 var41;
|
|
+#endif
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var42;
|
|
+#else
|
|
+ orc_union32 var42;
|
|
+#endif
|
|
+ orc_union32 var43;
|
|
+ orc_union64 var44;
|
|
+ orc_union64 var45;
|
|
+ orc_union32 var46;
|
|
+ orc_union32 var47;
|
|
+ orc_union32 var48;
|
|
+ orc_union32 var49;
|
|
+ orc_union32 var50;
|
|
+ orc_union32 var51;
|
|
+ orc_union32 var52;
|
|
+
|
|
+ ptr0 = (orc_union64 *) ex->arrays[0];
|
|
+ ptr1 = (orc_union64 *) ex->arrays[1];
|
|
+ ptr4 = (orc_union32 *) ex->arrays[4];
|
|
+ ptr5 = (orc_union32 *) ex->arrays[5];
|
|
+ ptr6 = (orc_union32 *) ex->arrays[6];
|
|
+ ptr7 = (orc_union32 *) ex->arrays[7];
|
|
+ ptr8 = (orc_union32 *) ex->arrays[8];
|
|
+ ptr9 = (orc_union32 *) ex->arrays[9];
|
|
+
|
|
+ /* 9: loadpl */
|
|
+ var40.i = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ /* 11: loadpl */
|
|
+ var41.i = 0xffff0000; /* -65536 or 2.12196e-314f */
|
|
+ /* 14: loadpw */
|
|
+ var42.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ var42.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+
|
|
+ for (i = 0; i < n; i++) {
|
|
+ /* 0: loadl */
|
|
+ var35 = ptr5[i];
|
|
+ /* 1: loadl */
|
|
+ var36 = ptr9[i];
|
|
+ /* 2: avguw */
|
|
+ var46.x2[0] =
|
|
+ ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1;
|
|
+ var46.x2[1] =
|
|
+ ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1;
|
|
+ /* 3: loadl */
|
|
+ var37 = ptr4[i];
|
|
+ /* 4: loadl */
|
|
+ var38 = ptr8[i];
|
|
+ /* 5: avguw */
|
|
+ var47.x2[0] =
|
|
+ ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1;
|
|
+ var47.x2[1] =
|
|
+ ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1;
|
|
+ /* 6: loadl */
|
|
+ var39 = ptr7[i];
|
|
+ /* 7: copyl */
|
|
+ var48.i = var39.i;
|
|
+ /* 8: avguw */
|
|
+ var49.x2[0] =
|
|
+ ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1;
|
|
+ var49.x2[1] =
|
|
+ ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1;
|
|
+ /* 10: andl */
|
|
+ var50.i = var49.i & var40.i;
|
|
+ /* 12: andl */
|
|
+ var51.i = var48.i & var41.i;
|
|
+ /* 13: orl */
|
|
+ var52.i = var51.i | var50.i;
|
|
+ /* 15: loadl */
|
|
+ var43 = ptr6[i];
|
|
+ /* 16: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var42.x2[0];
|
|
+ _dest.x2[1] = var43.x2[0];
|
|
+ var44.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var42.x2[1];
|
|
+ _dest.x2[1] = var43.x2[1];
|
|
+ var44.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 17: storeq */
|
|
+ ptr0[i] = var44;
|
|
+ /* 18: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var52.x2[0];
|
|
+ _dest.x2[1] = var46.x2[0];
|
|
+ var45.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var52.x2[1];
|
|
+ _dest.x2[1] = var46.x2[1];
|
|
+ var45.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 19: storeq */
|
|
+ ptr1[i] = var45;
|
|
+ }
|
|
+
|
|
+}
|
|
+
|
|
+void
|
|
+bayer16_orc_merge_bg_abgr (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2,
|
|
+ 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 volatile int p_inited = 0;
|
|
+ static OrcCode *c = 0;
|
|
+ void (*func) (OrcExecutor *);
|
|
+
|
|
+ if (!p_inited) {
|
|
+ orc_once_mutex_lock ();
|
|
+ if (!p_inited) {
|
|
+ OrcProgram *p;
|
|
+
|
|
+#if 1
|
|
+ static const orc_uint8 bc[] = {
|
|
+ 1, 9, 25, 98, 97, 121, 101, 114, 49, 54, 95, 111, 114, 99, 95, 109,
|
|
+ 101, 114, 103, 101, 95, 98, 103, 95, 97, 98, 103, 114, 11, 8, 8, 11,
|
|
+ 8, 8, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4,
|
|
+ 4, 12, 4, 4, 14, 4, 255, 255, 0, 0, 14, 4, 0, 0, 255, 255,
|
|
+ 14, 2, 255, 255, 0, 0, 20, 4, 20, 4, 20, 4, 21, 1, 76, 32,
|
|
+ 5, 9, 21, 1, 76, 33, 4, 8, 112, 34, 7, 21, 1, 76, 33, 33,
|
|
+ 34, 106, 33, 33, 16, 106, 34, 34, 17, 123, 33, 34, 33, 21, 1, 195,
|
|
+ 0, 18, 6, 21, 1, 195, 1, 33, 32, 2, 0,
|
|
+ };
|
|
+ p = orc_program_new_from_static_bytecode (bc);
|
|
+ orc_program_set_backup_function (p, _backup_bayer16_orc_merge_bg_abgr);
|
|
+#else
|
|
+ p = orc_program_new ();
|
|
+ orc_program_set_name (p, "bayer16_orc_merge_bg_abgr");
|
|
+ orc_program_set_backup_function (p, _backup_bayer16_orc_merge_bg_abgr);
|
|
+ orc_program_add_destination (p, 8, "d1");
|
|
+ orc_program_add_destination (p, 8, "d2");
|
|
+ orc_program_add_source (p, 4, "s1");
|
|
+ orc_program_add_source (p, 4, "s2");
|
|
+ orc_program_add_source (p, 4, "s3");
|
|
+ orc_program_add_source (p, 4, "s4");
|
|
+ orc_program_add_source (p, 4, "s5");
|
|
+ orc_program_add_source (p, 4, "s6");
|
|
+ orc_program_add_constant (p, 4, 0x0000ffff, "c1");
|
|
+ orc_program_add_constant (p, 4, 0xffff0000, "c2");
|
|
+ orc_program_add_constant (p, 2, 0x0000ffff, "c3");
|
|
+ orc_program_add_temporary (p, 4, "t1");
|
|
+ orc_program_add_temporary (p, 4, "t2");
|
|
+ orc_program_add_temporary (p, 4, "t3");
|
|
+
|
|
+ orc_program_append_2 (p, "avguw", 1, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S6,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_S5,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "copyl", 0, ORC_VAR_T3, ORC_VAR_S4, ORC_VAR_D1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "orl", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T2,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_C3, ORC_VAR_S3,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_T1,
|
|
+ ORC_VAR_D1);
|
|
+#endif
|
|
+
|
|
+ orc_program_compile (p);
|
|
+ c = orc_program_take_code (p);
|
|
+ orc_program_free (p);
|
|
+ }
|
|
+ p_inited = TRUE;
|
|
+ orc_once_mutex_unlock ();
|
|
+ }
|
|
+ ex->arrays[ORC_VAR_A2] = c;
|
|
+ ex->program = 0;
|
|
+
|
|
+ ex->n = n;
|
|
+ ex->arrays[ORC_VAR_D1] = d1;
|
|
+ ex->arrays[ORC_VAR_D2] = d2;
|
|
+ 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 = c->exec;
|
|
+ func (ex);
|
|
+}
|
|
+#endif
|
|
+
|
|
+
|
|
+/* bayer16_orc_merge_gr_abgr */
|
|
+#ifdef DISABLE_ORC
|
|
+void
|
|
+bayer16_orc_merge_gr_abgr (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2,
|
|
+ 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;
|
|
+ orc_union64 *ORC_RESTRICT ptr1;
|
|
+ const orc_union32 *ORC_RESTRICT ptr4;
|
|
+ const orc_union32 *ORC_RESTRICT ptr5;
|
|
+ const orc_union32 *ORC_RESTRICT ptr6;
|
|
+ const orc_union32 *ORC_RESTRICT ptr7;
|
|
+ const orc_union32 *ORC_RESTRICT ptr8;
|
|
+ const orc_union32 *ORC_RESTRICT ptr9;
|
|
+ orc_union32 var35;
|
|
+ orc_union32 var36;
|
|
+ orc_union32 var37;
|
|
+ orc_union32 var38;
|
|
+ orc_union32 var39;
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var40;
|
|
+#else
|
|
+ orc_union32 var40;
|
|
+#endif
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var41;
|
|
+#else
|
|
+ orc_union32 var41;
|
|
+#endif
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var42;
|
|
+#else
|
|
+ orc_union32 var42;
|
|
+#endif
|
|
+ orc_union64 var43;
|
|
+ orc_union32 var44;
|
|
+ orc_union64 var45;
|
|
+ orc_union32 var46;
|
|
+ orc_union32 var47;
|
|
+ orc_union32 var48;
|
|
+ orc_union32 var49;
|
|
+ orc_union32 var50;
|
|
+ orc_union32 var51;
|
|
+ orc_union32 var52;
|
|
+
|
|
+ ptr0 = (orc_union64 *) d1;
|
|
+ ptr1 = (orc_union64 *) d2;
|
|
+ ptr4 = (orc_union32 *) s1;
|
|
+ ptr5 = (orc_union32 *) s2;
|
|
+ ptr6 = (orc_union32 *) s3;
|
|
+ ptr7 = (orc_union32 *) s4;
|
|
+ ptr8 = (orc_union32 *) s5;
|
|
+ ptr9 = (orc_union32 *) s6;
|
|
+
|
|
+ /* 9: loadpl */
|
|
+ var40.i = 0xffff0000; /* -65536 or 2.12196e-314f */
|
|
+ /* 11: loadpl */
|
|
+ var41.i = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ /* 14: loadpw */
|
|
+ var42.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ var42.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+
|
|
+ for (i = 0; i < n; i++) {
|
|
+ /* 0: loadl */
|
|
+ var35 = ptr4[i];
|
|
+ /* 1: loadl */
|
|
+ var36 = ptr8[i];
|
|
+ /* 2: avguw */
|
|
+ var46.x2[0] =
|
|
+ ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1;
|
|
+ var46.x2[1] =
|
|
+ ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1;
|
|
+ /* 3: loadl */
|
|
+ var37 = ptr5[i];
|
|
+ /* 4: loadl */
|
|
+ var38 = ptr9[i];
|
|
+ /* 5: avguw */
|
|
+ var47.x2[0] =
|
|
+ ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1;
|
|
+ var47.x2[1] =
|
|
+ ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1;
|
|
+ /* 6: loadl */
|
|
+ var39 = ptr6[i];
|
|
+ /* 7: copyl */
|
|
+ var48.i = var39.i;
|
|
+ /* 8: avguw */
|
|
+ var49.x2[0] =
|
|
+ ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1;
|
|
+ var49.x2[1] =
|
|
+ ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1;
|
|
+ /* 10: andl */
|
|
+ var50.i = var49.i & var40.i;
|
|
+ /* 12: andl */
|
|
+ var51.i = var48.i & var41.i;
|
|
+ /* 13: orl */
|
|
+ var52.i = var51.i | var50.i;
|
|
+ /* 15: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var42.x2[0];
|
|
+ _dest.x2[1] = var46.x2[0];
|
|
+ var43.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var42.x2[1];
|
|
+ _dest.x2[1] = var46.x2[1];
|
|
+ var43.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 16: storeq */
|
|
+ ptr0[i] = var43;
|
|
+ /* 17: loadl */
|
|
+ var44 = ptr7[i];
|
|
+ /* 18: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var52.x2[0];
|
|
+ _dest.x2[1] = var44.x2[0];
|
|
+ var45.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var52.x2[1];
|
|
+ _dest.x2[1] = var44.x2[1];
|
|
+ var45.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 19: storeq */
|
|
+ ptr1[i] = var45;
|
|
+ }
|
|
+
|
|
+}
|
|
+
|
|
+#else
|
|
+static void
|
|
+_backup_bayer16_orc_merge_gr_abgr (OrcExecutor * ORC_RESTRICT ex)
|
|
+{
|
|
+ int i;
|
|
+ int n = ex->n;
|
|
+ orc_union64 *ORC_RESTRICT ptr0;
|
|
+ orc_union64 *ORC_RESTRICT ptr1;
|
|
+ const orc_union32 *ORC_RESTRICT ptr4;
|
|
+ const orc_union32 *ORC_RESTRICT ptr5;
|
|
+ const orc_union32 *ORC_RESTRICT ptr6;
|
|
+ const orc_union32 *ORC_RESTRICT ptr7;
|
|
+ const orc_union32 *ORC_RESTRICT ptr8;
|
|
+ const orc_union32 *ORC_RESTRICT ptr9;
|
|
+ orc_union32 var35;
|
|
+ orc_union32 var36;
|
|
+ orc_union32 var37;
|
|
+ orc_union32 var38;
|
|
+ orc_union32 var39;
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var40;
|
|
+#else
|
|
+ orc_union32 var40;
|
|
+#endif
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var41;
|
|
+#else
|
|
+ orc_union32 var41;
|
|
+#endif
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var42;
|
|
+#else
|
|
+ orc_union32 var42;
|
|
+#endif
|
|
+ orc_union64 var43;
|
|
+ orc_union32 var44;
|
|
+ orc_union64 var45;
|
|
+ orc_union32 var46;
|
|
+ orc_union32 var47;
|
|
+ orc_union32 var48;
|
|
+ orc_union32 var49;
|
|
+ orc_union32 var50;
|
|
+ orc_union32 var51;
|
|
+ orc_union32 var52;
|
|
+
|
|
+ ptr0 = (orc_union64 *) ex->arrays[0];
|
|
+ ptr1 = (orc_union64 *) ex->arrays[1];
|
|
+ ptr4 = (orc_union32 *) ex->arrays[4];
|
|
+ ptr5 = (orc_union32 *) ex->arrays[5];
|
|
+ ptr6 = (orc_union32 *) ex->arrays[6];
|
|
+ ptr7 = (orc_union32 *) ex->arrays[7];
|
|
+ ptr8 = (orc_union32 *) ex->arrays[8];
|
|
+ ptr9 = (orc_union32 *) ex->arrays[9];
|
|
+
|
|
+ /* 9: loadpl */
|
|
+ var40.i = 0xffff0000; /* -65536 or 2.12196e-314f */
|
|
+ /* 11: loadpl */
|
|
+ var41.i = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ /* 14: loadpw */
|
|
+ var42.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ var42.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+
|
|
+ for (i = 0; i < n; i++) {
|
|
+ /* 0: loadl */
|
|
+ var35 = ptr4[i];
|
|
+ /* 1: loadl */
|
|
+ var36 = ptr8[i];
|
|
+ /* 2: avguw */
|
|
+ var46.x2[0] =
|
|
+ ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1;
|
|
+ var46.x2[1] =
|
|
+ ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1;
|
|
+ /* 3: loadl */
|
|
+ var37 = ptr5[i];
|
|
+ /* 4: loadl */
|
|
+ var38 = ptr9[i];
|
|
+ /* 5: avguw */
|
|
+ var47.x2[0] =
|
|
+ ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1;
|
|
+ var47.x2[1] =
|
|
+ ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1;
|
|
+ /* 6: loadl */
|
|
+ var39 = ptr6[i];
|
|
+ /* 7: copyl */
|
|
+ var48.i = var39.i;
|
|
+ /* 8: avguw */
|
|
+ var49.x2[0] =
|
|
+ ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1;
|
|
+ var49.x2[1] =
|
|
+ ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1;
|
|
+ /* 10: andl */
|
|
+ var50.i = var49.i & var40.i;
|
|
+ /* 12: andl */
|
|
+ var51.i = var48.i & var41.i;
|
|
+ /* 13: orl */
|
|
+ var52.i = var51.i | var50.i;
|
|
+ /* 15: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var42.x2[0];
|
|
+ _dest.x2[1] = var46.x2[0];
|
|
+ var43.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var42.x2[1];
|
|
+ _dest.x2[1] = var46.x2[1];
|
|
+ var43.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 16: storeq */
|
|
+ ptr0[i] = var43;
|
|
+ /* 17: loadl */
|
|
+ var44 = ptr7[i];
|
|
+ /* 18: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var52.x2[0];
|
|
+ _dest.x2[1] = var44.x2[0];
|
|
+ var45.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var52.x2[1];
|
|
+ _dest.x2[1] = var44.x2[1];
|
|
+ var45.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 19: storeq */
|
|
+ ptr1[i] = var45;
|
|
+ }
|
|
+
|
|
+}
|
|
+
|
|
+void
|
|
+bayer16_orc_merge_gr_abgr (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2,
|
|
+ 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 volatile int p_inited = 0;
|
|
+ static OrcCode *c = 0;
|
|
+ void (*func) (OrcExecutor *);
|
|
+
|
|
+ if (!p_inited) {
|
|
+ orc_once_mutex_lock ();
|
|
+ if (!p_inited) {
|
|
+ OrcProgram *p;
|
|
+
|
|
+#if 1
|
|
+ static const orc_uint8 bc[] = {
|
|
+ 1, 9, 25, 98, 97, 121, 101, 114, 49, 54, 95, 111, 114, 99, 95, 109,
|
|
+ 101, 114, 103, 101, 95, 103, 114, 95, 97, 98, 103, 114, 11, 8, 8, 11,
|
|
+ 8, 8, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4,
|
|
+ 4, 12, 4, 4, 14, 4, 0, 0, 255, 255, 14, 4, 255, 255, 0, 0,
|
|
+ 14, 2, 255, 255, 0, 0, 20, 4, 20, 4, 20, 4, 21, 1, 76, 32,
|
|
+ 4, 8, 21, 1, 76, 33, 5, 9, 112, 34, 6, 21, 1, 76, 33, 33,
|
|
+ 34, 106, 33, 33, 16, 106, 34, 34, 17, 123, 33, 34, 33, 21, 1, 195,
|
|
+ 0, 18, 32, 21, 1, 195, 1, 33, 7, 2, 0,
|
|
+ };
|
|
+ p = orc_program_new_from_static_bytecode (bc);
|
|
+ orc_program_set_backup_function (p, _backup_bayer16_orc_merge_gr_abgr);
|
|
+#else
|
|
+ p = orc_program_new ();
|
|
+ orc_program_set_name (p, "bayer16_orc_merge_gr_abgr");
|
|
+ orc_program_set_backup_function (p, _backup_bayer16_orc_merge_gr_abgr);
|
|
+ orc_program_add_destination (p, 8, "d1");
|
|
+ orc_program_add_destination (p, 8, "d2");
|
|
+ orc_program_add_source (p, 4, "s1");
|
|
+ orc_program_add_source (p, 4, "s2");
|
|
+ orc_program_add_source (p, 4, "s3");
|
|
+ orc_program_add_source (p, 4, "s4");
|
|
+ orc_program_add_source (p, 4, "s5");
|
|
+ orc_program_add_source (p, 4, "s6");
|
|
+ orc_program_add_constant (p, 4, 0xffff0000, "c1");
|
|
+ orc_program_add_constant (p, 4, 0x0000ffff, "c2");
|
|
+ orc_program_add_constant (p, 2, 0x0000ffff, "c3");
|
|
+ orc_program_add_temporary (p, 4, "t1");
|
|
+ orc_program_add_temporary (p, 4, "t2");
|
|
+ orc_program_add_temporary (p, 4, "t3");
|
|
+
|
|
+ orc_program_append_2 (p, "avguw", 1, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_S5,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_S6,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "copyl", 0, ORC_VAR_T3, ORC_VAR_S3, ORC_VAR_D1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "orl", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T2,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_C3, ORC_VAR_T1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_S4,
|
|
+ ORC_VAR_D1);
|
|
+#endif
|
|
+
|
|
+ orc_program_compile (p);
|
|
+ c = orc_program_take_code (p);
|
|
+ orc_program_free (p);
|
|
+ }
|
|
+ p_inited = TRUE;
|
|
+ orc_once_mutex_unlock ();
|
|
+ }
|
|
+ ex->arrays[ORC_VAR_A2] = c;
|
|
+ ex->program = 0;
|
|
+
|
|
+ ex->n = n;
|
|
+ ex->arrays[ORC_VAR_D1] = d1;
|
|
+ ex->arrays[ORC_VAR_D2] = d2;
|
|
+ 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 = c->exec;
|
|
+ func (ex);
|
|
+}
|
|
+#endif
|
|
+
|
|
+
|
|
+/* bayer16_orc_merge_bg_rgba */
|
|
+#ifdef DISABLE_ORC
|
|
+void
|
|
+bayer16_orc_merge_bg_rgba (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2,
|
|
+ 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;
|
|
+ orc_union64 *ORC_RESTRICT ptr1;
|
|
+ const orc_union32 *ORC_RESTRICT ptr4;
|
|
+ const orc_union32 *ORC_RESTRICT ptr5;
|
|
+ const orc_union32 *ORC_RESTRICT ptr6;
|
|
+ const orc_union32 *ORC_RESTRICT ptr7;
|
|
+ const orc_union32 *ORC_RESTRICT ptr8;
|
|
+ const orc_union32 *ORC_RESTRICT ptr9;
|
|
+ orc_union32 var35;
|
|
+ orc_union32 var36;
|
|
+ orc_union32 var37;
|
|
+ orc_union32 var38;
|
|
+ orc_union32 var39;
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var40;
|
|
+#else
|
|
+ orc_union32 var40;
|
|
+#endif
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var41;
|
|
+#else
|
|
+ orc_union32 var41;
|
|
+#endif
|
|
+ orc_union64 var42;
|
|
+ orc_union32 var43;
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var44;
|
|
+#else
|
|
+ orc_union32 var44;
|
|
+#endif
|
|
+ orc_union64 var45;
|
|
+ orc_union32 var46;
|
|
+ orc_union32 var47;
|
|
+ orc_union32 var48;
|
|
+ orc_union32 var49;
|
|
+ orc_union32 var50;
|
|
+ orc_union32 var51;
|
|
+ orc_union32 var52;
|
|
+
|
|
+ ptr0 = (orc_union64 *) d1;
|
|
+ ptr1 = (orc_union64 *) d2;
|
|
+ ptr4 = (orc_union32 *) s1;
|
|
+ ptr5 = (orc_union32 *) s2;
|
|
+ ptr6 = (orc_union32 *) s3;
|
|
+ ptr7 = (orc_union32 *) s4;
|
|
+ ptr8 = (orc_union32 *) s5;
|
|
+ ptr9 = (orc_union32 *) s6;
|
|
+
|
|
+ /* 9: loadpl */
|
|
+ var40.i = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ /* 11: loadpl */
|
|
+ var41.i = 0xffff0000; /* -65536 or 2.12196e-314f */
|
|
+ /* 17: loadpw */
|
|
+ var44.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ var44.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+
|
|
+ for (i = 0; i < n; i++) {
|
|
+ /* 0: loadl */
|
|
+ var35 = ptr5[i];
|
|
+ /* 1: loadl */
|
|
+ var36 = ptr9[i];
|
|
+ /* 2: avguw */
|
|
+ var46.x2[0] =
|
|
+ ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1;
|
|
+ var46.x2[1] =
|
|
+ ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1;
|
|
+ /* 3: loadl */
|
|
+ var37 = ptr4[i];
|
|
+ /* 4: loadl */
|
|
+ var38 = ptr8[i];
|
|
+ /* 5: avguw */
|
|
+ var47.x2[0] =
|
|
+ ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1;
|
|
+ var47.x2[1] =
|
|
+ ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1;
|
|
+ /* 6: loadl */
|
|
+ var39 = ptr7[i];
|
|
+ /* 7: copyl */
|
|
+ var48.i = var39.i;
|
|
+ /* 8: avguw */
|
|
+ var49.x2[0] =
|
|
+ ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1;
|
|
+ var49.x2[1] =
|
|
+ ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1;
|
|
+ /* 10: andl */
|
|
+ var50.i = var49.i & var40.i;
|
|
+ /* 12: andl */
|
|
+ var51.i = var48.i & var41.i;
|
|
+ /* 13: orl */
|
|
+ var52.i = var51.i | var50.i;
|
|
+ /* 14: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var46.x2[0];
|
|
+ _dest.x2[1] = var52.x2[0];
|
|
+ var42.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var46.x2[1];
|
|
+ _dest.x2[1] = var52.x2[1];
|
|
+ var42.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 15: storeq */
|
|
+ ptr0[i] = var42;
|
|
+ /* 16: loadl */
|
|
+ var43 = ptr6[i];
|
|
+ /* 18: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var43.x2[0];
|
|
+ _dest.x2[1] = var44.x2[0];
|
|
+ var45.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var43.x2[1];
|
|
+ _dest.x2[1] = var44.x2[1];
|
|
+ var45.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 19: storeq */
|
|
+ ptr1[i] = var45;
|
|
+ }
|
|
+
|
|
+}
|
|
+
|
|
+#else
|
|
+static void
|
|
+_backup_bayer16_orc_merge_bg_rgba (OrcExecutor * ORC_RESTRICT ex)
|
|
+{
|
|
+ int i;
|
|
+ int n = ex->n;
|
|
+ orc_union64 *ORC_RESTRICT ptr0;
|
|
+ orc_union64 *ORC_RESTRICT ptr1;
|
|
+ const orc_union32 *ORC_RESTRICT ptr4;
|
|
+ const orc_union32 *ORC_RESTRICT ptr5;
|
|
+ const orc_union32 *ORC_RESTRICT ptr6;
|
|
+ const orc_union32 *ORC_RESTRICT ptr7;
|
|
+ const orc_union32 *ORC_RESTRICT ptr8;
|
|
+ const orc_union32 *ORC_RESTRICT ptr9;
|
|
+ orc_union32 var35;
|
|
+ orc_union32 var36;
|
|
+ orc_union32 var37;
|
|
+ orc_union32 var38;
|
|
+ orc_union32 var39;
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var40;
|
|
+#else
|
|
+ orc_union32 var40;
|
|
+#endif
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var41;
|
|
+#else
|
|
+ orc_union32 var41;
|
|
+#endif
|
|
+ orc_union64 var42;
|
|
+ orc_union32 var43;
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var44;
|
|
+#else
|
|
+ orc_union32 var44;
|
|
+#endif
|
|
+ orc_union64 var45;
|
|
+ orc_union32 var46;
|
|
+ orc_union32 var47;
|
|
+ orc_union32 var48;
|
|
+ orc_union32 var49;
|
|
+ orc_union32 var50;
|
|
+ orc_union32 var51;
|
|
+ orc_union32 var52;
|
|
+
|
|
+ ptr0 = (orc_union64 *) ex->arrays[0];
|
|
+ ptr1 = (orc_union64 *) ex->arrays[1];
|
|
+ ptr4 = (orc_union32 *) ex->arrays[4];
|
|
+ ptr5 = (orc_union32 *) ex->arrays[5];
|
|
+ ptr6 = (orc_union32 *) ex->arrays[6];
|
|
+ ptr7 = (orc_union32 *) ex->arrays[7];
|
|
+ ptr8 = (orc_union32 *) ex->arrays[8];
|
|
+ ptr9 = (orc_union32 *) ex->arrays[9];
|
|
+
|
|
+ /* 9: loadpl */
|
|
+ var40.i = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ /* 11: loadpl */
|
|
+ var41.i = 0xffff0000; /* -65536 or 2.12196e-314f */
|
|
+ /* 17: loadpw */
|
|
+ var44.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ var44.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+
|
|
+ for (i = 0; i < n; i++) {
|
|
+ /* 0: loadl */
|
|
+ var35 = ptr5[i];
|
|
+ /* 1: loadl */
|
|
+ var36 = ptr9[i];
|
|
+ /* 2: avguw */
|
|
+ var46.x2[0] =
|
|
+ ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1;
|
|
+ var46.x2[1] =
|
|
+ ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1;
|
|
+ /* 3: loadl */
|
|
+ var37 = ptr4[i];
|
|
+ /* 4: loadl */
|
|
+ var38 = ptr8[i];
|
|
+ /* 5: avguw */
|
|
+ var47.x2[0] =
|
|
+ ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1;
|
|
+ var47.x2[1] =
|
|
+ ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1;
|
|
+ /* 6: loadl */
|
|
+ var39 = ptr7[i];
|
|
+ /* 7: copyl */
|
|
+ var48.i = var39.i;
|
|
+ /* 8: avguw */
|
|
+ var49.x2[0] =
|
|
+ ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1;
|
|
+ var49.x2[1] =
|
|
+ ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1;
|
|
+ /* 10: andl */
|
|
+ var50.i = var49.i & var40.i;
|
|
+ /* 12: andl */
|
|
+ var51.i = var48.i & var41.i;
|
|
+ /* 13: orl */
|
|
+ var52.i = var51.i | var50.i;
|
|
+ /* 14: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var46.x2[0];
|
|
+ _dest.x2[1] = var52.x2[0];
|
|
+ var42.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var46.x2[1];
|
|
+ _dest.x2[1] = var52.x2[1];
|
|
+ var42.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 15: storeq */
|
|
+ ptr0[i] = var42;
|
|
+ /* 16: loadl */
|
|
+ var43 = ptr6[i];
|
|
+ /* 18: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var43.x2[0];
|
|
+ _dest.x2[1] = var44.x2[0];
|
|
+ var45.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var43.x2[1];
|
|
+ _dest.x2[1] = var44.x2[1];
|
|
+ var45.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 19: storeq */
|
|
+ ptr1[i] = var45;
|
|
+ }
|
|
+
|
|
+}
|
|
+
|
|
+void
|
|
+bayer16_orc_merge_bg_rgba (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2,
|
|
+ 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 volatile int p_inited = 0;
|
|
+ static OrcCode *c = 0;
|
|
+ void (*func) (OrcExecutor *);
|
|
+
|
|
+ if (!p_inited) {
|
|
+ orc_once_mutex_lock ();
|
|
+ if (!p_inited) {
|
|
+ OrcProgram *p;
|
|
+
|
|
+#if 1
|
|
+ static const orc_uint8 bc[] = {
|
|
+ 1, 9, 25, 98, 97, 121, 101, 114, 49, 54, 95, 111, 114, 99, 95, 109,
|
|
+ 101, 114, 103, 101, 95, 98, 103, 95, 114, 103, 98, 97, 11, 8, 8, 11,
|
|
+ 8, 8, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4,
|
|
+ 4, 12, 4, 4, 14, 4, 255, 255, 0, 0, 14, 4, 0, 0, 255, 255,
|
|
+ 14, 2, 255, 255, 0, 0, 20, 4, 20, 4, 20, 4, 21, 1, 76, 32,
|
|
+ 5, 9, 21, 1, 76, 33, 4, 8, 112, 34, 7, 21, 1, 76, 33, 33,
|
|
+ 34, 106, 33, 33, 16, 106, 34, 34, 17, 123, 33, 34, 33, 21, 1, 195,
|
|
+ 0, 32, 33, 21, 1, 195, 1, 6, 18, 2, 0,
|
|
+ };
|
|
+ p = orc_program_new_from_static_bytecode (bc);
|
|
+ orc_program_set_backup_function (p, _backup_bayer16_orc_merge_bg_rgba);
|
|
+#else
|
|
+ p = orc_program_new ();
|
|
+ orc_program_set_name (p, "bayer16_orc_merge_bg_rgba");
|
|
+ orc_program_set_backup_function (p, _backup_bayer16_orc_merge_bg_rgba);
|
|
+ orc_program_add_destination (p, 8, "d1");
|
|
+ orc_program_add_destination (p, 8, "d2");
|
|
+ orc_program_add_source (p, 4, "s1");
|
|
+ orc_program_add_source (p, 4, "s2");
|
|
+ orc_program_add_source (p, 4, "s3");
|
|
+ orc_program_add_source (p, 4, "s4");
|
|
+ orc_program_add_source (p, 4, "s5");
|
|
+ orc_program_add_source (p, 4, "s6");
|
|
+ orc_program_add_constant (p, 4, 0x0000ffff, "c1");
|
|
+ orc_program_add_constant (p, 4, 0xffff0000, "c2");
|
|
+ orc_program_add_constant (p, 2, 0x0000ffff, "c3");
|
|
+ orc_program_add_temporary (p, 4, "t1");
|
|
+ orc_program_add_temporary (p, 4, "t2");
|
|
+ orc_program_add_temporary (p, 4, "t3");
|
|
+
|
|
+ orc_program_append_2 (p, "avguw", 1, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S6,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_S5,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "copyl", 0, ORC_VAR_T3, ORC_VAR_S4, ORC_VAR_D1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "orl", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T2,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D2, ORC_VAR_S3, ORC_VAR_C3,
|
|
+ ORC_VAR_D1);
|
|
+#endif
|
|
+
|
|
+ orc_program_compile (p);
|
|
+ c = orc_program_take_code (p);
|
|
+ orc_program_free (p);
|
|
+ }
|
|
+ p_inited = TRUE;
|
|
+ orc_once_mutex_unlock ();
|
|
+ }
|
|
+ ex->arrays[ORC_VAR_A2] = c;
|
|
+ ex->program = 0;
|
|
+
|
|
+ ex->n = n;
|
|
+ ex->arrays[ORC_VAR_D1] = d1;
|
|
+ ex->arrays[ORC_VAR_D2] = d2;
|
|
+ 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 = c->exec;
|
|
+ func (ex);
|
|
+}
|
|
+#endif
|
|
+
|
|
+
|
|
+/* bayer16_orc_merge_gr_rgba */
|
|
+#ifdef DISABLE_ORC
|
|
+void
|
|
+bayer16_orc_merge_gr_rgba (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2,
|
|
+ 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;
|
|
+ orc_union64 *ORC_RESTRICT ptr1;
|
|
+ const orc_union32 *ORC_RESTRICT ptr4;
|
|
+ const orc_union32 *ORC_RESTRICT ptr5;
|
|
+ const orc_union32 *ORC_RESTRICT ptr6;
|
|
+ const orc_union32 *ORC_RESTRICT ptr7;
|
|
+ const orc_union32 *ORC_RESTRICT ptr8;
|
|
+ const orc_union32 *ORC_RESTRICT ptr9;
|
|
+ orc_union32 var35;
|
|
+ orc_union32 var36;
|
|
+ orc_union32 var37;
|
|
+ orc_union32 var38;
|
|
+ orc_union32 var39;
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var40;
|
|
+#else
|
|
+ orc_union32 var40;
|
|
+#endif
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var41;
|
|
+#else
|
|
+ orc_union32 var41;
|
|
+#endif
|
|
+ orc_union32 var42;
|
|
+ orc_union64 var43;
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var44;
|
|
+#else
|
|
+ orc_union32 var44;
|
|
+#endif
|
|
+ orc_union64 var45;
|
|
+ orc_union32 var46;
|
|
+ orc_union32 var47;
|
|
+ orc_union32 var48;
|
|
+ orc_union32 var49;
|
|
+ orc_union32 var50;
|
|
+ orc_union32 var51;
|
|
+ orc_union32 var52;
|
|
+
|
|
+ ptr0 = (orc_union64 *) d1;
|
|
+ ptr1 = (orc_union64 *) d2;
|
|
+ ptr4 = (orc_union32 *) s1;
|
|
+ ptr5 = (orc_union32 *) s2;
|
|
+ ptr6 = (orc_union32 *) s3;
|
|
+ ptr7 = (orc_union32 *) s4;
|
|
+ ptr8 = (orc_union32 *) s5;
|
|
+ ptr9 = (orc_union32 *) s6;
|
|
+
|
|
+ /* 9: loadpl */
|
|
+ var40.i = 0xffff0000; /* -65536 or 2.12196e-314f */
|
|
+ /* 11: loadpl */
|
|
+ var41.i = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ /* 17: loadpw */
|
|
+ var44.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ var44.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+
|
|
+ for (i = 0; i < n; i++) {
|
|
+ /* 0: loadl */
|
|
+ var35 = ptr4[i];
|
|
+ /* 1: loadl */
|
|
+ var36 = ptr8[i];
|
|
+ /* 2: avguw */
|
|
+ var46.x2[0] =
|
|
+ ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1;
|
|
+ var46.x2[1] =
|
|
+ ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1;
|
|
+ /* 3: loadl */
|
|
+ var37 = ptr5[i];
|
|
+ /* 4: loadl */
|
|
+ var38 = ptr9[i];
|
|
+ /* 5: avguw */
|
|
+ var47.x2[0] =
|
|
+ ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1;
|
|
+ var47.x2[1] =
|
|
+ ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1;
|
|
+ /* 6: loadl */
|
|
+ var39 = ptr6[i];
|
|
+ /* 7: copyl */
|
|
+ var48.i = var39.i;
|
|
+ /* 8: avguw */
|
|
+ var49.x2[0] =
|
|
+ ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1;
|
|
+ var49.x2[1] =
|
|
+ ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1;
|
|
+ /* 10: andl */
|
|
+ var50.i = var49.i & var40.i;
|
|
+ /* 12: andl */
|
|
+ var51.i = var48.i & var41.i;
|
|
+ /* 13: orl */
|
|
+ var52.i = var51.i | var50.i;
|
|
+ /* 14: loadl */
|
|
+ var42 = ptr7[i];
|
|
+ /* 15: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var42.x2[0];
|
|
+ _dest.x2[1] = var52.x2[0];
|
|
+ var43.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var42.x2[1];
|
|
+ _dest.x2[1] = var52.x2[1];
|
|
+ var43.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 16: storeq */
|
|
+ ptr0[i] = var43;
|
|
+ /* 18: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var46.x2[0];
|
|
+ _dest.x2[1] = var44.x2[0];
|
|
+ var45.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var46.x2[1];
|
|
+ _dest.x2[1] = var44.x2[1];
|
|
+ var45.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 19: storeq */
|
|
+ ptr1[i] = var45;
|
|
+ }
|
|
+
|
|
+}
|
|
+
|
|
+#else
|
|
+static void
|
|
+_backup_bayer16_orc_merge_gr_rgba (OrcExecutor * ORC_RESTRICT ex)
|
|
+{
|
|
+ int i;
|
|
+ int n = ex->n;
|
|
+ orc_union64 *ORC_RESTRICT ptr0;
|
|
+ orc_union64 *ORC_RESTRICT ptr1;
|
|
+ const orc_union32 *ORC_RESTRICT ptr4;
|
|
+ const orc_union32 *ORC_RESTRICT ptr5;
|
|
+ const orc_union32 *ORC_RESTRICT ptr6;
|
|
+ const orc_union32 *ORC_RESTRICT ptr7;
|
|
+ const orc_union32 *ORC_RESTRICT ptr8;
|
|
+ const orc_union32 *ORC_RESTRICT ptr9;
|
|
+ orc_union32 var35;
|
|
+ orc_union32 var36;
|
|
+ orc_union32 var37;
|
|
+ orc_union32 var38;
|
|
+ orc_union32 var39;
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var40;
|
|
+#else
|
|
+ orc_union32 var40;
|
|
+#endif
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var41;
|
|
+#else
|
|
+ orc_union32 var41;
|
|
+#endif
|
|
+ orc_union32 var42;
|
|
+ orc_union64 var43;
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var44;
|
|
+#else
|
|
+ orc_union32 var44;
|
|
+#endif
|
|
+ orc_union64 var45;
|
|
+ orc_union32 var46;
|
|
+ orc_union32 var47;
|
|
+ orc_union32 var48;
|
|
+ orc_union32 var49;
|
|
+ orc_union32 var50;
|
|
+ orc_union32 var51;
|
|
+ orc_union32 var52;
|
|
+
|
|
+ ptr0 = (orc_union64 *) ex->arrays[0];
|
|
+ ptr1 = (orc_union64 *) ex->arrays[1];
|
|
+ ptr4 = (orc_union32 *) ex->arrays[4];
|
|
+ ptr5 = (orc_union32 *) ex->arrays[5];
|
|
+ ptr6 = (orc_union32 *) ex->arrays[6];
|
|
+ ptr7 = (orc_union32 *) ex->arrays[7];
|
|
+ ptr8 = (orc_union32 *) ex->arrays[8];
|
|
+ ptr9 = (orc_union32 *) ex->arrays[9];
|
|
+
|
|
+ /* 9: loadpl */
|
|
+ var40.i = 0xffff0000; /* -65536 or 2.12196e-314f */
|
|
+ /* 11: loadpl */
|
|
+ var41.i = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ /* 17: loadpw */
|
|
+ var44.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ var44.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+
|
|
+ for (i = 0; i < n; i++) {
|
|
+ /* 0: loadl */
|
|
+ var35 = ptr4[i];
|
|
+ /* 1: loadl */
|
|
+ var36 = ptr8[i];
|
|
+ /* 2: avguw */
|
|
+ var46.x2[0] =
|
|
+ ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1;
|
|
+ var46.x2[1] =
|
|
+ ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1;
|
|
+ /* 3: loadl */
|
|
+ var37 = ptr5[i];
|
|
+ /* 4: loadl */
|
|
+ var38 = ptr9[i];
|
|
+ /* 5: avguw */
|
|
+ var47.x2[0] =
|
|
+ ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1;
|
|
+ var47.x2[1] =
|
|
+ ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1;
|
|
+ /* 6: loadl */
|
|
+ var39 = ptr6[i];
|
|
+ /* 7: copyl */
|
|
+ var48.i = var39.i;
|
|
+ /* 8: avguw */
|
|
+ var49.x2[0] =
|
|
+ ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1;
|
|
+ var49.x2[1] =
|
|
+ ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1;
|
|
+ /* 10: andl */
|
|
+ var50.i = var49.i & var40.i;
|
|
+ /* 12: andl */
|
|
+ var51.i = var48.i & var41.i;
|
|
+ /* 13: orl */
|
|
+ var52.i = var51.i | var50.i;
|
|
+ /* 14: loadl */
|
|
+ var42 = ptr7[i];
|
|
+ /* 15: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var42.x2[0];
|
|
+ _dest.x2[1] = var52.x2[0];
|
|
+ var43.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var42.x2[1];
|
|
+ _dest.x2[1] = var52.x2[1];
|
|
+ var43.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 16: storeq */
|
|
+ ptr0[i] = var43;
|
|
+ /* 18: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var46.x2[0];
|
|
+ _dest.x2[1] = var44.x2[0];
|
|
+ var45.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var46.x2[1];
|
|
+ _dest.x2[1] = var44.x2[1];
|
|
+ var45.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 19: storeq */
|
|
+ ptr1[i] = var45;
|
|
+ }
|
|
+
|
|
+}
|
|
+
|
|
+void
|
|
+bayer16_orc_merge_gr_rgba (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2,
|
|
+ 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 volatile int p_inited = 0;
|
|
+ static OrcCode *c = 0;
|
|
+ void (*func) (OrcExecutor *);
|
|
+
|
|
+ if (!p_inited) {
|
|
+ orc_once_mutex_lock ();
|
|
+ if (!p_inited) {
|
|
+ OrcProgram *p;
|
|
+
|
|
+#if 1
|
|
+ static const orc_uint8 bc[] = {
|
|
+ 1, 9, 25, 98, 97, 121, 101, 114, 49, 54, 95, 111, 114, 99, 95, 109,
|
|
+ 101, 114, 103, 101, 95, 103, 114, 95, 114, 103, 98, 97, 11, 8, 8, 11,
|
|
+ 8, 8, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4,
|
|
+ 4, 12, 4, 4, 14, 4, 0, 0, 255, 255, 14, 4, 255, 255, 0, 0,
|
|
+ 14, 2, 255, 255, 0, 0, 20, 4, 20, 4, 20, 4, 21, 1, 76, 32,
|
|
+ 4, 8, 21, 1, 76, 33, 5, 9, 112, 34, 6, 21, 1, 76, 33, 33,
|
|
+ 34, 106, 33, 33, 16, 106, 34, 34, 17, 123, 33, 34, 33, 21, 1, 195,
|
|
+ 0, 7, 33, 21, 1, 195, 1, 32, 18, 2, 0,
|
|
+ };
|
|
+ p = orc_program_new_from_static_bytecode (bc);
|
|
+ orc_program_set_backup_function (p, _backup_bayer16_orc_merge_gr_rgba);
|
|
+#else
|
|
+ p = orc_program_new ();
|
|
+ orc_program_set_name (p, "bayer16_orc_merge_gr_rgba");
|
|
+ orc_program_set_backup_function (p, _backup_bayer16_orc_merge_gr_rgba);
|
|
+ orc_program_add_destination (p, 8, "d1");
|
|
+ orc_program_add_destination (p, 8, "d2");
|
|
+ orc_program_add_source (p, 4, "s1");
|
|
+ orc_program_add_source (p, 4, "s2");
|
|
+ orc_program_add_source (p, 4, "s3");
|
|
+ orc_program_add_source (p, 4, "s4");
|
|
+ orc_program_add_source (p, 4, "s5");
|
|
+ orc_program_add_source (p, 4, "s6");
|
|
+ orc_program_add_constant (p, 4, 0xffff0000, "c1");
|
|
+ orc_program_add_constant (p, 4, 0x0000ffff, "c2");
|
|
+ orc_program_add_constant (p, 2, 0x0000ffff, "c3");
|
|
+ orc_program_add_temporary (p, 4, "t1");
|
|
+ orc_program_add_temporary (p, 4, "t2");
|
|
+ orc_program_add_temporary (p, 4, "t3");
|
|
+
|
|
+ orc_program_append_2 (p, "avguw", 1, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_S5,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_S6,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "copyl", 0, ORC_VAR_T3, ORC_VAR_S3, ORC_VAR_D1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "orl", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T2,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_S4, ORC_VAR_T2,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D2, ORC_VAR_T1, ORC_VAR_C3,
|
|
+ ORC_VAR_D1);
|
|
+#endif
|
|
+
|
|
+ orc_program_compile (p);
|
|
+ c = orc_program_take_code (p);
|
|
+ orc_program_free (p);
|
|
+ }
|
|
+ p_inited = TRUE;
|
|
+ orc_once_mutex_unlock ();
|
|
+ }
|
|
+ ex->arrays[ORC_VAR_A2] = c;
|
|
+ ex->program = 0;
|
|
+
|
|
+ ex->n = n;
|
|
+ ex->arrays[ORC_VAR_D1] = d1;
|
|
+ ex->arrays[ORC_VAR_D2] = d2;
|
|
+ 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 = c->exec;
|
|
+ func (ex);
|
|
+}
|
|
+#endif
|
|
+
|
|
+
|
|
+/* bayer16_orc_merge_bg_argb */
|
|
+#ifdef DISABLE_ORC
|
|
+void
|
|
+bayer16_orc_merge_bg_argb (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2,
|
|
+ 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;
|
|
+ orc_union64 *ORC_RESTRICT ptr1;
|
|
+ const orc_union32 *ORC_RESTRICT ptr4;
|
|
+ const orc_union32 *ORC_RESTRICT ptr5;
|
|
+ const orc_union32 *ORC_RESTRICT ptr6;
|
|
+ const orc_union32 *ORC_RESTRICT ptr7;
|
|
+ const orc_union32 *ORC_RESTRICT ptr8;
|
|
+ const orc_union32 *ORC_RESTRICT ptr9;
|
|
+ orc_union32 var35;
|
|
+ orc_union32 var36;
|
|
+ orc_union32 var37;
|
|
+ orc_union32 var38;
|
|
+ orc_union32 var39;
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var40;
|
|
+#else
|
|
+ orc_union32 var40;
|
|
+#endif
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var41;
|
|
+#else
|
|
+ orc_union32 var41;
|
|
+#endif
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var42;
|
|
+#else
|
|
+ orc_union32 var42;
|
|
+#endif
|
|
+ orc_union64 var43;
|
|
+ orc_union32 var44;
|
|
+ orc_union64 var45;
|
|
+ orc_union32 var46;
|
|
+ orc_union32 var47;
|
|
+ orc_union32 var48;
|
|
+ orc_union32 var49;
|
|
+ orc_union32 var50;
|
|
+ orc_union32 var51;
|
|
+ orc_union32 var52;
|
|
+
|
|
+ ptr0 = (orc_union64 *) d1;
|
|
+ ptr1 = (orc_union64 *) d2;
|
|
+ ptr4 = (orc_union32 *) s1;
|
|
+ ptr5 = (orc_union32 *) s2;
|
|
+ ptr6 = (orc_union32 *) s3;
|
|
+ ptr7 = (orc_union32 *) s4;
|
|
+ ptr8 = (orc_union32 *) s5;
|
|
+ ptr9 = (orc_union32 *) s6;
|
|
+
|
|
+ /* 9: loadpl */
|
|
+ var40.i = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ /* 11: loadpl */
|
|
+ var41.i = 0xffff0000; /* -65536 or 2.12196e-314f */
|
|
+ /* 14: loadpw */
|
|
+ var42.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ var42.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+
|
|
+ for (i = 0; i < n; i++) {
|
|
+ /* 0: loadl */
|
|
+ var35 = ptr5[i];
|
|
+ /* 1: loadl */
|
|
+ var36 = ptr9[i];
|
|
+ /* 2: avguw */
|
|
+ var46.x2[0] =
|
|
+ ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1;
|
|
+ var46.x2[1] =
|
|
+ ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1;
|
|
+ /* 3: loadl */
|
|
+ var37 = ptr4[i];
|
|
+ /* 4: loadl */
|
|
+ var38 = ptr8[i];
|
|
+ /* 5: avguw */
|
|
+ var47.x2[0] =
|
|
+ ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1;
|
|
+ var47.x2[1] =
|
|
+ ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1;
|
|
+ /* 6: loadl */
|
|
+ var39 = ptr7[i];
|
|
+ /* 7: copyl */
|
|
+ var48.i = var39.i;
|
|
+ /* 8: avguw */
|
|
+ var49.x2[0] =
|
|
+ ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1;
|
|
+ var49.x2[1] =
|
|
+ ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1;
|
|
+ /* 10: andl */
|
|
+ var50.i = var49.i & var40.i;
|
|
+ /* 12: andl */
|
|
+ var51.i = var48.i & var41.i;
|
|
+ /* 13: orl */
|
|
+ var52.i = var51.i | var50.i;
|
|
+ /* 15: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var42.x2[0];
|
|
+ _dest.x2[1] = var46.x2[0];
|
|
+ var43.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var42.x2[1];
|
|
+ _dest.x2[1] = var46.x2[1];
|
|
+ var43.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 16: storeq */
|
|
+ ptr0[i] = var43;
|
|
+ /* 17: loadl */
|
|
+ var44 = ptr6[i];
|
|
+ /* 18: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var52.x2[0];
|
|
+ _dest.x2[1] = var44.x2[0];
|
|
+ var45.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var52.x2[1];
|
|
+ _dest.x2[1] = var44.x2[1];
|
|
+ var45.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 19: storeq */
|
|
+ ptr1[i] = var45;
|
|
+ }
|
|
+
|
|
+}
|
|
+
|
|
+#else
|
|
+static void
|
|
+_backup_bayer16_orc_merge_bg_argb (OrcExecutor * ORC_RESTRICT ex)
|
|
+{
|
|
+ int i;
|
|
+ int n = ex->n;
|
|
+ orc_union64 *ORC_RESTRICT ptr0;
|
|
+ orc_union64 *ORC_RESTRICT ptr1;
|
|
+ const orc_union32 *ORC_RESTRICT ptr4;
|
|
+ const orc_union32 *ORC_RESTRICT ptr5;
|
|
+ const orc_union32 *ORC_RESTRICT ptr6;
|
|
+ const orc_union32 *ORC_RESTRICT ptr7;
|
|
+ const orc_union32 *ORC_RESTRICT ptr8;
|
|
+ const orc_union32 *ORC_RESTRICT ptr9;
|
|
+ orc_union32 var35;
|
|
+ orc_union32 var36;
|
|
+ orc_union32 var37;
|
|
+ orc_union32 var38;
|
|
+ orc_union32 var39;
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var40;
|
|
+#else
|
|
+ orc_union32 var40;
|
|
+#endif
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var41;
|
|
+#else
|
|
+ orc_union32 var41;
|
|
+#endif
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var42;
|
|
+#else
|
|
+ orc_union32 var42;
|
|
+#endif
|
|
+ orc_union64 var43;
|
|
+ orc_union32 var44;
|
|
+ orc_union64 var45;
|
|
+ orc_union32 var46;
|
|
+ orc_union32 var47;
|
|
+ orc_union32 var48;
|
|
+ orc_union32 var49;
|
|
+ orc_union32 var50;
|
|
+ orc_union32 var51;
|
|
+ orc_union32 var52;
|
|
+
|
|
+ ptr0 = (orc_union64 *) ex->arrays[0];
|
|
+ ptr1 = (orc_union64 *) ex->arrays[1];
|
|
+ ptr4 = (orc_union32 *) ex->arrays[4];
|
|
+ ptr5 = (orc_union32 *) ex->arrays[5];
|
|
+ ptr6 = (orc_union32 *) ex->arrays[6];
|
|
+ ptr7 = (orc_union32 *) ex->arrays[7];
|
|
+ ptr8 = (orc_union32 *) ex->arrays[8];
|
|
+ ptr9 = (orc_union32 *) ex->arrays[9];
|
|
+
|
|
+ /* 9: loadpl */
|
|
+ var40.i = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ /* 11: loadpl */
|
|
+ var41.i = 0xffff0000; /* -65536 or 2.12196e-314f */
|
|
+ /* 14: loadpw */
|
|
+ var42.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ var42.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+
|
|
+ for (i = 0; i < n; i++) {
|
|
+ /* 0: loadl */
|
|
+ var35 = ptr5[i];
|
|
+ /* 1: loadl */
|
|
+ var36 = ptr9[i];
|
|
+ /* 2: avguw */
|
|
+ var46.x2[0] =
|
|
+ ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1;
|
|
+ var46.x2[1] =
|
|
+ ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1;
|
|
+ /* 3: loadl */
|
|
+ var37 = ptr4[i];
|
|
+ /* 4: loadl */
|
|
+ var38 = ptr8[i];
|
|
+ /* 5: avguw */
|
|
+ var47.x2[0] =
|
|
+ ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1;
|
|
+ var47.x2[1] =
|
|
+ ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1;
|
|
+ /* 6: loadl */
|
|
+ var39 = ptr7[i];
|
|
+ /* 7: copyl */
|
|
+ var48.i = var39.i;
|
|
+ /* 8: avguw */
|
|
+ var49.x2[0] =
|
|
+ ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1;
|
|
+ var49.x2[1] =
|
|
+ ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1;
|
|
+ /* 10: andl */
|
|
+ var50.i = var49.i & var40.i;
|
|
+ /* 12: andl */
|
|
+ var51.i = var48.i & var41.i;
|
|
+ /* 13: orl */
|
|
+ var52.i = var51.i | var50.i;
|
|
+ /* 15: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var42.x2[0];
|
|
+ _dest.x2[1] = var46.x2[0];
|
|
+ var43.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var42.x2[1];
|
|
+ _dest.x2[1] = var46.x2[1];
|
|
+ var43.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 16: storeq */
|
|
+ ptr0[i] = var43;
|
|
+ /* 17: loadl */
|
|
+ var44 = ptr6[i];
|
|
+ /* 18: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var52.x2[0];
|
|
+ _dest.x2[1] = var44.x2[0];
|
|
+ var45.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var52.x2[1];
|
|
+ _dest.x2[1] = var44.x2[1];
|
|
+ var45.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 19: storeq */
|
|
+ ptr1[i] = var45;
|
|
+ }
|
|
+
|
|
+}
|
|
+
|
|
+void
|
|
+bayer16_orc_merge_bg_argb (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2,
|
|
+ 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 volatile int p_inited = 0;
|
|
+ static OrcCode *c = 0;
|
|
+ void (*func) (OrcExecutor *);
|
|
+
|
|
+ if (!p_inited) {
|
|
+ orc_once_mutex_lock ();
|
|
+ if (!p_inited) {
|
|
+ OrcProgram *p;
|
|
+
|
|
+#if 1
|
|
+ static const orc_uint8 bc[] = {
|
|
+ 1, 9, 25, 98, 97, 121, 101, 114, 49, 54, 95, 111, 114, 99, 95, 109,
|
|
+ 101, 114, 103, 101, 95, 98, 103, 95, 97, 114, 103, 98, 11, 8, 8, 11,
|
|
+ 8, 8, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4,
|
|
+ 4, 12, 4, 4, 14, 4, 255, 255, 0, 0, 14, 4, 0, 0, 255, 255,
|
|
+ 14, 2, 255, 255, 0, 0, 20, 4, 20, 4, 20, 4, 21, 1, 76, 32,
|
|
+ 5, 9, 21, 1, 76, 33, 4, 8, 112, 34, 7, 21, 1, 76, 33, 33,
|
|
+ 34, 106, 33, 33, 16, 106, 34, 34, 17, 123, 33, 34, 33, 21, 1, 195,
|
|
+ 0, 18, 32, 21, 1, 195, 1, 33, 6, 2, 0,
|
|
+ };
|
|
+ p = orc_program_new_from_static_bytecode (bc);
|
|
+ orc_program_set_backup_function (p, _backup_bayer16_orc_merge_bg_argb);
|
|
+#else
|
|
+ p = orc_program_new ();
|
|
+ orc_program_set_name (p, "bayer16_orc_merge_bg_argb");
|
|
+ orc_program_set_backup_function (p, _backup_bayer16_orc_merge_bg_argb);
|
|
+ orc_program_add_destination (p, 8, "d1");
|
|
+ orc_program_add_destination (p, 8, "d2");
|
|
+ orc_program_add_source (p, 4, "s1");
|
|
+ orc_program_add_source (p, 4, "s2");
|
|
+ orc_program_add_source (p, 4, "s3");
|
|
+ orc_program_add_source (p, 4, "s4");
|
|
+ orc_program_add_source (p, 4, "s5");
|
|
+ orc_program_add_source (p, 4, "s6");
|
|
+ orc_program_add_constant (p, 4, 0x0000ffff, "c1");
|
|
+ orc_program_add_constant (p, 4, 0xffff0000, "c2");
|
|
+ orc_program_add_constant (p, 2, 0x0000ffff, "c3");
|
|
+ orc_program_add_temporary (p, 4, "t1");
|
|
+ orc_program_add_temporary (p, 4, "t2");
|
|
+ orc_program_add_temporary (p, 4, "t3");
|
|
+
|
|
+ orc_program_append_2 (p, "avguw", 1, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S6,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_S5,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "copyl", 0, ORC_VAR_T3, ORC_VAR_S4, ORC_VAR_D1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "orl", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T2,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_C3, ORC_VAR_T1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_S3,
|
|
+ ORC_VAR_D1);
|
|
+#endif
|
|
+
|
|
+ orc_program_compile (p);
|
|
+ c = orc_program_take_code (p);
|
|
+ orc_program_free (p);
|
|
+ }
|
|
+ p_inited = TRUE;
|
|
+ orc_once_mutex_unlock ();
|
|
+ }
|
|
+ ex->arrays[ORC_VAR_A2] = c;
|
|
+ ex->program = 0;
|
|
+
|
|
+ ex->n = n;
|
|
+ ex->arrays[ORC_VAR_D1] = d1;
|
|
+ ex->arrays[ORC_VAR_D2] = d2;
|
|
+ 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 = c->exec;
|
|
+ func (ex);
|
|
+}
|
|
+#endif
|
|
+
|
|
+
|
|
+/* bayer16_orc_merge_gr_argb */
|
|
+#ifdef DISABLE_ORC
|
|
+void
|
|
+bayer16_orc_merge_gr_argb (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2,
|
|
+ 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;
|
|
+ orc_union64 *ORC_RESTRICT ptr1;
|
|
+ const orc_union32 *ORC_RESTRICT ptr4;
|
|
+ const orc_union32 *ORC_RESTRICT ptr5;
|
|
+ const orc_union32 *ORC_RESTRICT ptr6;
|
|
+ const orc_union32 *ORC_RESTRICT ptr7;
|
|
+ const orc_union32 *ORC_RESTRICT ptr8;
|
|
+ const orc_union32 *ORC_RESTRICT ptr9;
|
|
+ orc_union32 var35;
|
|
+ orc_union32 var36;
|
|
+ orc_union32 var37;
|
|
+ orc_union32 var38;
|
|
+ orc_union32 var39;
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var40;
|
|
+#else
|
|
+ orc_union32 var40;
|
|
+#endif
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var41;
|
|
+#else
|
|
+ orc_union32 var41;
|
|
+#endif
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var42;
|
|
+#else
|
|
+ orc_union32 var42;
|
|
+#endif
|
|
+ orc_union32 var43;
|
|
+ orc_union64 var44;
|
|
+ orc_union64 var45;
|
|
+ orc_union32 var46;
|
|
+ orc_union32 var47;
|
|
+ orc_union32 var48;
|
|
+ orc_union32 var49;
|
|
+ orc_union32 var50;
|
|
+ orc_union32 var51;
|
|
+ orc_union32 var52;
|
|
+
|
|
+ ptr0 = (orc_union64 *) d1;
|
|
+ ptr1 = (orc_union64 *) d2;
|
|
+ ptr4 = (orc_union32 *) s1;
|
|
+ ptr5 = (orc_union32 *) s2;
|
|
+ ptr6 = (orc_union32 *) s3;
|
|
+ ptr7 = (orc_union32 *) s4;
|
|
+ ptr8 = (orc_union32 *) s5;
|
|
+ ptr9 = (orc_union32 *) s6;
|
|
+
|
|
+ /* 9: loadpl */
|
|
+ var40.i = 0xffff0000; /* -65536 or 2.12196e-314f */
|
|
+ /* 11: loadpl */
|
|
+ var41.i = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ /* 14: loadpw */
|
|
+ var42.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ var42.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+
|
|
+ for (i = 0; i < n; i++) {
|
|
+ /* 0: loadl */
|
|
+ var35 = ptr4[i];
|
|
+ /* 1: loadl */
|
|
+ var36 = ptr8[i];
|
|
+ /* 2: avguw */
|
|
+ var46.x2[0] =
|
|
+ ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1;
|
|
+ var46.x2[1] =
|
|
+ ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1;
|
|
+ /* 3: loadl */
|
|
+ var37 = ptr5[i];
|
|
+ /* 4: loadl */
|
|
+ var38 = ptr9[i];
|
|
+ /* 5: avguw */
|
|
+ var47.x2[0] =
|
|
+ ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1;
|
|
+ var47.x2[1] =
|
|
+ ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1;
|
|
+ /* 6: loadl */
|
|
+ var39 = ptr6[i];
|
|
+ /* 7: copyl */
|
|
+ var48.i = var39.i;
|
|
+ /* 8: avguw */
|
|
+ var49.x2[0] =
|
|
+ ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1;
|
|
+ var49.x2[1] =
|
|
+ ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1;
|
|
+ /* 10: andl */
|
|
+ var50.i = var49.i & var40.i;
|
|
+ /* 12: andl */
|
|
+ var51.i = var48.i & var41.i;
|
|
+ /* 13: orl */
|
|
+ var52.i = var51.i | var50.i;
|
|
+ /* 15: loadl */
|
|
+ var43 = ptr7[i];
|
|
+ /* 16: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var42.x2[0];
|
|
+ _dest.x2[1] = var43.x2[0];
|
|
+ var44.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var42.x2[1];
|
|
+ _dest.x2[1] = var43.x2[1];
|
|
+ var44.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 17: storeq */
|
|
+ ptr0[i] = var44;
|
|
+ /* 18: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var52.x2[0];
|
|
+ _dest.x2[1] = var46.x2[0];
|
|
+ var45.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var52.x2[1];
|
|
+ _dest.x2[1] = var46.x2[1];
|
|
+ var45.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 19: storeq */
|
|
+ ptr1[i] = var45;
|
|
+ }
|
|
+
|
|
+}
|
|
+
|
|
+#else
|
|
+static void
|
|
+_backup_bayer16_orc_merge_gr_argb (OrcExecutor * ORC_RESTRICT ex)
|
|
+{
|
|
+ int i;
|
|
+ int n = ex->n;
|
|
+ orc_union64 *ORC_RESTRICT ptr0;
|
|
+ orc_union64 *ORC_RESTRICT ptr1;
|
|
+ const orc_union32 *ORC_RESTRICT ptr4;
|
|
+ const orc_union32 *ORC_RESTRICT ptr5;
|
|
+ const orc_union32 *ORC_RESTRICT ptr6;
|
|
+ const orc_union32 *ORC_RESTRICT ptr7;
|
|
+ const orc_union32 *ORC_RESTRICT ptr8;
|
|
+ const orc_union32 *ORC_RESTRICT ptr9;
|
|
+ orc_union32 var35;
|
|
+ orc_union32 var36;
|
|
+ orc_union32 var37;
|
|
+ orc_union32 var38;
|
|
+ orc_union32 var39;
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var40;
|
|
+#else
|
|
+ orc_union32 var40;
|
|
+#endif
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var41;
|
|
+#else
|
|
+ orc_union32 var41;
|
|
+#endif
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var42;
|
|
+#else
|
|
+ orc_union32 var42;
|
|
+#endif
|
|
+ orc_union32 var43;
|
|
+ orc_union64 var44;
|
|
+ orc_union64 var45;
|
|
+ orc_union32 var46;
|
|
+ orc_union32 var47;
|
|
+ orc_union32 var48;
|
|
+ orc_union32 var49;
|
|
+ orc_union32 var50;
|
|
+ orc_union32 var51;
|
|
+ orc_union32 var52;
|
|
+
|
|
+ ptr0 = (orc_union64 *) ex->arrays[0];
|
|
+ ptr1 = (orc_union64 *) ex->arrays[1];
|
|
+ ptr4 = (orc_union32 *) ex->arrays[4];
|
|
+ ptr5 = (orc_union32 *) ex->arrays[5];
|
|
+ ptr6 = (orc_union32 *) ex->arrays[6];
|
|
+ ptr7 = (orc_union32 *) ex->arrays[7];
|
|
+ ptr8 = (orc_union32 *) ex->arrays[8];
|
|
+ ptr9 = (orc_union32 *) ex->arrays[9];
|
|
+
|
|
+ /* 9: loadpl */
|
|
+ var40.i = 0xffff0000; /* -65536 or 2.12196e-314f */
|
|
+ /* 11: loadpl */
|
|
+ var41.i = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ /* 14: loadpw */
|
|
+ var42.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ var42.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+
|
|
+ for (i = 0; i < n; i++) {
|
|
+ /* 0: loadl */
|
|
+ var35 = ptr4[i];
|
|
+ /* 1: loadl */
|
|
+ var36 = ptr8[i];
|
|
+ /* 2: avguw */
|
|
+ var46.x2[0] =
|
|
+ ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1;
|
|
+ var46.x2[1] =
|
|
+ ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1;
|
|
+ /* 3: loadl */
|
|
+ var37 = ptr5[i];
|
|
+ /* 4: loadl */
|
|
+ var38 = ptr9[i];
|
|
+ /* 5: avguw */
|
|
+ var47.x2[0] =
|
|
+ ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1;
|
|
+ var47.x2[1] =
|
|
+ ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1;
|
|
+ /* 6: loadl */
|
|
+ var39 = ptr6[i];
|
|
+ /* 7: copyl */
|
|
+ var48.i = var39.i;
|
|
+ /* 8: avguw */
|
|
+ var49.x2[0] =
|
|
+ ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1;
|
|
+ var49.x2[1] =
|
|
+ ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1;
|
|
+ /* 10: andl */
|
|
+ var50.i = var49.i & var40.i;
|
|
+ /* 12: andl */
|
|
+ var51.i = var48.i & var41.i;
|
|
+ /* 13: orl */
|
|
+ var52.i = var51.i | var50.i;
|
|
+ /* 15: loadl */
|
|
+ var43 = ptr7[i];
|
|
+ /* 16: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var42.x2[0];
|
|
+ _dest.x2[1] = var43.x2[0];
|
|
+ var44.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var42.x2[1];
|
|
+ _dest.x2[1] = var43.x2[1];
|
|
+ var44.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 17: storeq */
|
|
+ ptr0[i] = var44;
|
|
+ /* 18: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var52.x2[0];
|
|
+ _dest.x2[1] = var46.x2[0];
|
|
+ var45.x2[0] = _dest.i;
|
|
+ }
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var52.x2[1];
|
|
+ _dest.x2[1] = var46.x2[1];
|
|
+ var45.x2[1] = _dest.i;
|
|
+ }
|
|
+ /* 19: storeq */
|
|
+ ptr1[i] = var45;
|
|
+ }
|
|
+
|
|
+}
|
|
+
|
|
+void
|
|
+bayer16_orc_merge_gr_argb (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2,
|
|
+ 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 volatile int p_inited = 0;
|
|
+ static OrcCode *c = 0;
|
|
+ void (*func) (OrcExecutor *);
|
|
+
|
|
+ if (!p_inited) {
|
|
+ orc_once_mutex_lock ();
|
|
+ if (!p_inited) {
|
|
+ OrcProgram *p;
|
|
+
|
|
+#if 1
|
|
+ static const orc_uint8 bc[] = {
|
|
+ 1, 9, 25, 98, 97, 121, 101, 114, 49, 54, 95, 111, 114, 99, 95, 109,
|
|
+ 101, 114, 103, 101, 95, 103, 114, 95, 97, 114, 103, 98, 11, 8, 8, 11,
|
|
+ 8, 8, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4,
|
|
+ 4, 12, 4, 4, 14, 4, 0, 0, 255, 255, 14, 4, 255, 255, 0, 0,
|
|
+ 14, 2, 255, 255, 0, 0, 20, 4, 20, 4, 20, 4, 21, 1, 76, 32,
|
|
+ 4, 8, 21, 1, 76, 33, 5, 9, 112, 34, 6, 21, 1, 76, 33, 33,
|
|
+ 34, 106, 33, 33, 16, 106, 34, 34, 17, 123, 33, 34, 33, 21, 1, 195,
|
|
+ 0, 18, 7, 21, 1, 195, 1, 33, 32, 2, 0,
|
|
+ };
|
|
+ p = orc_program_new_from_static_bytecode (bc);
|
|
+ orc_program_set_backup_function (p, _backup_bayer16_orc_merge_gr_argb);
|
|
+#else
|
|
+ p = orc_program_new ();
|
|
+ orc_program_set_name (p, "bayer16_orc_merge_gr_argb");
|
|
+ orc_program_set_backup_function (p, _backup_bayer16_orc_merge_gr_argb);
|
|
+ orc_program_add_destination (p, 8, "d1");
|
|
+ orc_program_add_destination (p, 8, "d2");
|
|
+ orc_program_add_source (p, 4, "s1");
|
|
+ orc_program_add_source (p, 4, "s2");
|
|
+ orc_program_add_source (p, 4, "s3");
|
|
+ orc_program_add_source (p, 4, "s4");
|
|
+ orc_program_add_source (p, 4, "s5");
|
|
+ orc_program_add_source (p, 4, "s6");
|
|
+ orc_program_add_constant (p, 4, 0xffff0000, "c1");
|
|
+ orc_program_add_constant (p, 4, 0x0000ffff, "c2");
|
|
+ orc_program_add_constant (p, 2, 0x0000ffff, "c3");
|
|
+ orc_program_add_temporary (p, 4, "t1");
|
|
+ orc_program_add_temporary (p, 4, "t2");
|
|
+ orc_program_add_temporary (p, 4, "t3");
|
|
+
|
|
+ orc_program_append_2 (p, "avguw", 1, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_S5,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_S6,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "copyl", 0, ORC_VAR_T3, ORC_VAR_S3, ORC_VAR_D1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "orl", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T2,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_C3, ORC_VAR_S4,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_T1,
|
|
+ ORC_VAR_D1);
|
|
+#endif
|
|
+
|
|
+ orc_program_compile (p);
|
|
+ c = orc_program_take_code (p);
|
|
+ orc_program_free (p);
|
|
+ }
|
|
+ p_inited = TRUE;
|
|
+ orc_once_mutex_unlock ();
|
|
+ }
|
|
+ ex->arrays[ORC_VAR_A2] = c;
|
|
+ ex->program = 0;
|
|
+
|
|
+ ex->n = n;
|
|
+ ex->arrays[ORC_VAR_D1] = d1;
|
|
+ ex->arrays[ORC_VAR_D2] = d2;
|
|
+ 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 = c->exec;
|
|
+ func (ex);
|
|
+}
|
|
+#endif
|
|
+
|
|
+
|
|
+/* bayer16to16_orc_reorder */
|
|
+#ifdef DISABLE_ORC
|
|
+void
|
|
+bayer16to16_orc_reorder (guint8 * ORC_RESTRICT d1,
|
|
+ const guint32 * ORC_RESTRICT s1, const guint32 * ORC_RESTRICT s2, int p1,
|
|
+ int n)
|
|
+{
|
|
+ int i;
|
|
+ orc_union64 *ORC_RESTRICT ptr0;
|
|
+ const orc_union32 *ORC_RESTRICT ptr4;
|
|
+ const orc_union32 *ORC_RESTRICT ptr5;
|
|
+ orc_union32 var35;
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var36;
|
|
+#else
|
|
+ orc_union32 var36;
|
|
+#endif
|
|
+ orc_union32 var37;
|
|
+ orc_union64 var38;
|
|
+ orc_union64 var39;
|
|
+ orc_union64 var40;
|
|
+ orc_union32 var41;
|
|
+ orc_union64 var42;
|
|
+ orc_union64 var43;
|
|
+ orc_union32 var44;
|
|
+
|
|
+ ptr0 = (orc_union64 *) d1;
|
|
+ ptr4 = (orc_union32 *) s1;
|
|
+ ptr5 = (orc_union32 *) s2;
|
|
+
|
|
+ /* 1: loadpw */
|
|
+ var36.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ var36.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+
|
|
+ for (i = 0; i < n; i++) {
|
|
+ /* 0: loadl */
|
|
+ var35 = ptr4[i];
|
|
+ /* 2: muluwl */
|
|
+ var39.x2[0] =
|
|
+ ((orc_uint32) ((orc_uint16) var35.x2[0])) *
|
|
+ ((orc_uint32) ((orc_uint16) var36.x2[0]));
|
|
+ var39.x2[1] =
|
|
+ ((orc_uint32) ((orc_uint16) var35.x2[1])) *
|
|
+ ((orc_uint32) ((orc_uint16) var36.x2[1]));
|
|
+ /* 3: shrul */
|
|
+ var40.x2[0] = ((orc_uint32) var39.x2[0]) >> p1;
|
|
+ var40.x2[1] = ((orc_uint32) var39.x2[1]) >> p1;
|
|
+ /* 4: convuuslw */
|
|
+ var41.x2[0] = ORC_CLAMP_UW ((orc_uint32) var40.x2[0]);
|
|
+ var41.x2[1] = ORC_CLAMP_UW ((orc_uint32) var40.x2[1]);
|
|
+ /* 5: loadl */
|
|
+ var37 = ptr5[i];
|
|
+ /* 6: muluwl */
|
|
+ var42.x2[0] =
|
|
+ ((orc_uint32) ((orc_uint16) var37.x2[0])) *
|
|
+ ((orc_uint32) ((orc_uint16) var36.x2[0]));
|
|
+ var42.x2[1] =
|
|
+ ((orc_uint32) ((orc_uint16) var37.x2[1])) *
|
|
+ ((orc_uint32) ((orc_uint16) var36.x2[1]));
|
|
+ /* 7: shrul */
|
|
+ var43.x2[0] = ((orc_uint32) var42.x2[0]) >> p1;
|
|
+ var43.x2[1] = ((orc_uint32) var42.x2[1]) >> p1;
|
|
+ /* 8: convuuslw */
|
|
+ var44.x2[0] = ORC_CLAMP_UW ((orc_uint32) var43.x2[0]);
|
|
+ var44.x2[1] = ORC_CLAMP_UW ((orc_uint32) var43.x2[1]);
|
|
+ /* 9: mergelq */
|
|
+ {
|
|
+ orc_union64 _dest;
|
|
+ _dest.x2[0] = var41.i;
|
|
+ _dest.x2[1] = var44.i;
|
|
+ var38.i = _dest.i;
|
|
+ }
|
|
+ /* 10: storeq */
|
|
+ ptr0[i] = var38;
|
|
+ }
|
|
+
|
|
+}
|
|
+
|
|
+#else
|
|
+static void
|
|
+_backup_bayer16to16_orc_reorder (OrcExecutor * ORC_RESTRICT ex)
|
|
+{
|
|
+ int i;
|
|
+ int n = ex->n;
|
|
+ orc_union64 *ORC_RESTRICT ptr0;
|
|
+ const orc_union32 *ORC_RESTRICT ptr4;
|
|
+ const orc_union32 *ORC_RESTRICT ptr5;
|
|
+ orc_union32 var35;
|
|
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
|
|
+ volatile orc_union32 var36;
|
|
+#else
|
|
+ orc_union32 var36;
|
|
+#endif
|
|
+ orc_union32 var37;
|
|
+ orc_union64 var38;
|
|
+ orc_union64 var39;
|
|
+ orc_union64 var40;
|
|
+ orc_union32 var41;
|
|
+ orc_union64 var42;
|
|
+ orc_union64 var43;
|
|
+ orc_union32 var44;
|
|
+
|
|
+ ptr0 = (orc_union64 *) ex->arrays[0];
|
|
+ ptr4 = (orc_union32 *) ex->arrays[4];
|
|
+ ptr5 = (orc_union32 *) ex->arrays[5];
|
|
+
|
|
+ /* 1: loadpw */
|
|
+ var36.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+ var36.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */
|
|
+
|
|
+ for (i = 0; i < n; i++) {
|
|
+ /* 0: loadl */
|
|
+ var35 = ptr4[i];
|
|
+ /* 2: muluwl */
|
|
+ var39.x2[0] =
|
|
+ ((orc_uint32) ((orc_uint16) var35.x2[0])) *
|
|
+ ((orc_uint32) ((orc_uint16) var36.x2[0]));
|
|
+ var39.x2[1] =
|
|
+ ((orc_uint32) ((orc_uint16) var35.x2[1])) *
|
|
+ ((orc_uint32) ((orc_uint16) var36.x2[1]));
|
|
+ /* 3: shrul */
|
|
+ var40.x2[0] = ((orc_uint32) var39.x2[0]) >> ex->params[24];
|
|
+ var40.x2[1] = ((orc_uint32) var39.x2[1]) >> ex->params[24];
|
|
+ /* 4: convuuslw */
|
|
+ var41.x2[0] = ORC_CLAMP_UW ((orc_uint32) var40.x2[0]);
|
|
+ var41.x2[1] = ORC_CLAMP_UW ((orc_uint32) var40.x2[1]);
|
|
+ /* 5: loadl */
|
|
+ var37 = ptr5[i];
|
|
+ /* 6: muluwl */
|
|
+ var42.x2[0] =
|
|
+ ((orc_uint32) ((orc_uint16) var37.x2[0])) *
|
|
+ ((orc_uint32) ((orc_uint16) var36.x2[0]));
|
|
+ var42.x2[1] =
|
|
+ ((orc_uint32) ((orc_uint16) var37.x2[1])) *
|
|
+ ((orc_uint32) ((orc_uint16) var36.x2[1]));
|
|
+ /* 7: shrul */
|
|
+ var43.x2[0] = ((orc_uint32) var42.x2[0]) >> ex->params[24];
|
|
+ var43.x2[1] = ((orc_uint32) var42.x2[1]) >> ex->params[24];
|
|
+ /* 8: convuuslw */
|
|
+ var44.x2[0] = ORC_CLAMP_UW ((orc_uint32) var43.x2[0]);
|
|
+ var44.x2[1] = ORC_CLAMP_UW ((orc_uint32) var43.x2[1]);
|
|
+ /* 9: mergelq */
|
|
+ {
|
|
+ orc_union64 _dest;
|
|
+ _dest.x2[0] = var41.i;
|
|
+ _dest.x2[1] = var44.i;
|
|
+ var38.i = _dest.i;
|
|
+ }
|
|
+ /* 10: storeq */
|
|
+ ptr0[i] = var38;
|
|
+ }
|
|
+
|
|
+}
|
|
+
|
|
+void
|
|
+bayer16to16_orc_reorder (guint8 * ORC_RESTRICT d1,
|
|
+ const guint32 * ORC_RESTRICT s1, const guint32 * ORC_RESTRICT s2, int p1,
|
|
+ int n)
|
|
+{
|
|
+ OrcExecutor _ex, *ex = &_ex;
|
|
+ static volatile int p_inited = 0;
|
|
+ static OrcCode *c = 0;
|
|
+ void (*func) (OrcExecutor *);
|
|
+
|
|
+ if (!p_inited) {
|
|
+ orc_once_mutex_lock ();
|
|
+ if (!p_inited) {
|
|
+ OrcProgram *p;
|
|
+
|
|
+#if 1
|
|
+ static const orc_uint8 bc[] = {
|
|
+ 1, 9, 23, 98, 97, 121, 101, 114, 49, 54, 116, 111, 49, 54, 95, 111,
|
|
+ 114, 99, 95, 114, 101, 111, 114, 100, 101, 114, 11, 8, 8, 12, 4, 4,
|
|
+ 12, 4, 4, 14, 2, 255, 255, 0, 0, 16, 4, 20, 4, 20, 4, 20,
|
|
+ 8, 21, 1, 177, 34, 4, 16, 21, 1, 126, 34, 34, 24, 21, 1, 168,
|
|
+ 32, 34, 21, 1, 177, 34, 5, 16, 21, 1, 126, 34, 34, 24, 21, 1,
|
|
+ 168, 33, 34, 194, 0, 32, 33, 2, 0,
|
|
+ };
|
|
+ p = orc_program_new_from_static_bytecode (bc);
|
|
+ orc_program_set_backup_function (p, _backup_bayer16to16_orc_reorder);
|
|
+#else
|
|
+ p = orc_program_new ();
|
|
+ orc_program_set_name (p, "bayer16to16_orc_reorder");
|
|
+ orc_program_set_backup_function (p, _backup_bayer16to16_orc_reorder);
|
|
+ orc_program_add_destination (p, 8, "d1");
|
|
+ orc_program_add_source (p, 4, "s1");
|
|
+ orc_program_add_source (p, 4, "s2");
|
|
+ orc_program_add_constant (p, 2, 0x0000ffff, "c1");
|
|
+ orc_program_add_parameter (p, 4, "p1");
|
|
+ orc_program_add_temporary (p, 4, "t1");
|
|
+ orc_program_add_temporary (p, 4, "t2");
|
|
+ orc_program_add_temporary (p, 8, "t3");
|
|
+
|
|
+ orc_program_append_2 (p, "muluwl", 1, ORC_VAR_T3, ORC_VAR_S1, ORC_VAR_C1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "shrul", 1, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_P1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "convuuslw", 1, ORC_VAR_T1, ORC_VAR_T3,
|
|
+ ORC_VAR_D1, ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "muluwl", 1, ORC_VAR_T3, ORC_VAR_S2, ORC_VAR_C1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "shrul", 1, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_P1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "convuuslw", 1, ORC_VAR_T2, ORC_VAR_T3,
|
|
+ ORC_VAR_D1, ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "mergelq", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
|
|
+ ORC_VAR_D1);
|
|
+#endif
|
|
+
|
|
+ orc_program_compile (p);
|
|
+ c = orc_program_take_code (p);
|
|
+ orc_program_free (p);
|
|
+ }
|
|
+ p_inited = TRUE;
|
|
+ orc_once_mutex_unlock ();
|
|
+ }
|
|
+ ex->arrays[ORC_VAR_A2] = c;
|
|
+ ex->program = 0;
|
|
+
|
|
+ ex->n = n;
|
|
+ ex->arrays[ORC_VAR_D1] = d1;
|
|
+ ex->arrays[ORC_VAR_S1] = (void *) s1;
|
|
+ ex->arrays[ORC_VAR_S2] = (void *) s2;
|
|
+ ex->params[ORC_VAR_P1] = p1;
|
|
+
|
|
+ func = c->exec;
|
|
+ func (ex);
|
|
+}
|
|
+#endif
|
|
+
|
|
+
|
|
+/* bayer16to8_orc_reorder */
|
|
+#ifdef DISABLE_ORC
|
|
+void
|
|
+bayer16to8_orc_reorder (guint8 * ORC_RESTRICT d1,
|
|
+ const guint32 * ORC_RESTRICT s1, const guint32 * ORC_RESTRICT s2, int p1,
|
|
+ int n)
|
|
+{
|
|
+ int i;
|
|
+ orc_union32 *ORC_RESTRICT ptr0;
|
|
+ const orc_union32 *ORC_RESTRICT ptr4;
|
|
+ const orc_union32 *ORC_RESTRICT ptr5;
|
|
+ orc_union32 var35;
|
|
+ orc_union32 var36;
|
|
+ orc_union32 var37;
|
|
+ orc_union32 var38;
|
|
+ orc_union16 var39;
|
|
+ orc_union32 var40;
|
|
+ orc_union16 var41;
|
|
+
|
|
+ ptr0 = (orc_union32 *) d1;
|
|
+ ptr4 = (orc_union32 *) s1;
|
|
+ ptr5 = (orc_union32 *) s2;
|
|
+
|
|
+
|
|
+ for (i = 0; i < n; i++) {
|
|
+ /* 0: loadl */
|
|
+ var35 = ptr4[i];
|
|
+ /* 1: shruw */
|
|
+ var38.x2[0] = ((orc_uint16) var35.x2[0]) >> p1;
|
|
+ var38.x2[1] = ((orc_uint16) var35.x2[1]) >> p1;
|
|
+ /* 2: convuuswb */
|
|
+ var39.x2[0] = ORC_MIN ((orc_uint16) var38.x2[0], ORC_UB_MAX);
|
|
+ var39.x2[1] = ORC_MIN ((orc_uint16) var38.x2[1], ORC_UB_MAX);
|
|
+ /* 3: loadl */
|
|
+ var36 = ptr5[i];
|
|
+ /* 4: shruw */
|
|
+ var40.x2[0] = ((orc_uint16) var36.x2[0]) >> p1;
|
|
+ var40.x2[1] = ((orc_uint16) var36.x2[1]) >> p1;
|
|
+ /* 5: convuuswb */
|
|
+ var41.x2[0] = ORC_MIN ((orc_uint16) var40.x2[0], ORC_UB_MAX);
|
|
+ var41.x2[1] = ORC_MIN ((orc_uint16) var40.x2[1], ORC_UB_MAX);
|
|
+ /* 6: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var39.i;
|
|
+ _dest.x2[1] = var41.i;
|
|
+ var37.i = _dest.i;
|
|
+ }
|
|
+ /* 7: storel */
|
|
+ ptr0[i] = var37;
|
|
+ }
|
|
+
|
|
+}
|
|
+
|
|
+#else
|
|
+static void
|
|
+_backup_bayer16to8_orc_reorder (OrcExecutor * ORC_RESTRICT ex)
|
|
+{
|
|
+ int i;
|
|
+ int n = ex->n;
|
|
+ orc_union32 *ORC_RESTRICT ptr0;
|
|
+ const orc_union32 *ORC_RESTRICT ptr4;
|
|
+ const orc_union32 *ORC_RESTRICT ptr5;
|
|
+ orc_union32 var35;
|
|
+ orc_union32 var36;
|
|
+ orc_union32 var37;
|
|
+ orc_union32 var38;
|
|
+ orc_union16 var39;
|
|
+ orc_union32 var40;
|
|
+ orc_union16 var41;
|
|
+
|
|
+ ptr0 = (orc_union32 *) ex->arrays[0];
|
|
+ ptr4 = (orc_union32 *) ex->arrays[4];
|
|
+ ptr5 = (orc_union32 *) ex->arrays[5];
|
|
+
|
|
+
|
|
+ for (i = 0; i < n; i++) {
|
|
+ /* 0: loadl */
|
|
+ var35 = ptr4[i];
|
|
+ /* 1: shruw */
|
|
+ var38.x2[0] = ((orc_uint16) var35.x2[0]) >> ex->params[24];
|
|
+ var38.x2[1] = ((orc_uint16) var35.x2[1]) >> ex->params[24];
|
|
+ /* 2: convuuswb */
|
|
+ var39.x2[0] = ORC_MIN ((orc_uint16) var38.x2[0], ORC_UB_MAX);
|
|
+ var39.x2[1] = ORC_MIN ((orc_uint16) var38.x2[1], ORC_UB_MAX);
|
|
+ /* 3: loadl */
|
|
+ var36 = ptr5[i];
|
|
+ /* 4: shruw */
|
|
+ var40.x2[0] = ((orc_uint16) var36.x2[0]) >> ex->params[24];
|
|
+ var40.x2[1] = ((orc_uint16) var36.x2[1]) >> ex->params[24];
|
|
+ /* 5: convuuswb */
|
|
+ var41.x2[0] = ORC_MIN ((orc_uint16) var40.x2[0], ORC_UB_MAX);
|
|
+ var41.x2[1] = ORC_MIN ((orc_uint16) var40.x2[1], ORC_UB_MAX);
|
|
+ /* 6: mergewl */
|
|
+ {
|
|
+ orc_union32 _dest;
|
|
+ _dest.x2[0] = var39.i;
|
|
+ _dest.x2[1] = var41.i;
|
|
+ var37.i = _dest.i;
|
|
+ }
|
|
+ /* 7: storel */
|
|
+ ptr0[i] = var37;
|
|
+ }
|
|
+
|
|
+}
|
|
+
|
|
+void
|
|
+bayer16to8_orc_reorder (guint8 * ORC_RESTRICT d1,
|
|
+ const guint32 * ORC_RESTRICT s1, const guint32 * ORC_RESTRICT s2, int p1,
|
|
+ int n)
|
|
+{
|
|
+ OrcExecutor _ex, *ex = &_ex;
|
|
+ static volatile int p_inited = 0;
|
|
+ static OrcCode *c = 0;
|
|
+ void (*func) (OrcExecutor *);
|
|
+
|
|
+ if (!p_inited) {
|
|
+ orc_once_mutex_lock ();
|
|
+ if (!p_inited) {
|
|
+ OrcProgram *p;
|
|
+
|
|
+#if 1
|
|
+ static const orc_uint8 bc[] = {
|
|
+ 1, 9, 22, 98, 97, 121, 101, 114, 49, 54, 116, 111, 56, 95, 111, 114,
|
|
+ 99, 95, 114, 101, 111, 114, 100, 101, 114, 11, 4, 4, 12, 4, 4, 12,
|
|
+ 4, 4, 16, 4, 20, 2, 20, 2, 20, 4, 21, 1, 95, 34, 4, 24,
|
|
+ 21, 1, 162, 32, 34, 21, 1, 95, 34, 5, 24, 21, 1, 162, 33, 34,
|
|
+ 195, 0, 32, 33, 2, 0,
|
|
+ };
|
|
+ p = orc_program_new_from_static_bytecode (bc);
|
|
+ orc_program_set_backup_function (p, _backup_bayer16to8_orc_reorder);
|
|
+#else
|
|
+ p = orc_program_new ();
|
|
+ orc_program_set_name (p, "bayer16to8_orc_reorder");
|
|
+ orc_program_set_backup_function (p, _backup_bayer16to8_orc_reorder);
|
|
+ orc_program_add_destination (p, 4, "d1");
|
|
+ orc_program_add_source (p, 4, "s1");
|
|
+ orc_program_add_source (p, 4, "s2");
|
|
+ orc_program_add_parameter (p, 4, "p1");
|
|
+ orc_program_add_temporary (p, 2, "t1");
|
|
+ orc_program_add_temporary (p, 2, "t2");
|
|
+ orc_program_add_temporary (p, 4, "t3");
|
|
+
|
|
+ orc_program_append_2 (p, "shruw", 1, ORC_VAR_T3, ORC_VAR_S1, ORC_VAR_P1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "convuuswb", 1, ORC_VAR_T1, ORC_VAR_T3,
|
|
+ ORC_VAR_D1, ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "shruw", 1, ORC_VAR_T3, ORC_VAR_S2, ORC_VAR_P1,
|
|
+ ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "convuuswb", 1, ORC_VAR_T2, ORC_VAR_T3,
|
|
+ ORC_VAR_D1, ORC_VAR_D1);
|
|
+ orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
|
|
+ ORC_VAR_D1);
|
|
+#endif
|
|
+
|
|
+ orc_program_compile (p);
|
|
+ c = orc_program_take_code (p);
|
|
+ orc_program_free (p);
|
|
+ }
|
|
+ p_inited = TRUE;
|
|
+ orc_once_mutex_unlock ();
|
|
+ }
|
|
+ ex->arrays[ORC_VAR_A2] = c;
|
|
+ ex->program = 0;
|
|
+
|
|
+ ex->n = n;
|
|
+ ex->arrays[ORC_VAR_D1] = d1;
|
|
+ ex->arrays[ORC_VAR_S1] = (void *) s1;
|
|
+ ex->arrays[ORC_VAR_S2] = (void *) s2;
|
|
+ ex->params[ORC_VAR_P1] = p1;
|
|
+
|
|
+ func = c->exec;
|
|
+ func (ex);
|
|
+}
|
|
+#endif
|
|
+
|
|
+
|
|
+/* bayer8to16_orc_reorder */
|
|
+#ifdef DISABLE_ORC
|
|
+void
|
|
+bayer8to16_orc_reorder (guint8 * ORC_RESTRICT d1,
|
|
+ const guint32 * ORC_RESTRICT s1, int n)
|
|
+{
|
|
+ int i;
|
|
+ orc_union64 *ORC_RESTRICT ptr0;
|
|
+ const orc_union32 *ORC_RESTRICT ptr4;
|
|
+ orc_union32 var32;
|
|
+ orc_union64 var33;
|
|
+
|
|
+ ptr0 = (orc_union64 *) d1;
|
|
+ ptr4 = (orc_union32 *) s1;
|
|
+
|
|
+
|
|
+ for (i = 0; i < n; i++) {
|
|
+ /* 0: loadl */
|
|
+ var32 = ptr4[i];
|
|
+ /* 1: splatbw */
|
|
+ var33.x4[0] = ((var32.x4[0] & 0xff) << 8) | (var32.x4[0] & 0xff);
|
|
+ var33.x4[1] = ((var32.x4[1] & 0xff) << 8) | (var32.x4[1] & 0xff);
|
|
+ var33.x4[2] = ((var32.x4[2] & 0xff) << 8) | (var32.x4[2] & 0xff);
|
|
+ var33.x4[3] = ((var32.x4[3] & 0xff) << 8) | (var32.x4[3] & 0xff);
|
|
+ /* 2: storeq */
|
|
+ ptr0[i] = var33;
|
|
+ }
|
|
+
|
|
+}
|
|
+
|
|
+#else
|
|
+static void
|
|
+_backup_bayer8to16_orc_reorder (OrcExecutor * ORC_RESTRICT ex)
|
|
+{
|
|
+ int i;
|
|
+ int n = ex->n;
|
|
+ orc_union64 *ORC_RESTRICT ptr0;
|
|
+ const orc_union32 *ORC_RESTRICT ptr4;
|
|
+ orc_union32 var32;
|
|
+ orc_union64 var33;
|
|
+
|
|
+ ptr0 = (orc_union64 *) ex->arrays[0];
|
|
+ ptr4 = (orc_union32 *) ex->arrays[4];
|
|
+
|
|
+
|
|
+ for (i = 0; i < n; i++) {
|
|
+ /* 0: loadl */
|
|
+ var32 = ptr4[i];
|
|
+ /* 1: splatbw */
|
|
+ var33.x4[0] = ((var32.x4[0] & 0xff) << 8) | (var32.x4[0] & 0xff);
|
|
+ var33.x4[1] = ((var32.x4[1] & 0xff) << 8) | (var32.x4[1] & 0xff);
|
|
+ var33.x4[2] = ((var32.x4[2] & 0xff) << 8) | (var32.x4[2] & 0xff);
|
|
+ var33.x4[3] = ((var32.x4[3] & 0xff) << 8) | (var32.x4[3] & 0xff);
|
|
+ /* 2: storeq */
|
|
+ ptr0[i] = var33;
|
|
+ }
|
|
+
|
|
+}
|
|
+
|
|
+void
|
|
+bayer8to16_orc_reorder (guint8 * ORC_RESTRICT d1,
|
|
+ const guint32 * ORC_RESTRICT s1, int n)
|
|
+{
|
|
+ OrcExecutor _ex, *ex = &_ex;
|
|
+ static volatile int p_inited = 0;
|
|
+ static OrcCode *c = 0;
|
|
+ void (*func) (OrcExecutor *);
|
|
+
|
|
+ if (!p_inited) {
|
|
+ orc_once_mutex_lock ();
|
|
+ if (!p_inited) {
|
|
+ OrcProgram *p;
|
|
+
|
|
+#if 1
|
|
+ static const orc_uint8 bc[] = {
|
|
+ 1, 9, 22, 98, 97, 121, 101, 114, 56, 116, 111, 49, 54, 95, 111, 114,
|
|
+ 99, 95, 114, 101, 111, 114, 100, 101, 114, 11, 8, 8, 12, 4, 4, 21,
|
|
+ 2, 151, 0, 4, 2, 0,
|
|
+ };
|
|
+ p = orc_program_new_from_static_bytecode (bc);
|
|
+ orc_program_set_backup_function (p, _backup_bayer8to16_orc_reorder);
|
|
+#else
|
|
+ p = orc_program_new ();
|
|
+ orc_program_set_name (p, "bayer8to16_orc_reorder");
|
|
+ orc_program_set_backup_function (p, _backup_bayer8to16_orc_reorder);
|
|
+ orc_program_add_destination (p, 8, "d1");
|
|
+ orc_program_add_source (p, 4, "s1");
|
|
+
|
|
+ orc_program_append_2 (p, "splatbw", 2, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1,
|
|
+ ORC_VAR_D1);
|
|
+#endif
|
|
+
|
|
+ orc_program_compile (p);
|
|
+ c = orc_program_take_code (p);
|
|
+ orc_program_free (p);
|
|
+ }
|
|
+ p_inited = TRUE;
|
|
+ orc_once_mutex_unlock ();
|
|
+ }
|
|
+ ex->arrays[ORC_VAR_A2] = c;
|
|
+ ex->program = 0;
|
|
+
|
|
+ ex->n = n;
|
|
+ ex->arrays[ORC_VAR_D1] = d1;
|
|
+ ex->arrays[ORC_VAR_S1] = (void *) s1;
|
|
+
|
|
+ func = c->exec;
|
|
+ func (ex);
|
|
+}
|
|
+#endif
|
|
diff --git a/gst/bayer/gstbayerorc-dist.h b/gst/bayer/gstbayerorc-dist.h
|
|
index 235773292c..bd752aa018 100644
|
|
--- a/gst/bayer/gstbayerorc-dist.h
|
|
+++ b/gst/bayer/gstbayerorc-dist.h
|
|
@@ -1,13 +1,13 @@
|
|
|
|
/* autogenerated from gstbayerorc.orc */
|
|
|
|
-#ifndef _GSTBAYERORC_H_
|
|
-#define _GSTBAYERORC_H_
|
|
+#pragma once
|
|
|
|
#include <glib.h>
|
|
|
|
#ifdef __cplusplus
|
|
-extern "C" {
|
|
+extern "C"
|
|
+{
|
|
#endif
|
|
|
|
|
|
@@ -16,47 +16,64 @@ extern "C" {
|
|
#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;
|
|
+ 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;
|
|
+ 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;
|
|
+ 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;
|
|
+ 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;
|
|
+ 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;
|
|
+ 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
|
|
@@ -80,20 +97,95 @@ typedef union { orc_int64 i; double f; orc_int32 x2[2]; float x2f[2]; orc_int16
|
|
#endif
|
|
#endif
|
|
|
|
-void bayer_orc_horiz_upsample_unaligned (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, int n);
|
|
-void bayer_orc_horiz_upsample (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, int n);
|
|
-void bayer_orc_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 bayer_orc_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 bayer_orc_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 bayer_orc_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 bayer_orc_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 bayer_orc_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 bayer_orc_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 bayer_orc_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);
|
|
+ void bayer_orc_horiz_upsample_unaligned (guint8 * ORC_RESTRICT d1,
|
|
+ guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, int n);
|
|
+ void bayer_orc_horiz_upsample (guint8 * ORC_RESTRICT d1,
|
|
+ guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, int n);
|
|
+ void bayer_orc_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 bayer_orc_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 bayer_orc_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 bayer_orc_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 bayer_orc_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 bayer_orc_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 bayer_orc_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 bayer_orc_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);
|
|
+ void bayer16_orc_horiz_upsample_le (guint16 * ORC_RESTRICT d1,
|
|
+ guint16 * ORC_RESTRICT d2, const guint16 * ORC_RESTRICT s1, int n);
|
|
+ void bayer16_orc_horiz_upsample_be (guint16 * ORC_RESTRICT d1,
|
|
+ guint16 * ORC_RESTRICT d2, const guint16 * ORC_RESTRICT s1, int n);
|
|
+ void bayer16_orc_merge_bg_bgra (guint16 * ORC_RESTRICT d1,
|
|
+ guint16 * ORC_RESTRICT d2, 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 bayer16_orc_merge_gr_bgra (guint16 * ORC_RESTRICT d1,
|
|
+ guint16 * ORC_RESTRICT d2, 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 bayer16_orc_merge_bg_abgr (guint16 * ORC_RESTRICT d1,
|
|
+ guint16 * ORC_RESTRICT d2, 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 bayer16_orc_merge_gr_abgr (guint16 * ORC_RESTRICT d1,
|
|
+ guint16 * ORC_RESTRICT d2, 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 bayer16_orc_merge_bg_rgba (guint16 * ORC_RESTRICT d1,
|
|
+ guint16 * ORC_RESTRICT d2, 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 bayer16_orc_merge_gr_rgba (guint16 * ORC_RESTRICT d1,
|
|
+ guint16 * ORC_RESTRICT d2, 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 bayer16_orc_merge_bg_argb (guint16 * ORC_RESTRICT d1,
|
|
+ guint16 * ORC_RESTRICT d2, 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 bayer16_orc_merge_gr_argb (guint16 * ORC_RESTRICT d1,
|
|
+ guint16 * ORC_RESTRICT d2, 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 bayer16to16_orc_reorder (guint8 * ORC_RESTRICT d1,
|
|
+ const guint32 * ORC_RESTRICT s1, const guint32 * ORC_RESTRICT s2, int p1,
|
|
+ int n);
|
|
+ void bayer16to8_orc_reorder (guint8 * ORC_RESTRICT d1,
|
|
+ const guint32 * ORC_RESTRICT s1, const guint32 * ORC_RESTRICT s2, int p1,
|
|
+ int n);
|
|
+ void bayer8to16_orc_reorder (guint8 * ORC_RESTRICT d1,
|
|
+ const guint32 * ORC_RESTRICT s1, int n);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
-
|
|
-#endif
|
|
-
|
|
diff --git a/gst/bayer/gstbayerorc.orc b/gst/bayer/gstbayerorc.orc
|
|
index d86a819ef6..cfaa1bb2e3 100644
|
|
--- a/gst/bayer/gstbayerorc.orc
|
|
+++ b/gst/bayer/gstbayerorc.orc
|
|
@@ -248,3 +248,283 @@ x2 mergebw gb, g, b
|
|
x2 mergewl d, ar, gb
|
|
|
|
|
|
+# 10..16 bit bayer handling
|
|
+.function bayer16_orc_horiz_upsample_le
|
|
+.dest 4 d0 guint16
|
|
+.dest 4 d1 guint16
|
|
+.source 4 s guint16
|
|
+.temp 4 t
|
|
+
|
|
+.temp 2 b
|
|
+.temp 2 c
|
|
+.temp 2 d
|
|
+.temp 2 e
|
|
+
|
|
+splitlw c, b, s
|
|
+loadoffl t, s, 1
|
|
+splitlw e, d, t
|
|
+avguw e, c, e
|
|
+mergewl d0, c, e
|
|
+avguw b, b, d
|
|
+mergewl d1, b, d
|
|
+
|
|
+.function bayer16_orc_horiz_upsample_be
|
|
+.dest 4 d0 guint16
|
|
+.dest 4 d1 guint16
|
|
+.source 4 s guint16
|
|
+.temp 4 t
|
|
+
|
|
+.temp 2 b
|
|
+.temp 2 c
|
|
+.temp 2 d
|
|
+.temp 2 e
|
|
+
|
|
+splitlw c, b, s
|
|
+swapw b, b
|
|
+swapw c, c
|
|
+loadoffl t, s, 1
|
|
+splitlw e, d, t
|
|
+swapw d, d
|
|
+swapw e, e
|
|
+avguw e, c, e
|
|
+mergewl d0, c, e
|
|
+avguw b, b, d
|
|
+mergewl d1, b, d
|
|
+
|
|
+.function bayer16_orc_merge_bg_bgra
|
|
+.dest 8 d1 guint16
|
|
+.dest 8 d2 guint16
|
|
+.source 4 g0 guint8
|
|
+.source 4 r0 guint8
|
|
+.source 4 b1 guint8
|
|
+.source 4 g1 guint8
|
|
+.source 4 g2 guint8
|
|
+.source 4 r2 guint8
|
|
+.temp 4 r
|
|
+.temp 4 g
|
|
+.temp 4 t
|
|
+
|
|
+
|
|
+x2 avguw r, r0, r2
|
|
+x2 avguw g, g0, g2
|
|
+copyl t, g1
|
|
+x2 avguw g, g, t
|
|
+andl g, g, 65535
|
|
+andl t, t, 4294901760
|
|
+orl g, t, g
|
|
+x2 mergewl d1, b1, g
|
|
+x2 mergewl d2, r, 65535
|
|
+
|
|
+
|
|
+.function bayer16_orc_merge_gr_bgra
|
|
+.dest 8 d1 guint16
|
|
+.dest 8 d2 guint16
|
|
+.source 4 b0 guint8
|
|
+.source 4 g0 guint8
|
|
+.source 4 g1 guint8
|
|
+.source 4 r1 guint8
|
|
+.source 4 b2 guint8
|
|
+.source 4 g2 guint8
|
|
+.temp 4 b
|
|
+.temp 4 g
|
|
+.temp 4 t
|
|
+
|
|
+
|
|
+x2 avguw b, b0, b2
|
|
+x2 avguw g, g0, g2
|
|
+copyl t, g1
|
|
+x2 avguw g, g, t
|
|
+andl g, g, 4294901760
|
|
+andl t, t, 65535
|
|
+orl g, t, g
|
|
+x2 mergewl d1, b, g
|
|
+x2 mergewl d2, r1, 65535
|
|
+
|
|
+
|
|
+.function bayer16_orc_merge_bg_abgr
|
|
+.dest 8 d1 guint16
|
|
+.dest 8 d2 guint16
|
|
+.source 4 g0 guint8
|
|
+.source 4 r0 guint8
|
|
+.source 4 b1 guint8
|
|
+.source 4 g1 guint8
|
|
+.source 4 g2 guint8
|
|
+.source 4 r2 guint8
|
|
+.temp 4 r
|
|
+.temp 4 g
|
|
+.temp 4 t
|
|
+
|
|
+
|
|
+x2 avguw r, r0, r2
|
|
+x2 avguw g, g0, g2
|
|
+copyl t, g1
|
|
+x2 avguw g, g, t
|
|
+andl g, g, 65535
|
|
+andl t, t, 4294901760
|
|
+orl g, t, g
|
|
+x2 mergewl d1, 65535, b1
|
|
+x2 mergewl d2, g, r
|
|
+
|
|
+
|
|
+.function bayer16_orc_merge_gr_abgr
|
|
+.dest 8 d1 guint16
|
|
+.dest 8 d2 guint16
|
|
+.source 4 b0 guint8
|
|
+.source 4 g0 guint8
|
|
+.source 4 g1 guint8
|
|
+.source 4 r1 guint8
|
|
+.source 4 b2 guint8
|
|
+.source 4 g2 guint8
|
|
+.temp 4 b
|
|
+.temp 4 g
|
|
+.temp 4 t
|
|
+
|
|
+
|
|
+x2 avguw b, b0, b2
|
|
+x2 avguw g, g0, g2
|
|
+copyl t, g1
|
|
+x2 avguw g, g, t
|
|
+andl g, g, 4294901760
|
|
+andl t, t, 65535
|
|
+orl g, t, g
|
|
+x2 mergewl d1, 65535, b
|
|
+x2 mergewl d2, g, r1
|
|
+
|
|
+
|
|
+.function bayer16_orc_merge_bg_rgba
|
|
+.dest 8 d1 guint16
|
|
+.dest 8 d2 guint16
|
|
+.source 4 g0 guint8
|
|
+.source 4 r0 guint8
|
|
+.source 4 b1 guint8
|
|
+.source 4 g1 guint8
|
|
+.source 4 g2 guint8
|
|
+.source 4 r2 guint8
|
|
+.temp 4 r
|
|
+.temp 4 g
|
|
+.temp 4 t
|
|
+
|
|
+
|
|
+x2 avguw r, r0, r2
|
|
+x2 avguw g, g0, g2
|
|
+copyl t, g1
|
|
+x2 avguw g, g, t
|
|
+andl g, g, 65535
|
|
+andl t, t, 4294901760
|
|
+orl g, t, g
|
|
+x2 mergewl d1, r, g
|
|
+x2 mergewl d2, b1, 65535
|
|
+
|
|
+
|
|
+.function bayer16_orc_merge_gr_rgba
|
|
+.dest 8 d1 guint16
|
|
+.dest 8 d2 guint16
|
|
+.source 4 b0 guint8
|
|
+.source 4 g0 guint8
|
|
+.source 4 g1 guint8
|
|
+.source 4 r1 guint8
|
|
+.source 4 b2 guint8
|
|
+.source 4 g2 guint8
|
|
+.temp 4 b
|
|
+.temp 4 g
|
|
+.temp 4 t
|
|
+
|
|
+
|
|
+x2 avguw b, b0, b2
|
|
+x2 avguw g, g0, g2
|
|
+copyl t, g1
|
|
+x2 avguw g, g, t
|
|
+andl g, g, 4294901760
|
|
+andl t, t, 65535
|
|
+orl g, t, g
|
|
+x2 mergewl d1, r1, g
|
|
+x2 mergewl d2, b, 65535
|
|
+
|
|
+
|
|
+.function bayer16_orc_merge_bg_argb
|
|
+.dest 8 d1 guint16
|
|
+.dest 8 d2 guint16
|
|
+.source 4 g0 guint8
|
|
+.source 4 r0 guint8
|
|
+.source 4 b1 guint8
|
|
+.source 4 g1 guint8
|
|
+.source 4 g2 guint8
|
|
+.source 4 r2 guint8
|
|
+.temp 4 r
|
|
+.temp 4 g
|
|
+.temp 4 t
|
|
+
|
|
+
|
|
+x2 avguw r, r0, r2
|
|
+x2 avguw g, g0, g2
|
|
+copyl t, g1
|
|
+x2 avguw g, g, t
|
|
+andl g, g, 65535
|
|
+andl t, t, 4294901760
|
|
+orl g, t, g
|
|
+x2 mergewl d1, 65535, r
|
|
+x2 mergewl d2, g, b1
|
|
+
|
|
+
|
|
+.function bayer16_orc_merge_gr_argb
|
|
+.dest 8 d1 guint16
|
|
+.dest 8 d2 guint16
|
|
+.source 4 b0 guint8
|
|
+.source 4 g0 guint8
|
|
+.source 4 g1 guint8
|
|
+.source 4 r1 guint8
|
|
+.source 4 b2 guint8
|
|
+.source 4 g2 guint8
|
|
+.temp 4 b
|
|
+.temp 4 g
|
|
+.temp 4 t
|
|
+
|
|
+
|
|
+x2 avguw b, b0, b2
|
|
+x2 avguw g, g0, g2
|
|
+copyl t, g1
|
|
+x2 avguw g, g, t
|
|
+andl g, g, 4294901760
|
|
+andl t, t, 65535
|
|
+orl g, t, g
|
|
+x2 mergewl d1, 65535, r1
|
|
+x2 mergewl d2, g, b
|
|
+
|
|
+
|
|
+.function bayer16to16_orc_reorder
|
|
+.dest 8 d guint8
|
|
+.source 4 s1 guint32
|
|
+.source 4 s2 guint32
|
|
+.param 4 shift
|
|
+.temp 4 u
|
|
+.temp 4 v
|
|
+.temp 8 q
|
|
+
|
|
+x2 muluwl q, s1, 0xffff
|
|
+x2 shrul q, q, shift
|
|
+x2 convuuslw u, q
|
|
+x2 muluwl q, s2, 0xffff
|
|
+x2 shrul q, q, shift
|
|
+x2 convuuslw v, q
|
|
+mergelq d, u, v
|
|
+
|
|
+.function bayer16to8_orc_reorder
|
|
+.dest 4 d guint8
|
|
+.source 4 s1 guint32
|
|
+.source 4 s2 guint32
|
|
+.param 4 shift
|
|
+.temp 2 u
|
|
+.temp 2 v
|
|
+.temp 4 l
|
|
+
|
|
+x2 shruw l, s1, shift
|
|
+x2 convuuswb u, l
|
|
+x2 shruw l, s2, shift
|
|
+x2 convuuswb v, l
|
|
+mergewl d, u, v
|
|
+
|
|
+.function bayer8to16_orc_reorder
|
|
+.dest 8 d guint8
|
|
+.source 4 s guint32
|
|
+
|
|
+x4 splatbw d, s
|
|
--
|
|
2.44.1
|
|
|