aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDjordje Senicic2016-03-22 19:31:45 -0500
committerDjordje Senicic2016-03-22 19:31:45 -0500
commit5a10937564728c0c5446de867b7b53fe0733c88c (patch)
treed6ad29498706af32252eb3ecce007497a21ff611
parent80a98fa0adfef7250a82cdc0ae6f21cab8dbde27 (diff)
downloadgst-plugin-dsp66-5a10937564728c0c5446de867b7b53fe0733c88c.tar.gz
gst-plugin-dsp66-5a10937564728c0c5446de867b7b53fe0733c88c.tar.xz
gst-plugin-dsp66-5a10937564728c0c5446de867b7b53fe0733c88c.zip
Code cleanup
-rw-r--r--src/gstdsp66videokernel.c50
-rw-r--r--src/gstdsp66videokernel.h8
-rw-r--r--src/kernels/oclconv/oclconv.cpp44
3 files changed, 35 insertions, 67 deletions
diff --git a/src/gstdsp66videokernel.c b/src/gstdsp66videokernel.c
index b273e4b..525c768 100644
--- a/src/gstdsp66videokernel.c
+++ b/src/gstdsp66videokernel.c
@@ -55,42 +55,41 @@ enum
55 PROP_KERNELTYPE 55 PROP_KERNELTYPE
56}; 56};
57 57
58#define GST_TYPE_VIDEO_KERNEL_SIZE (gst_dsp66_video_kernel_size_get_type()) 58#define GST_TYPE_VIDEO_KERNEL_FILTERSIZE (gst_dsp66_video_kernel_filtersize_get_type())
59#define GST_TYPE_VIDEO_KERNELTYPE_SIZE (gst_dsp66_video_kerneltype_size_get_type()) 59#define GST_TYPE_VIDEO_KERNELTYPE (gst_dsp66_video_kerneltype_get_type())
60 60
61static const GEnumValue dsp66_video_kernel_sizes[] = { 61static const GEnumValue dsp66_video_kernel_filtersizes[] = {
62 {GST_DSP66_VIDEO_KERNEL_SIZE_5, "Kernel of 5 neighbour pixels", "5"}, 62 {GST_DSP66_VIDEO_KERNEL_FILTERSIZE_5, "Kernel of 5 neighbour pixels", "5"},
63 {GST_DSP66_VIDEO_KERNEL_SIZE_9, "Kernel of 9 neighbour pixels", "9"}, 63 {GST_DSP66_VIDEO_KERNEL_FILTERSIZE_9, "Kernel of 9 neighbour pixels", "9"},
64 {0, NULL, NULL}, 64 {0, NULL, NULL},
65}; 65};
66static const GEnumValue dsp66_video_kerneltype_sizes[] = { 66static const GEnumValue dsp66_video_kerneltype[] = {
67 {GST_DSP66_VIDEO_KERNELTYPE_MEDIAN, "Kernel median", "0"}, 67 {GST_DSP66_VIDEO_KERNELTYPE_MEDIAN, "Kernel median", "0"},
68 {GST_DSP66_VIDEO_KERNELTYPE_SOBEL, "Kernel sobel", "1"}, 68 {GST_DSP66_VIDEO_KERNELTYPE_SOBEL, "Kernel sobel", "1"},
69 {0, NULL, NULL}, 69 {0, NULL, NULL},
70}; 70};
71 71
72static GType 72static GType
73gst_dsp66_video_kernel_size_get_type (void) 73gst_dsp66_video_kernel_filtersize_get_type (void)
74{ 74{
75 static GType dsp66_video_kernel_size_type = 0; 75 static GType dsp66_video_kernel_filtersize_type = 0;
76 76
77 if (!dsp66_video_kernel_size_type) { 77 if (!dsp66_video_kernel_filtersize_type) {
78 dsp66_video_kernel_size_type = g_enum_register_static ("GstDsp66VideoKernelSize", 78 dsp66_video_kernel_filtersize_type = g_enum_register_static ("GstDsp66VideoKernelFilterSize",
79 dsp66_video_kernel_sizes); 79 dsp66_video_kernel_filtersizes);
80 } 80 }
81 return dsp66_video_kernel_size_type; 81 return dsp66_video_kernel_filtersize_type;
82} 82}
83 83
84static GType 84static GType
85gst_dsp66_video_kerneltype_size_get_type (void) 85gst_dsp66_video_kerneltype_get_type (void)
86{ 86{
87 static GType dsp66_video_kerneltype_size_type = 0; 87 static GType dsp66_video_kerneltype_type = 0;
88 88
89 if (!dsp66_video_kerneltype_size_type) { 89 if (!dsp66_video_kerneltype_type) {
90 dsp66_video_kerneltype_size_type = g_enum_register_static ("GstDsp66VideoKernelTypeSize", 90 dsp66_video_kerneltype_type = g_enum_register_static ("GstDsp66VideoKernelType", dsp66_video_kerneltype);
91 dsp66_video_kerneltype_sizes);
92 } 91 }
93 return dsp66_video_kerneltype_size_type; 92 return dsp66_video_kerneltype_type;
94} 93}
95 94
96#define gst_dsp66_video_kernel_parent_class parent_class 95#define gst_dsp66_video_kernel_parent_class parent_class
@@ -119,13 +118,13 @@ gst_dsp66_video_kernel_class_init (GstDsp66VideoKernelClass * klass)
119 gobject_class->get_property = gst_dsp66_video_kernel_get_property; 118 gobject_class->get_property = gst_dsp66_video_kernel_get_property;
120 119
121 g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_FILTERSIZE, 120 g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_FILTERSIZE,
122 g_param_spec_enum ("filtersize", "Filtersize", "The size of the filter (5 or 9)", 121 g_param_spec_enum ("filtersize", "Filtersize", "The size of the filter (5,9,25)",
123 GST_TYPE_VIDEO_KERNEL_SIZE, DEFAULT_FILTERSIZE, 122 GST_TYPE_VIDEO_KERNEL_FILTERSIZE, DEFAULT_FILTERSIZE,
124 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 123 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
125 124
126 g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_KERNELTYPE, 125 g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_KERNELTYPE,
127 g_param_spec_enum ("kerneltype", "Kerneltype", "Type of kernel (0=median, 1=sobel)", 126 g_param_spec_enum ("kerneltype", "Kerneltype", "Type of kernel (0=median, 1=sobel 2=conv 3=arbitrary)",
128 GST_TYPE_VIDEO_KERNELTYPE_SIZE, DEFAULT_KERNELTYPE, 127 GST_TYPE_VIDEO_KERNELTYPE, DEFAULT_KERNELTYPE,
129 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 128 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
130 129
131 g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_LUM_ONLY, 130 g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_LUM_ONLY,
@@ -137,7 +136,7 @@ gst_dsp66_video_kernel_class_init (GstDsp66VideoKernelClass * klass)
137 gst_static_pad_template_get (&dsp66_video_kernel_sink_factory)); 136 gst_static_pad_template_get (&dsp66_video_kernel_sink_factory));
138 gst_element_class_add_pad_template (gstelement_class, 137 gst_element_class_add_pad_template (gstelement_class,
139 gst_static_pad_template_get (&dsp66_video_kernel_src_factory)); 138 gst_static_pad_template_get (&dsp66_video_kernel_src_factory));
140 gst_element_class_set_static_metadata (gstelement_class, "Video kernels (choose: kerneltype, filtersize, lum-only)", 139 gst_element_class_set_static_metadata (gstelement_class, "Video kernels (choose: kerneltype, filtersize, lum-only, kernelname (opt))",
141 "Video Kernel", 140 "Video Kernel",
142 "Apply a kernel via DSP C66 offload to an image", 141 "Apply a kernel via DSP C66 offload to an image",
143 "based on work by: Wim Taymans <wim.taymans@gmail.com>"); 142 "based on work by: Wim Taymans <wim.taymans@gmail.com>");
@@ -171,7 +170,7 @@ gst_dsp66_video_kernel_transform_frame (GstVideoFilter * filter,
171{ 170{
172 GstDsp66VideoKernel *kernel = GST_DSP66_VIDEO_KERNEL (filter); 171 GstDsp66VideoKernel *kernel = GST_DSP66_VIDEO_KERNEL (filter);
173 172
174 if(imgproc (kernel->kerneltype, kernel->filtersize, 173 if(imgproc (kernel->kerneltype, kernel->filtersize, kernel->arbkernel,
175 GST_VIDEO_FRAME_PLANE_DATA (out_frame, 0), 174 GST_VIDEO_FRAME_PLANE_DATA (out_frame, 0),
176 GST_VIDEO_FRAME_PLANE_STRIDE (out_frame, 0), 175 GST_VIDEO_FRAME_PLANE_STRIDE (out_frame, 0),
177 GST_VIDEO_FRAME_PLANE_DATA (in_frame, 0), 176 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
243 case PROP_LUM_ONLY: 242 case PROP_LUM_ONLY:
244 g_value_set_boolean (value, kernel->lum_only); 243 g_value_set_boolean (value, kernel->lum_only);
245 break; 244 break;
245 case PROP_KERNELTYPE:
246 g_value_set_enum (value, kernel->kerneltype);
247 break;
246 default: 248 default:
247 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); 249 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
248 break; 250 break;
diff --git a/src/gstdsp66videokernel.h b/src/gstdsp66videokernel.h
index 3c35ae2..7cb2c72 100644
--- a/src/gstdsp66videokernel.h
+++ b/src/gstdsp66videokernel.h
@@ -44,9 +44,9 @@ typedef struct _GstDsp66VideoKernelClass GstDsp66VideoKernelClass;
44 44
45typedef enum 45typedef enum
46{ 46{
47 GST_DSP66_VIDEO_KERNEL_SIZE_5 = 5, 47 GST_DSP66_VIDEO_KERNEL_FILTERSIZE_5 = 5,
48 GST_DSP66_VIDEO_KERNEL_SIZE_9 = 9 48 GST_DSP66_VIDEO_KERNEL_FILTERSIZE_9 = 9,
49} GstDsp66VideoKernelSize; 49} GstDsp66VideoKernelFilterSize;
50 50
51typedef enum { 51typedef enum {
52 GST_DSP66_VIDEO_KERNELTYPE_MEDIAN = 0, 52 GST_DSP66_VIDEO_KERNELTYPE_MEDIAN = 0,
@@ -55,7 +55,7 @@ typedef enum {
55 55
56struct _GstDsp66VideoKernel { 56struct _GstDsp66VideoKernel {
57 GstVideoFilter parent; 57 GstVideoFilter parent;
58 GstDsp66VideoKernelSize filtersize; 58 GstDsp66VideoKernelFilterSize filtersize;
59 GstDsp66VideoKernelType kerneltype; 59 GstDsp66VideoKernelType kerneltype;
60 gboolean lum_only; 60 gboolean lum_only;
61}; 61};
diff --git a/src/kernels/oclconv/oclconv.cpp b/src/kernels/oclconv/oclconv.cpp
index 7d070e1..601ea32 100644
--- a/src/kernels/oclconv/oclconv.cpp
+++ b/src/kernels/oclconv/oclconv.cpp
@@ -37,34 +37,16 @@
37using namespace cl; 37using namespace cl;
38using namespace std; 38using namespace std;
39 39
40static const int NumElements = 1920 * 1200; /* Maximum resolution */
41
42static cl_uchar src [NumElements];
43static cl_uchar dst [NumElements];
44
45static int oclconv_imgproc(char *kernelName, unsigned char *data_in, unsigned char *data_out, int width, int height, int sstride, int dstride) 40static int oclconv_imgproc(char *kernelName, unsigned char *data_in, unsigned char *data_out, int width, int height, int sstride, int dstride)
46{ 41{
47 cl_int err = CL_SUCCESS; 42 cl_int err = CL_SUCCESS;
48 int bufsize = sizeof(src); 43 int bufsize = sstride * height * sizeof(unsigned char);
49#ifdef VERBOSE 44#ifdef VERBOSE
50 ofstream logfile; 45 ofstream logfile;
51 logfile.open ("/home/root/oclconv_log.txt", ios::out | ios::app); 46 logfile.open ("/home/root/oclconv_log.txt", ios::out | ios::app);
52 logfile << "Entered oclconv_test, width=" << width << " height=" << height << " dstride=" << dstride << " sstride=" << sstride << '\n'; 47 logfile << "Entered oclconv_test, width=" << width << " height=" << height << " dstride=" << dstride << " sstride=" << sstride << '\n';
53 logfile.close(); 48 logfile.close();
54#endif 49#endif
55 unsigned char *ptr_src = src;
56 unsigned char *ptr_data_in = data_in;
57 for (int y=0; y < height; y++)
58 {
59 memcpy (ptr_src, ptr_data_in, width);
60 ptr_src += sstride;
61 ptr_data_in += sstride;
62 }
63#ifdef VERBOSE
64 logfile.open ("/home/root/oclconv_log.txt", ios::out | ios::app);
65 logfile << "Transfer done, starting openCL specific commands" << '\n';
66 logfile.close();
67#endif
68 try 50 try
69 { 51 {
70 Context context(CL_DEVICE_TYPE_ACCELERATOR); 52 Context context(CL_DEVICE_TYPE_ACCELERATOR);
@@ -89,29 +71,12 @@ static int oclconv_imgproc(char *kernelName, unsigned char *data_in, unsigned ch
89 71
90 CommandQueue Q(context, devices[0], CL_QUEUE_PROFILING_ENABLE); 72 CommandQueue Q(context, devices[0], CL_QUEUE_PROFILING_ENABLE);
91 73
92 Q.enqueueWriteBuffer(bufA, CL_FALSE, 0, bufsize, src, NULL, &ev1); 74 Q.enqueueWriteBuffer(bufA, CL_FALSE, 0, bufsize, data_in, NULL, &ev1);
93 //Q.enqueueNDRangeKernel(kernel, NullRange, NDRange(NumVecElements),
94 // NDRange(WorkGroupSize), NULL, &ev3);
95 Q.enqueueTask (kernel, NULL, &ev3); 75 Q.enqueueTask (kernel, NULL, &ev3);
96 Q.enqueueReadBuffer (bufDst, CL_TRUE, 0, bufsize, dst, NULL, &ev4); 76 Q.enqueueReadBuffer (bufDst, CL_TRUE, 0, bufsize, data_out, NULL, &ev4);
97 } 77 }
98 catch (Error err) 78 catch (Error err)
99 { cerr << "ERROR: " << err.what() << "(" << err.err() << ")" << endl; } 79 { cerr << "ERROR: " << err.what() << "(" << err.err() << ")" << endl; return -1; }
100#ifdef VERBOSE
101 logfile.open ("/home/root/oclconv_log.txt", ios::out | ios::app);
102 logfile << "OpenCL done, start transfer to output array!" << '\n';
103 logfile.close();
104#endif
105
106 unsigned char *ptr_dst = dst;
107 unsigned char *ptr_data_out = data_out;
108 for (int y=0; y < height; y++)
109 {
110 memcpy (ptr_data_out, ptr_dst, width);
111 ptr_dst += dstride;
112 ptr_data_out += dstride;
113 }
114
115#ifdef VERBOSE 80#ifdef VERBOSE
116 logfile.open ("/home/root/oclconv_log.txt", ios::out | ios::app); 81 logfile.open ("/home/root/oclconv_log.txt", ios::out | ios::app);
117 logfile << "Success!" << endl; 82 logfile << "Success!" << endl;
@@ -120,6 +85,7 @@ static int oclconv_imgproc(char *kernelName, unsigned char *data_in, unsigned ch
120 return 0; 85 return 0;
121} 86}
122 87
88
123#ifdef __cplusplus 89#ifdef __cplusplus
124extern "C" { 90extern "C" {
125#endif 91#endif