summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 80a98fa)
raw | patch | inline | side by side (parent: 80a98fa)
author | Djordje Senicic <d-senicic1@ti.com> | |
Wed, 23 Mar 2016 00:31:45 +0000 (20:31 -0400) | ||
committer | Djordje Senicic <d-senicic1@ti.com> | |
Wed, 23 Mar 2016 00:31:45 +0000 (20:31 -0400) |
src/gstdsp66videokernel.c | patch | blob | history | |
src/gstdsp66videokernel.h | patch | blob | history | |
src/kernels/oclconv/oclconv.cpp | patch | blob | history |
index b273e4b3e42bf393b5645a047b6795c3dd584243..525c7684c048536ae5bedae9b4b55b2203931c8b 100644 (file)
PROP_KERNELTYPE
};
-#define GST_TYPE_VIDEO_KERNEL_SIZE (gst_dsp66_video_kernel_size_get_type())
-#define GST_TYPE_VIDEO_KERNELTYPE_SIZE (gst_dsp66_video_kerneltype_size_get_type())
+#define GST_TYPE_VIDEO_KERNEL_FILTERSIZE (gst_dsp66_video_kernel_filtersize_get_type())
+#define GST_TYPE_VIDEO_KERNELTYPE (gst_dsp66_video_kerneltype_get_type())
-static const GEnumValue dsp66_video_kernel_sizes[] = {
- {GST_DSP66_VIDEO_KERNEL_SIZE_5, "Kernel of 5 neighbour pixels", "5"},
- {GST_DSP66_VIDEO_KERNEL_SIZE_9, "Kernel of 9 neighbour pixels", "9"},
+static const GEnumValue dsp66_video_kernel_filtersizes[] = {
+ {GST_DSP66_VIDEO_KERNEL_FILTERSIZE_5, "Kernel of 5 neighbour pixels", "5"},
+ {GST_DSP66_VIDEO_KERNEL_FILTERSIZE_9, "Kernel of 9 neighbour pixels", "9"},
{0, NULL, NULL},
};
-static const GEnumValue dsp66_video_kerneltype_sizes[] = {
+static const GEnumValue dsp66_video_kerneltype[] = {
{GST_DSP66_VIDEO_KERNELTYPE_MEDIAN, "Kernel median", "0"},
{GST_DSP66_VIDEO_KERNELTYPE_SOBEL, "Kernel sobel", "1"},
{0, NULL, NULL},
};
static GType
-gst_dsp66_video_kernel_size_get_type (void)
+gst_dsp66_video_kernel_filtersize_get_type (void)
{
- static GType dsp66_video_kernel_size_type = 0;
+ static GType dsp66_video_kernel_filtersize_type = 0;
- if (!dsp66_video_kernel_size_type) {
- dsp66_video_kernel_size_type = g_enum_register_static ("GstDsp66VideoKernelSize",
- dsp66_video_kernel_sizes);
+ if (!dsp66_video_kernel_filtersize_type) {
+ dsp66_video_kernel_filtersize_type = g_enum_register_static ("GstDsp66VideoKernelFilterSize",
+ dsp66_video_kernel_filtersizes);
}
- return dsp66_video_kernel_size_type;
+ return dsp66_video_kernel_filtersize_type;
}
static GType
-gst_dsp66_video_kerneltype_size_get_type (void)
+gst_dsp66_video_kerneltype_get_type (void)
{
- static GType dsp66_video_kerneltype_size_type = 0;
+ static GType dsp66_video_kerneltype_type = 0;
- if (!dsp66_video_kerneltype_size_type) {
- dsp66_video_kerneltype_size_type = g_enum_register_static ("GstDsp66VideoKernelTypeSize",
- dsp66_video_kerneltype_sizes);
+ if (!dsp66_video_kerneltype_type) {
+ dsp66_video_kerneltype_type = g_enum_register_static ("GstDsp66VideoKernelType", dsp66_video_kerneltype);
}
- return dsp66_video_kerneltype_size_type;
+ return dsp66_video_kerneltype_type;
}
#define gst_dsp66_video_kernel_parent_class parent_class
gobject_class->get_property = gst_dsp66_video_kernel_get_property;
g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_FILTERSIZE,
- g_param_spec_enum ("filtersize", "Filtersize", "The size of the filter (5 or 9)",
- GST_TYPE_VIDEO_KERNEL_SIZE, DEFAULT_FILTERSIZE,
+ g_param_spec_enum ("filtersize", "Filtersize", "The size of the filter (5,9,25)",
+ GST_TYPE_VIDEO_KERNEL_FILTERSIZE, DEFAULT_FILTERSIZE,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_KERNELTYPE,
- g_param_spec_enum ("kerneltype", "Kerneltype", "Type of kernel (0=median, 1=sobel)",
- GST_TYPE_VIDEO_KERNELTYPE_SIZE, DEFAULT_KERNELTYPE,
+ g_param_spec_enum ("kerneltype", "Kerneltype", "Type of kernel (0=median, 1=sobel 2=conv 3=arbitrary)",
+ GST_TYPE_VIDEO_KERNELTYPE, DEFAULT_KERNELTYPE,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_LUM_ONLY,
gst_static_pad_template_get (&dsp66_video_kernel_sink_factory));
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&dsp66_video_kernel_src_factory));
- gst_element_class_set_static_metadata (gstelement_class, "Video kernels (choose: kerneltype, filtersize, lum-only)",
+ gst_element_class_set_static_metadata (gstelement_class, "Video kernels (choose: kerneltype, filtersize, lum-only, kernelname (opt))",
"Video Kernel",
"Apply a kernel via DSP C66 offload to an image",
"based on work by: Wim Taymans <wim.taymans@gmail.com>");
{
GstDsp66VideoKernel *kernel = GST_DSP66_VIDEO_KERNEL (filter);
- if(imgproc (kernel->kerneltype, kernel->filtersize,
+ if(imgproc (kernel->kerneltype, kernel->filtersize, kernel->arbkernel,
GST_VIDEO_FRAME_PLANE_DATA (out_frame, 0),
GST_VIDEO_FRAME_PLANE_STRIDE (out_frame, 0),
GST_VIDEO_FRAME_PLANE_DATA (in_frame, 0),
@@ -243,6 +242,9 @@ gst_dsp66_video_kernel_get_property (GObject * object, guint prop_id, GValue * v
case PROP_LUM_ONLY:
g_value_set_boolean (value, kernel->lum_only);
break;
+ case PROP_KERNELTYPE:
+ g_value_set_enum (value, kernel->kerneltype);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
index 3c35ae2bb882fbb2f2f34c11fc123ff4bab432e7..7cb2c72958ff6091f5fd0a90aede0caa14d697ae 100644 (file)
typedef enum
{
- GST_DSP66_VIDEO_KERNEL_SIZE_5 = 5,
- GST_DSP66_VIDEO_KERNEL_SIZE_9 = 9
-} GstDsp66VideoKernelSize;
+ GST_DSP66_VIDEO_KERNEL_FILTERSIZE_5 = 5,
+ GST_DSP66_VIDEO_KERNEL_FILTERSIZE_9 = 9,
+} GstDsp66VideoKernelFilterSize;
typedef enum {
GST_DSP66_VIDEO_KERNELTYPE_MEDIAN = 0,
struct _GstDsp66VideoKernel {
GstVideoFilter parent;
- GstDsp66VideoKernelSize filtersize;
+ GstDsp66VideoKernelFilterSize filtersize;
GstDsp66VideoKernelType kerneltype;
gboolean lum_only;
};
index 7d070e1c3da51b5919adb1f08f49c29c436dcbc8..601ea32807d43646d94e49d0bb2e35032dd1d1b2 100644 (file)
using namespace cl;
using namespace std;
-static const int NumElements = 1920 * 1200; /* Maximum resolution */
-
-static cl_uchar src [NumElements];
-static cl_uchar dst [NumElements];
-
static int oclconv_imgproc(char *kernelName, unsigned char *data_in, unsigned char *data_out, int width, int height, int sstride, int dstride)
{
cl_int err = CL_SUCCESS;
- int bufsize = sizeof(src);
+ int bufsize = sstride * height * sizeof(unsigned char);
#ifdef VERBOSE
ofstream logfile;
logfile.open ("/home/root/oclconv_log.txt", ios::out | ios::app);
logfile << "Entered oclconv_test, width=" << width << " height=" << height << " dstride=" << dstride << " sstride=" << sstride << '\n';
logfile.close();
-#endif
- unsigned char *ptr_src = src;
- unsigned char *ptr_data_in = data_in;
- for (int y=0; y < height; y++)
- {
- memcpy (ptr_src, ptr_data_in, width);
- ptr_src += sstride;
- ptr_data_in += sstride;
- }
-#ifdef VERBOSE
- logfile.open ("/home/root/oclconv_log.txt", ios::out | ios::app);
- logfile << "Transfer done, starting openCL specific commands" << '\n';
- logfile.close();
#endif
try
{
@@ -89,29 +71,12 @@ static int oclconv_imgproc(char *kernelName, unsigned char *data_in, unsigned ch
CommandQueue Q(context, devices[0], CL_QUEUE_PROFILING_ENABLE);
- Q.enqueueWriteBuffer(bufA, CL_FALSE, 0, bufsize, src, NULL, &ev1);
- //Q.enqueueNDRangeKernel(kernel, NullRange, NDRange(NumVecElements),
- // NDRange(WorkGroupSize), NULL, &ev3);
+ Q.enqueueWriteBuffer(bufA, CL_FALSE, 0, bufsize, data_in, NULL, &ev1);
Q.enqueueTask (kernel, NULL, &ev3);
- Q.enqueueReadBuffer (bufDst, CL_TRUE, 0, bufsize, dst, NULL, &ev4);
+ Q.enqueueReadBuffer (bufDst, CL_TRUE, 0, bufsize, data_out, NULL, &ev4);
}
catch (Error err)
- { cerr << "ERROR: " << err.what() << "(" << err.err() << ")" << endl; }
-#ifdef VERBOSE
- logfile.open ("/home/root/oclconv_log.txt", ios::out | ios::app);
- logfile << "OpenCL done, start transfer to output array!" << '\n';
- logfile.close();
-#endif
-
- unsigned char *ptr_dst = dst;
- unsigned char *ptr_data_out = data_out;
- for (int y=0; y < height; y++)
- {
- memcpy (ptr_data_out, ptr_dst, width);
- ptr_dst += dstride;
- ptr_data_out += dstride;
- }
-
+ { cerr << "ERROR: " << err.what() << "(" << err.err() << ")" << endl; return -1; }
#ifdef VERBOSE
logfile.open ("/home/root/oclconv_log.txt", ios::out | ios::app);
logfile << "Success!" << endl;
return 0;
}
+
#ifdef __cplusplus
extern "C" {
#endif