1. Following condition is True on each iteration becuase -1 % 0xFF is 255 not -1
code = cv2.waitKey(100) % 0x100
if code != -1:
break
this were resetting point position on each cycle not on key press as intended
2. Previous small bug were masking serious bug with matrix operation on matrices of incorrect size.
As the result on 2nd iteration of internal cycle program has crushed.
I have fixed it too, matrix operation was taken from examples/cpp/kalman.cpp where it looks like
randn( processNoise, Scalar(0), Scalar::all(sqrt(KF.processNoiseCov.at<float>(0, 0))));
which is something totally different from previous code here.
Example behave as it should now, i.e. point moving by circle trajectory as in C++ example.
See the below code snippet:
while(l_counter != 0)
{
int mod = l_counter % LOCAL_TOTAL;
int pix_per_thr = l_counter / LOCAL_TOTAL + ((lid < mod) ? 1 : 0);
for (int i = 0; i < pix_per_thr; ++i)
{
int index = atomic_dec(&l_counter) - 1;
....
}
....
barrier(CLK_LOCAL_MEM_FENCE);
}
If we don't put a barrier before the for loop, then there is a possiblity
that some work item enter this loop but the others are not, the the l_counter
will be reduced in the for loop and may be changed to zero, and the other
work items may can't enter the while loop. If this happens, it breaks the
barrier's rule which requires all the work items reach the same barrier.
And it may hang the GPU depends on the implementation of opencl platform.
This issue is raised at:
https://github.com/Itseez/opencv/issues/5175
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>