25 #include <linux/videodev2.h>
27 #include <opencv2/core/core.hpp>
28 #include <opencv2/imgproc/imgproc.hpp>
35 JEVOIS_DEFINE_ENUM_CLASS(Effect, (NoEffect) (Blur) (Sobel) (Median) (Mult) (Thresh) (Dilate) (Erode) (Twirl) (Dewarp));
39 Effect::Twirl, Effect_Values, ParamCateg);
105 public jevois::Parameter<effect>
111 itsFilter = addSubComponent<FilterGPU>(
"gpu");
136 LFATAL(
"Input and output image sizes must match");
139 if (outimg.
fmt == V4L2_PIX_FMT_RGB565)
143 itsFilter->process(inimgcv, outimgcv);
144 col = jevois::rgb565::White;
146 else if (outimg.
fmt == V4L2_PIX_FMT_YUYV)
151 itsFilter->process(inimgcv, tmpcv);
152 cv::Mat tmpcvbgr; cv::cvtColor(tmpcv, tmpcvbgr, cv::COLOR_BGR5652BGR);
154 col = jevois::yuyv::White;
156 else LFATAL(
"output format must be RGB565 or YUYV");
159 std::string
const & fpscpu = timer.
stop();
161 std::ostringstream oss; oss <<
"JeVois DemoGPU - Effect: " << effect::get();
170 void onParamChange(effect
const & JEVOIS_UNUSED_PARAM(param), Effect
const & newval)
override
174 case Effect::NoEffect:
175 itsFilter->setProgram(
"shaders/simplevertshader.glsl",
"shaders/simplefragshader.glsl");
179 itsFilter->setProgram(
"shaders/simplevertshader.glsl",
"shaders/blurfragshader.glsl");
183 itsFilter->setProgram(
"shaders/simplevertshader.glsl",
"shaders/sobelfragshader.glsl");
187 itsFilter->setProgram(
"shaders/simplevertshader.glsl",
"shaders/medianfragshader.glsl");
191 itsFilter->setProgram(
"shaders/simplevertshader.glsl",
"shaders/multfragshader.glsl");
195 itsFilter->setProgram(
"shaders/simplevertshader.glsl",
"shaders/threshfragshader.glsl");
199 itsFilter->setProgram(
"shaders/simplevertshader.glsl",
"shaders/dilatefragshader.glsl");
203 itsFilter->setProgram(
"shaders/simplevertshader.glsl",
"shaders/erodefragshader.glsl");
207 itsFilter->setProgram(
"shaders/simplevertshader.glsl",
"shaders/twirlfragshader.glsl");
208 itsFilter->setProgramParam1f(
"twirlamount", 2.0
F);
213 itsFilter->setProgram(
"shaders/dewarpvertshader.glsl",
"shaders/dewarpfragshader.glsl");
218 itsFilter->setProgramParam2f(
"offset", -1.0
F, -1.0
F);
219 itsFilter->setProgramParam2f(
"scale", 2.0
F, 2.0
F);
222 itsFilter->setProgramParam2f(
"offsetd", -1.2
F, -1.2
F);
223 itsFilter->setProgramParam2f(
"scaled", 2.4
F, 2.4
F);
227 std::shared_ptr<FilterGPU> itsFilter;