您的位置:首页 > 移动开发 > Android开发

在android上使用opencv的ocl模块遇到的问题(一)

2017-02-08 16:16 567 查看
运行系统:一个裁剪版的android系统

使用的核函数:pyrlk.cl

由于opencl的机制的问题,在第一次运行的时候会产生*.clb文件,我在产生lkSparse_C1_D5的kernel时出现错误,而之前的pyrDown_C1_D5等kernel都顺利完成。

报错信息:"

BUILD LOG: pyrlk: -D DOUBLE_SUPPORT

<source>:676:11: error: using invalid qualifier with sampler type

sampler_t sampleri     = CLK_NORMALIZED_COORDS_FALSE | CLK_ADDRESS_CLAMP_TO_EDGE | CLK_FILTER_NEAREST;

          ^

error: Compiler frontend failed (error code 58)

OpenCV Error: Gpu API call (CL_BUILD_PROGRAM_FAILURE) in _cl_program* cv::ocl::ProgramFileCache::getOrBuildProgram(const cv::ocl::Context*, const cv::ocl::ProgramEntry*, const string&), file /home/mrqsun/opencv/opencv-2.4.13/modules/ocl/src/cl_programcache.cpp,
line 454

"

报错解析:一般出现CL_BUILD_PROGRAM_FAILURE这种错误,是clBuildProgram失败的意思,失败的原因一般是存在语法错误,然后根据BUILD LOG的信息,定位语法出错的地方,然后进行修改。

opencl相关的宏,在cl.h里面定义的,cl.h一般在系统路径include/CL下面。针对ocl模块,我们在打印一些状态值调试的时候,根据打印的宏的值,取cl.h里面找对应的状态,然后确定走哪一个分支。

根据错误信息定位,修改

sampler_t sampleri     = CLK_NORMALIZED_COORDS_FALSE | CLK_ADDRESS_CLAMP_TO_EDGE | CLK_FILTER_NEAREST;



const sampler_t sampleri     = CLK_NORMALIZED_COORDS_FALSE | CLK_ADDRESS_CLAMP_TO_EDGE | CLK_FILTER_NEAREST;

不再报错。

总结:ocl模块的opencl下面是写好的一些核函数,里面有得可能存在语法错误,根据报错与opencl的语法规则进行相应修改。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: