summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 40631a8)
raw | patch | inline | side by side (parent: 40631a8)
author | Djordje Senicic <d-senicic1@ti.com> | |
Wed, 23 Mar 2016 11:26:53 +0000 (07:26 -0400) | ||
committer | Djordje Senicic <d-senicic1@ti.com> | |
Wed, 23 Mar 2016 11:26:53 +0000 (07:26 -0400) |
index 8174710084dabad2c4b53e0bfa2876600eba1c97..2d7bf5de020d51913081124803a2ba7624031b16 100644 (file)
#define DEFAULT_FILTERSIZE 5
#define DEFAULT_LUM_ONLY TRUE
#define DEFAULT_KERNELTYPE GST_DSP66_VIDEO_KERNELTYPE_MEDIAN
+#define DEFAULT_ARBKERNEL "Sobel3x3"
enum
{
PROP_0,
PROP_FILTERSIZE,
PROP_LUM_ONLY,
- PROP_KERNELTYPE
+ PROP_KERNELTYPE,
+ PROP_ARBKERNEL
};
#define GST_TYPE_VIDEO_KERNEL_FILTERSIZE (gst_dsp66_video_kernel_filtersize_get_type())
{GST_DSP66_VIDEO_KERNELTYPE_SOBEL, "Kernel sobel", "1"},
{GST_DSP66_VIDEO_KERNELTYPE_CONV, "Kernel conv", "2"},
{GST_DSP66_VIDEO_KERNELTYPE_CANNY, "Kernel canny", "3"},
+ {GST_DSP66_VIDEO_KERNELTYPE_ARB, "Kernel arbitrary", "4"},
{0, NULL, NULL},
};
"luminance", DEFAULT_LUM_ONLY,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, PROP_ARBKERNEL,
+ g_param_spec_string ("arbkernel", "User defined kernel",
+ "The name of the kernel invoked via OpenCL.",
+ NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&dsp66_video_kernel_sink_factory));
gst_element_class_add_pad_template (gstelement_class,
kernel->filtersize = DEFAULT_FILTERSIZE;
kernel->kerneltype = DEFAULT_KERNELTYPE;
kernel->lum_only = DEFAULT_LUM_ONLY;
+ kernel->arbkernel = g_strdup (DEFAULT_ARBKERNEL);
}
-extern int oclconv_kernel(int kernel_type, int kernel_size, unsigned char *src, unsigned char *dest, int width, int height, int sstride, int dstride);
+extern int oclconv_kernel(int kernel_type, int kernel_size, char *arbkernel,
+ unsigned char *src, unsigned char *dest, int width, int height, int sstride, int dstride);
static int
-imgproc (gint kerneltype, gint filtersize,
+imgproc (gint kerneltype, gint filtersize, gchar *arbkernel,
guint8 * dest, gint dstride,
const guint8 * src, gint sstride,
gint width, gint height)
{
- return oclconv_kernel(kerneltype, filtersize, (unsigned char *)src, (unsigned char *)dest, width, height, sstride, dstride);
+ return oclconv_kernel(kerneltype, filtersize, arbkernel, (unsigned char *)src, (unsigned char *)dest, width, height, sstride, dstride);
}
static GstFlowReturn
gst_video_frame_copy_plane (out_frame, in_frame, 1);
gst_video_frame_copy_plane (out_frame, in_frame, 2);
} else {
- imgproc (kernel->kerneltype, kernel->filtersize,
+ imgproc (kernel->kerneltype, kernel->filtersize, kernel->arbkernel,
GST_VIDEO_FRAME_PLANE_DATA (out_frame, 1),
GST_VIDEO_FRAME_PLANE_STRIDE (out_frame, 1),
GST_VIDEO_FRAME_PLANE_DATA (in_frame, 1),
GST_VIDEO_FRAME_PLANE_STRIDE (in_frame, 1),
GST_VIDEO_FRAME_WIDTH (in_frame) / 2,
GST_VIDEO_FRAME_HEIGHT (in_frame) / 2);
- imgproc (kernel->kerneltype, kernel->filtersize,
+ imgproc (kernel->kerneltype, kernel->filtersize, kernel->arbkernel,
GST_VIDEO_FRAME_PLANE_DATA (out_frame, 2),
GST_VIDEO_FRAME_PLANE_STRIDE (out_frame, 2),
GST_VIDEO_FRAME_PLANE_DATA (in_frame, 2),
case PROP_KERNELTYPE:
kernel->kerneltype = g_value_get_enum (value);
break;
+ case PROP_ARBKERNEL:
+ if (!g_value_get_string (value)) {
+ GST_WARNING ("Arbitrary kernel string can not be NULL");
+ break;
+ }
+ g_free (kernel->arbkernel);
+ kernel->arbkernel = g_value_dup_string (value);
+ break;
default:
break;
}
index b78354bf926072a8d43eee4c264613e81560bffb..017d8095c7554ffe126245f4a59a0130fe70d77d 100644 (file)
GST_DSP66_VIDEO_KERNELTYPE_MEDIAN = 0,
GST_DSP66_VIDEO_KERNELTYPE_SOBEL = 1,
GST_DSP66_VIDEO_KERNELTYPE_CONV = 2,
- GST_DSP66_VIDEO_KERNELTYPE_CANNY = 3
+ GST_DSP66_VIDEO_KERNELTYPE_CANNY = 3,
+ GST_DSP66_VIDEO_KERNELTYPE_ARB = 4
} GstDsp66VideoKernelType;
struct _GstDsp66VideoKernel {
GstDsp66VideoKernelFilterSize filtersize;
GstDsp66VideoKernelType kerneltype;
gboolean lum_only;
+ gchar *arbkernel;
};
struct _GstDsp66VideoKernelClass {
index dab866e713dd2808d67e354d0888014a90b672f4..815b5ff0e21af96c9d418bfbc14f596b46a0f3fe 100644 (file)
*****************************************************************************/
#define PIX_SORT(a,b) { if ((a)>(b)) PIX_SWAP((a),(b)); }
#define PIX_SWAP(a,b) { unsigned char temp=(a);(a)=(b);(b)=temp; }
+#define ARGS global uchar *pInput, global ushort *pBufGradX, \
+ global ushort *pBufGradY, global ushort *pBufMag, \
+ global uchar *pBufOut, global uchar *pScratch, \
+ global uint *numItems, ushort width, ushort height
+/* imglib library functions */
void IMG_median_3x3_8 (const unsigned char *restrict in_data, int cols, unsigned char * restrict out_data);
void IMG_sobel_3x3_8 (const unsigned char *restrict in_data, unsigned char *restrict out_data, int rows, int cols);
void IMG_conv_3x3_i8_c8s (const unsigned char *restrict in_data, unsigned char *restrict out_data, int cols, const char *restrict mask, int shift);
index 00ef898646608cb49cec7c263b2b39a19f0c829f..ed6a17d94a8d31841982d7843df30b11b00562cf 100644 (file)
@@ -165,7 +165,7 @@ static int ocl_canny(unsigned char *data_in, unsigned char *data_out, unsigned s
#ifdef __cplusplus
extern "C" {
#endif
-int oclconv_kernel(int kernel_type, int filter_size,
+int oclconv_kernel(int kernel_type, int filter_size, char *arbkernel,
unsigned char *data_in, unsigned char *data_out,
int width, int height, int dstride, int sstride)
{
/* filter size is ignored */
retval = ocl_canny (data_in, data_out, width, height); /* input and output stride assumed to be == width */
break;
+ case 4: /* user defined kernel */
+ retval = oclconv_imgproc (arbkernel, data_in, data_out, width, height, sstride, dstride);
+ break;
default:
break;
}