Exemple #1
0
void verifyArguments(int nlhs, mxArray *plhs[], int nrhs, mxArray const *prhs[]){
	/* Throw an error if the input is not a GPU array. */
	// mexFunction arguments (Aval, rowInd, colInd, nnz, rows, cols, b, K)
	if (nrhs < 8){
		cudaDeviceReset();
		printUsage();
		mexErrMsgIdAndTxt(errId, "Invalid Input argument: nrhs < 8");
	}
	else if(!(mxIsGPUArray(prhs[0]))){
		cudaDeviceReset();
		printUsage();
        mexErrMsgIdAndTxt(errId, "Invalid Input argument: prhs[0] is not a GPU array");
	}
	else if(!(mxIsGPUArray(prhs[1]))){
		cudaDeviceReset();
		printUsage();
        mexErrMsgIdAndTxt(errId, "Invalid Input argument: prhs[1] is not a GPU array");
	}
	else if(!(mxIsGPUArray(prhs[2]))){
		cudaDeviceReset();
		printUsage();
        mexErrMsgIdAndTxt(errId, "Invalid Input argument: prhs[2] is not a GPU array");
	}
	else if(!(mxIsGPUArray(prhs[6]))){
		cudaDeviceReset();
		printUsage();
        mexErrMsgIdAndTxt(errId, "Invalid Input argument: prhs[6] is not a GPU array");
	}
}
///////////////////////////////////////////////////////////////////////////
// Check inputs
///////////////////////////////////////////////////////////////////////////
void checkInputs(int nrhs, const mxArray *prhs[])
{    
    const mwSize * tdims, * fdims;

    // Check number of inputs
    if (nrhs != 2)
    {
        mexErrMsgTxt("Incorrect number of inputs. Function expects 2 inputs.");
    }

    // Inputs must be gpuArrays
    if (!mxIsGPUArray(prhs[0]) || !mxIsGPUArray(prhs[1]))
    {
        mexErrMsgTxt("Both input images must be stored in gpuArrays."); 
    }
    const mxGPUArray * img1 = mxGPUCreateFromMxArray(prhs[0]);
    const mxGPUArray * img2 = mxGPUCreateFromMxArray(prhs[1]);

    // Check input dimensions
    tdims = mxGPUGetDimensions(img1);
    fdims = mxGPUGetDimensions(img2);

    mwSize ndimsImg1 = mxGPUGetNumberOfDimensions(img1);
    mwSize ndimsImg2 = mxGPUGetNumberOfDimensions(img2);

	// Clean-up headers. Data is not deleted.
	mxGPUDestroyGPUArray(img1);
	mxGPUDestroyGPUArray(img2);

    if (ndimsImg1 > 2)
    {
        mexErrMsgTxt("Incorrect number of dimensions. First input must be a matrix.");
    }

    if (ndimsImg2 > 2)
    {
        mexErrMsgTxt("Incorrect number of dimensions. Second input must be a matrix.");
    }

    if (tdims[0] > fdims[0])
    {
        mexErrMsgTxt("Template should be smaller than image.");
    }

    if (tdims[1] > fdims[1])
    {
        mexErrMsgTxt("Template should be smaller than image.");
    }    

    if (!isGPUDataUINT8(prhs[0]) || !isGPUDataUINT8(prhs[1]))
    {       
        mexErrMsgTxt("Input image must be a gpuArray with uint8 data.");
    }
}