0

I am using opencl module provided by opencv on Qualcomm Snapdragon 805 Inforce 6501 on android. The problem is that the time taken for the execution of a particular function increases after some iterations. In my case I am using opencv's remap function with oclMat and if I call this function for say about 20 iterations the time taken is around 300 microseconds but if I call it for 50 iteration execution time rises to 50ms after around 25 iterations. I want to know the reason behind this and how can I avoid it. My JNI code is as follows

oclMat oclXMap,oclYMap;
oclMat oclSrc;
oclMat oclDst1;
oclMat oclDst2;

JNIEXPORT void JNICALL Java_com_qualcomm_andor_a360_MainActivity_Upload(JNIEnv * jenv, jclass )
{
    DPRINTF ("JNI call start - v1.36!");
    DevicesInfo devices;
    cv::ocl::getOpenCLDevices(devices);
    DPRINTF("Device Size %d ",devices.size());
    for(int i=0; i<devices.size();i++)
        DPRINTF("Device ID %d ",devices[i]->deviceVendorId);
    setDevice(devices[0]);
    cv::ocl::PlatformsInfo platforms;
    Mat imageSrc = cv::imread("/storage/sdcard0/DCIM/Camera/2048.jpg");
    FileStorage fsx("/storage/sdcard0/DCIM/Camera/FishEyeConversionXmap4.yml",FileStorage::READ);
    FileStorage fsy("/storage/sdcard0/DCIM/Camera/FishEyeConversionYmap4.yml",FileStorage::READ);
    fsx["xMap"] >> xMap1;
    fsy["yMap"] >> yMap1;
    fsx.release();
    fsy.release();
    oclSrc = imageSrc;
    oclDst1 = oclSrc.clone();
    oclDst2 = oclSrc.clone();
    oclXMap= xMap1;
    oclYMap= yMap1;
}

JNIEXPORT void JNICALL Java_com_qualcomm_andor_a360_MainActivity_OpencvRemap()
{
    unsigned long long t1 = GetTime();
    remap(oclSrc,oclDst1,oclXMap,oclYMap,CV_INTER_LINEAR,BORDER_CONSTANT);
    remap(oclSrc,oclDst2,oclXMap,oclYMap,CV_INTER_LINEAR,BORDER_CONSTANT);
    unsigned long long t2 = GetTime();
    DPRINTF("Time taken remap : %llu microseconds for %f ms\n", t2-t1,(float)((t2-t1)/(1000)));     
    //usleep(30*1000);
}
JNIEXPORT void JNICALL Java_com_qualcomm_andor_a360_MainActivity_WriteImage()
{
    Mat dst;
    oclDst1.download(dst);
    DPRINTF("Creating output");
    imwrite("/storage/sdcard0/DCIM/Camera/remapDst.jpg",dst);
}

The java code is as follows

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Upload();
        for(int i=0; i<100; i++)
            OpencvRemap();
        WriteImage();
    }
    private  native  void Upload();
    private  native  void OpencvRemap();
    private  native  void WriteImage();

And following are the debug messages

Time taken remap : 135277 microseconds for 135.000000 ms
Time taken remap: 257 microseconds for 0.000000 ms
Time taken remap: 362 microseconds for 0.000000 ms
Time taken remap: 304 microseconds for 0.000000 ms
Time taken remap: 248 microseconds for 0.000000 ms
Time taken remap: 287 microseconds for 0.000000 ms
Time taken remap: 220 microseconds for 0.000000 ms
Time taken remap: 297 microseconds for 0.000000 ms
Time taken remap: 230 microseconds for 0.000000 ms
Time taken remap: 285 microseconds for 0.000000 ms
Time taken remap: 223 microseconds for 0.000000 ms
Time taken remap: 292 microseconds for 0.000000 ms
Time taken remap: 230 microseconds for 0.000000 ms
Time taken remap: 568 microseconds for 0.000000 ms
Time taken remap: 233 microseconds for 0.000000 ms
Time taken remap: 224 microseconds for 0.000000 ms
Time taken remap: 224 microseconds for 0.000000 ms
Time taken remap: 228 microseconds for 0.000000 ms
Time taken remap: 222 microseconds for 0.000000 ms
Time taken remap: 228 microseconds for 0.000000 ms
Time taken remap: 226 microseconds for 0.000000 ms
Time taken remap: 227 microseconds for 0.000000 ms
Time taken remap: 224 microseconds for 0.000000 ms
Time taken remap: 224 microseconds for 0.000000 ms
Time taken remap: 226 microseconds for 0.000000 ms
Time taken remap: 227 microseconds for 0.000000 ms
Time taken remap: 231 microseconds for 0.000000 ms
Time taken remap: 20266 microseconds for 20.000000 ms
Time taken remap: 293 microseconds for 0.000000 ms
Time taken remap: 230 microseconds for 0.000000 ms
Time taken remap: 26705 microseconds for 26.000000 ms
Time taken remap: 232 microseconds for 0.000000 ms
Time taken remap: 26894 microseconds for 26.000000 ms
Time taken remap: 243 microseconds for 0.000000 ms
Time taken remap: 55111 microseconds for 55.000000 ms
Time taken remap: 54212 microseconds for 54.000000 ms
Time taken remap: 54384 microseconds for 54.000000 ms
Time taken remap: 53455 microseconds for 53.000000 ms
Time taken remap: 54261 microseconds for 54.000000 ms
Time taken remap: 54104 microseconds for 54.000000 ms
Time taken remap: 54478 microseconds for 54.000000 ms
Time taken remap: 54125 microseconds for 54.000000 ms
Time taken remap: 53147 microseconds for 53.000000 ms
Time taken remap: 54190 microseconds for 54.000000 ms
Time taken remap: 53998 microseconds for 53.000000 ms
Time taken remap: 55259 microseconds for 55.000000 ms
Time taken remap: 54153 microseconds for 54.000000 ms
Time taken remap: 54445 microseconds for 54.000000 ms
Time taken remap: 54369 microseconds for 54.000000 ms
Time taken remap: 53930 microseconds for 53.000000 ms
Ahmed_Faraz
  • 615
  • 4
  • 25

0 Answers0