From 65bb4250a450128980c51463ee938c27062294ed Mon Sep 17 00:00:00 2001 From: yao Date: Fri, 1 Mar 2013 18:08:53 +0800 Subject: [PATCH] Fix a bug in addWeighted x64 mode And a potential problem in remap --- modules/ocl/src/arithm.cpp | 11 +++++++---- modules/ocl/src/imgproc.cpp | 5 +++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/modules/ocl/src/arithm.cpp b/modules/ocl/src/arithm.cpp index a7e4fd9..4e2c819 100644 --- a/modules/ocl/src/arithm.cpp +++ b/modules/ocl/src/arithm.cpp @@ -2123,12 +2123,16 @@ void cv::ocl::addWeighted(const oclMat &src1, double alpha, const oclMat &src2, }; int dst_step1 = dst.cols * dst.elemSize(); + int src1_step = (int) src1.step; + int src2_step = (int) src2.step; + int dst_step = (int) dst.step; + float alpha_f = alpha, beta_f = beta, gama_f = gama; vector > args; args.push_back( make_pair( sizeof(cl_mem), (void *)&src1.data )); - args.push_back( make_pair( sizeof(cl_int), (void *)&src1.step )); + args.push_back( make_pair( sizeof(cl_int), (void *)&src1_step )); args.push_back( make_pair( sizeof(cl_int), (void *)&src1.offset)); args.push_back( make_pair( sizeof(cl_mem), (void *)&src2.data )); - args.push_back( make_pair( sizeof(cl_int), (void *)&src2.step )); + args.push_back( make_pair( sizeof(cl_int), (void *)&src2_step )); args.push_back( make_pair( sizeof(cl_int), (void *)&src2.offset)); if(src1.clCxt -> impl -> double_support != 0) @@ -2139,14 +2143,13 @@ void cv::ocl::addWeighted(const oclMat &src1, double alpha, const oclMat &src2, } else { - float alpha_f = alpha, beta_f = beta, gama_f = gama; args.push_back( make_pair( sizeof(cl_float), (void *)&alpha_f )); args.push_back( make_pair( sizeof(cl_float), (void *)&beta_f )); args.push_back( make_pair( sizeof(cl_float), (void *)&gama_f )); } args.push_back( make_pair( sizeof(cl_mem), (void *)&dst.data )); - args.push_back( make_pair( sizeof(cl_int), (void *)&dst.step )); + args.push_back( make_pair( sizeof(cl_int), (void *)&dst_step )); args.push_back( make_pair( sizeof(cl_int), (void *)&dst.offset)); args.push_back( make_pair( sizeof(cl_int), (void *)&src1.rows )); args.push_back( make_pair( sizeof(cl_int), (void *)&cols )); diff --git a/modules/ocl/src/imgproc.cpp b/modules/ocl/src/imgproc.cpp index 8fbada1..9b6cf74 100644 --- a/modules/ocl/src/imgproc.cpp +++ b/modules/ocl/src/imgproc.cpp @@ -289,13 +289,14 @@ namespace cv args.push_back( make_pair(sizeof(cl_int), (void *)&map1.cols)); args.push_back( make_pair(sizeof(cl_int), (void *)&map1.rows)); args.push_back( make_pair(sizeof(cl_int), (void *)&cols)); - if(src.clCxt -> impl -> double_support != 0) + float borderFloat[4] = {(float)borderValue[0], (float)borderValue[1], (float)borderValue[2], (float)borderValue[3]}; + + if(src.clCxt -> impl -> double_support != 0) { args.push_back( make_pair(sizeof(cl_double4), (void *)&borderValue)); } else { - float borderFloat[4] = {(float)borderValue[0], (float)borderValue[1], (float)borderValue[2], (float)borderValue[3]}; args.push_back( make_pair(sizeof(cl_float4), (void *)&borderFloat)); } } -- 2.7.4