Fix a bug in addWeighted x64 mode
authoryao <bitwangyaoyao@gmail.com>
Fri, 1 Mar 2013 10:08:53 +0000 (18:08 +0800)
committeryao <bitwangyaoyao@gmail.com>
Fri, 1 Mar 2013 10:08:53 +0000 (18:08 +0800)
And a potential problem in remap

modules/ocl/src/arithm.cpp
modules/ocl/src/imgproc.cpp

index a7e4fd9..4e2c819 100644 (file)
@@ -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<pair<size_t , const void *> > 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 ));
index 8fbada1..9b6cf74 100644 (file)
@@ -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));
                 }
             }