From: David Schleef Date: Sat, 5 Jun 2010 01:21:21 +0000 (-0700) Subject: videobox: liboil to orc conversion X-Git-Tag: 1.19.3~509^2~8466 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4e84ab1f87f6e99125b4a2dd0b932e1bfa5c6dff;p=platform%2Fupstream%2Fgstreamer.git videobox: liboil to orc conversion --- diff --git a/gst/videobox/Makefile.am b/gst/videobox/Makefile.am index 08203d4..e34234f 100644 --- a/gst/videobox/Makefile.am +++ b/gst/videobox/Makefile.am @@ -1,19 +1,23 @@ plugin_LTLIBRARIES = libgstvideobox.la +ORC_SOURCE=gstvideoboxorc +include $(top_srcdir)/common/orc.mak + libgstvideobox_la_SOURCES = gstvideobox.c +nodist_libgstvideobox_la_SOURCES = $(ORC_NODIST_SOURCES) libgstvideobox_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) \ $(GST_CONTROLLER_CFLAGS) \ $(GST_BASE_CFLAGS) \ $(GST_CFLAGS) \ - $(LIBOIL_CFLAGS) + $(ORC_CFLAGS) libgstvideobox_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \ $(GST_CONTROLLER_LIBS) \ $(GST_BASE_LIBS) \ $(GST_LIBS) \ - $(LIBOIL_LIBS) \ + $(ORC_LIBS) \ -lgstvideo-@GST_MAJORMINOR@ libgstvideobox_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstvideobox_la_LIBTOOLFLAGS = --tag=disable-static noinst_HEADERS = gstvideobox.h -EXTRA_DIST = README +EXTRA_DIST += README diff --git a/gst/videobox/gstvideobox.c b/gst/videobox/gstvideobox.c index 16e4d3a..35c8746 100644 --- a/gst/videobox/gstvideobox.c +++ b/gst/videobox/gstvideobox.c @@ -59,9 +59,9 @@ #endif #include "gstvideobox.h" +#include "gstvideoboxorc.h" #include -#include #include #include @@ -153,7 +153,7 @@ fill_ayuv (GstVideoBoxFill fill_type, guint b_alpha, GstVideoFormat format, (yuv_hdtv_colors_Y[fill_type] << 16) | (yuv_hdtv_colors_U[fill_type] << 8) | yuv_hdtv_colors_V[fill_type]); - oil_splat_u32_ns ((guint32 *) dest, &empty_pixel, width * height); + orc_splat_u32 ((guint32 *) dest, empty_pixel, width * height); } static void @@ -182,6 +182,7 @@ copy_ayuv_ayuv (guint i_alpha, GstVideoFormat dest_format, guint8 * dest, for (i = 0; i < h; i++) { for (j = 0; j < w; j += 4) { + /* ORC FIXME */ dest[j] = (src[j] * i_alpha) >> 8; y = src[j + 1]; u = src[j + 2]; @@ -196,6 +197,7 @@ copy_ayuv_ayuv (guint i_alpha, GstVideoFormat dest_format, guint8 * dest, } else { for (i = 0; i < h; i++) { for (j = 0; j < w; j += 4) { + /* ORC FIXME */ dest[j] = (src[j] * i_alpha) >> 8; dest[j + 1] = src[j + 1]; dest[j + 2] = src[j + 2]; @@ -659,9 +661,9 @@ fill_planar_yuv (GstVideoBoxFill fill_type, guint b_alpha, heightY = gst_video_format_get_component_height (format, 0, height); heightUV = gst_video_format_get_component_height (format, 1, height); - oil_splat_u8_ns (destY, &empty_pixel[0], strideY * heightY); - oil_splat_u8_ns (destU, &empty_pixel[1], strideUV * heightUV); - oil_splat_u8_ns (destV, &empty_pixel[2], strideUV * heightUV); + memset (destY, empty_pixel[0], strideY * heightY); + memset (destU, empty_pixel[1], strideUV * heightUV); + memset (destV, empty_pixel[2], strideUV * heightUV); } static void @@ -736,9 +738,9 @@ copy_y444_y444 (guint i_alpha, GstVideoFormat dest_format, guint8 * dest, } } else { for (i = 0; i < h; i++) { - oil_copy_u8 (destY, srcY, w); - oil_copy_u8 (destU, srcU, w); - oil_copy_u8 (destV, srcV, w); + memcpy (destY, srcY, w); + memcpy (destU, srcU, w); + memcpy (destV, srcV, w); destY += dest_stride; destU += dest_stride; @@ -1777,7 +1779,7 @@ fill_rgb32 (GstVideoBoxFill fill_type, guint b_alpha, GstVideoFormat format, (rgb_colors_G[fill_type] << (p[2] * 8)) | (rgb_colors_B[fill_type] << (p[3] * 8))); - oil_splat_u32_ns ((guint32 *) dest, &empty_pixel, width * height); + orc_splat_u32 ((guint32 *) dest, empty_pixel, width * height); } static void @@ -2150,7 +2152,7 @@ fill_gray (GstVideoBoxFill fill_type, guint b_alpha, GstVideoFormat format, dest_stride = GST_ROUND_UP_4 (width); for (i = 0; i < height; i++) { - oil_splat_u8_ns (dest, &val, width); + memset (dest, val, width); dest += dest_stride; } } else { @@ -2195,7 +2197,7 @@ copy_packed_simple (guint i_alpha, GstVideoFormat dest_format, guint8 * dest, src = src + src_y * src_stride + src_x * pixel_stride; for (i = 0; i < h; i++) { - oil_copy_u8 (dest, src, row_size); + memcpy (dest, src, row_size); dest += dest_stride; src += src_stride; } @@ -2332,7 +2334,7 @@ copy_yuy2_yuy2 (guint i_alpha, GstVideoFormat dest_format, guint8 * dest, } } else { for (i = 0; i < h; i++) { - oil_copy_u8 (dest, src, w * 2); + memcpy (dest, src, w * 2); dest += dest_stride; src += src_stride; } @@ -3386,8 +3388,6 @@ gst_video_box_transform (GstBaseTransform * trans, GstBuffer * in, static gboolean plugin_init (GstPlugin * plugin) { - oil_init (); - gst_controller_init (NULL, NULL); GST_DEBUG_CATEGORY_INIT (videobox_debug, "videobox", 0, diff --git a/gst/videobox/gstvideoboxorc-dist.c b/gst/videobox/gstvideoboxorc-dist.c new file mode 100644 index 0000000..ca6ba76 --- /dev/null +++ b/gst/videobox/gstvideoboxorc-dist.c @@ -0,0 +1,135 @@ + +/* autogenerated from gstvideoboxorc.orc */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#ifndef DISABLE_ORC +#include +#else +#include +#endif +#include + +void orc_splat_u32 (guint32 * d1, int p1, int n); + + +/* begin Orc C target preamble */ +#define ORC_CLAMP(x,a,b) ((x)<(a) ? (a) : ((x)>(b) ? (b) : (x))) +#define ORC_ABS(a) ((a)<0 ? -(a) : (a)) +#define ORC_MIN(a,b) ((a)<(b) ? (a) : (b)) +#define ORC_MAX(a,b) ((a)>(b) ? (a) : (b)) +#define ORC_SB_MAX 127 +#define ORC_SB_MIN (-1-ORC_SB_MAX) +#define ORC_UB_MAX 255 +#define ORC_UB_MIN 0 +#define ORC_SW_MAX 32767 +#define ORC_SW_MIN (-1-ORC_SW_MAX) +#define ORC_UW_MAX 65535 +#define ORC_UW_MIN 0 +#define ORC_SL_MAX 2147483647 +#define ORC_SL_MIN (-1-ORC_SL_MAX) +#define ORC_UL_MAX 4294967295U +#define ORC_UL_MIN 0 +#define ORC_CLAMP_SB(x) ORC_CLAMP(x,ORC_SB_MIN,ORC_SB_MAX) +#define ORC_CLAMP_UB(x) ORC_CLAMP(x,ORC_UB_MIN,ORC_UB_MAX) +#define ORC_CLAMP_SW(x) ORC_CLAMP(x,ORC_SW_MIN,ORC_SW_MAX) +#define ORC_CLAMP_UW(x) ORC_CLAMP(x,ORC_UW_MIN,ORC_UW_MAX) +#define ORC_CLAMP_SL(x) ORC_CLAMP(x,ORC_SL_MIN,ORC_SL_MAX) +#define ORC_CLAMP_UL(x) ORC_CLAMP(x,ORC_UL_MIN,ORC_UL_MAX) +#define ORC_SWAP_W(x) ((((x)&0xff)<<8) | (((x)&0xff00)>>8)) +#define ORC_SWAP_L(x) ((((x)&0xff)<<24) | (((x)&0xff00)<<8) | (((x)&0xff0000)>>8) | (((x)&0xff000000)>>24)) +#define ORC_PTR_OFFSET(ptr,offset) ((void *)(((unsigned char *)(ptr)) + (offset))) +#define ORC_AS_FLOAT(x) (((union { int i; float f; } *)(&x))->f) +typedef union +{ + int32_t i; + float f; +} orc_union32; +typedef union +{ + int64_t i; + double f; +} orc_union64; +/* end Orc C target preamble */ + + + +/* orc_splat_u32 */ +#ifdef DISABLE_ORC +void +orc_splat_u32 (guint32 * d1, int p1, int n) +{ + int i; + orc_union32 var0; + orc_union32 *ptr0; + const orc_union32 var24 = { p1 }; + + ptr0 = (orc_union32 *) d1; + + for (i = 0; i < n; i++) { + /* 0: copyl */ + var0.i = var24.i; + *ptr0 = var0; + ptr0++; + } + +} + +#else +static void +_backup_orc_splat_u32 (OrcExecutor * ex) +{ + int i; + int n = ex->n; + orc_union32 var0; + orc_union32 *ptr0; + const orc_union32 var24 = *(orc_union32 *) (ex->params + 24); + + ptr0 = (orc_union32 *) ex->arrays[0]; + + for (i = 0; i < n; i++) { + /* 0: copyl */ + var0.i = var24.i; + *ptr0 = var0; + ptr0++; + } + +} + +void +orc_splat_u32 (guint32 * d1, int p1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static int p_inited = 0; + static OrcProgram *p = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcCompileResult result; + + p = orc_program_new (); + orc_program_set_name (p, "orc_splat_u32"); + orc_program_set_backup_function (p, _backup_orc_splat_u32); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_parameter (p, 4, "p1"); + + orc_program_append (p, "copyl", ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1); + + result = orc_program_compile (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->program = p; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_P1] = p1; + + func = p->code_exec; + func (ex); +} +#endif diff --git a/gst/videobox/gstvideoboxorc-dist.h b/gst/videobox/gstvideoboxorc-dist.h new file mode 100644 index 0000000..a3325b9 --- /dev/null +++ b/gst/videobox/gstvideoboxorc-dist.h @@ -0,0 +1,20 @@ + +/* autogenerated from gstvideoboxorc.orc */ + +#ifndef _GSTVIDEOBOXORC_H_ +#define _GSTVIDEOBOXORC_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +void orc_splat_u32 (guint32 * d1, int p1, int n); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/gst/videobox/gstvideoboxorc.orc b/gst/videobox/gstvideoboxorc.orc new file mode 100644 index 0000000..30abfb1 --- /dev/null +++ b/gst/videobox/gstvideoboxorc.orc @@ -0,0 +1,7 @@ + +.function orc_splat_u32 +.dest 4 d1 guint32 +.param 4 p1 + +copyl d1, p1 +