diff options
author | Djordje Senicic | 2016-03-22 19:31:45 -0500 |
---|---|---|
committer | Djordje Senicic | 2016-03-22 19:31:45 -0500 |
commit | 5a10937564728c0c5446de867b7b53fe0733c88c (patch) | |
tree | d6ad29498706af32252eb3ecce007497a21ff611 | |
parent | 80a98fa0adfef7250a82cdc0ae6f21cab8dbde27 (diff) | |
download | gst-plugin-dsp66-5a10937564728c0c5446de867b7b53fe0733c88c.tar.gz gst-plugin-dsp66-5a10937564728c0c5446de867b7b53fe0733c88c.tar.xz gst-plugin-dsp66-5a10937564728c0c5446de867b7b53fe0733c88c.zip |
Code cleanup
-rw-r--r-- | src/gstdsp66videokernel.c | 50 | ||||
-rw-r--r-- | src/gstdsp66videokernel.h | 8 | ||||
-rw-r--r-- | src/kernels/oclconv/oclconv.cpp | 44 |
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 | ||
61 | static const GEnumValue dsp66_video_kernel_sizes[] = { | 61 | static 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 | }; |
66 | static const GEnumValue dsp66_video_kerneltype_sizes[] = { | 66 | static 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 | ||
72 | static GType | 72 | static GType |
73 | gst_dsp66_video_kernel_size_get_type (void) | 73 | gst_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 | ||
84 | static GType | 84 | static GType |
85 | gst_dsp66_video_kerneltype_size_get_type (void) | 85 | gst_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 | ||
45 | typedef enum | 45 | typedef 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 | ||
51 | typedef enum { | 51 | typedef enum { |
52 | GST_DSP66_VIDEO_KERNELTYPE_MEDIAN = 0, | 52 | GST_DSP66_VIDEO_KERNELTYPE_MEDIAN = 0, |
@@ -55,7 +55,7 @@ typedef enum { | |||
55 | 55 | ||
56 | struct _GstDsp66VideoKernel { | 56 | struct _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 @@ | |||
37 | using namespace cl; | 37 | using namespace cl; |
38 | using namespace std; | 38 | using namespace std; |
39 | 39 | ||
40 | static const int NumElements = 1920 * 1200; /* Maximum resolution */ | ||
41 | |||
42 | static cl_uchar src [NumElements]; | ||
43 | static cl_uchar dst [NumElements]; | ||
44 | |||
45 | static int oclconv_imgproc(char *kernelName, unsigned char *data_in, unsigned char *data_out, int width, int height, int sstride, int dstride) | 40 | static 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 |
124 | extern "C" { | 90 | extern "C" { |
125 | #endif | 91 | #endif |