CPLErr VRTKernelFilteredSource::SetKernel( int nNewKernelSize, bool bSeparable, double *padfNewCoefs ) { if( nNewKernelSize < 1 || (nNewKernelSize % 2) != 1 ) { CPLError( CE_Failure, CPLE_AppDefined, "Illegal filtering kernel size %d, " "must be odd positive number.", nNewKernelSize ); return CE_Failure; } CPLFree( m_padfKernelCoefs ); m_nKernelSize = nNewKernelSize; m_bSeparable = bSeparable; int nKernelBufferSize = m_nKernelSize * (m_bSeparable ? 1 : m_nKernelSize); m_padfKernelCoefs = static_cast<double *>( CPLMalloc(sizeof(double) * nKernelBufferSize ) ); memcpy( m_padfKernelCoefs, padfNewCoefs, sizeof(double) * nKernelBufferSize ); SetExtraEdgePixels( (nNewKernelSize - 1) / 2 ); return CE_None; }
CPLErr VRTKernelFilteredSource::SetKernel( int nNewKernelSize, double *padfNewCoefs ) { if( nNewKernelSize < 1 || (nNewKernelSize % 2) != 1 ) { CPLError( CE_Failure, CPLE_AppDefined, "Illegal filtering kernel size %d, must be odd positive number.", nNewKernelSize ); return CE_Failure; } CPLFree( padfKernelCoefs ); nKernelSize = nNewKernelSize; padfKernelCoefs = (double *) CPLMalloc(sizeof(double) * nKernelSize * nKernelSize ); memcpy( padfKernelCoefs, padfNewCoefs, sizeof(double) * nKernelSize * nKernelSize ); SetExtraEdgePixels( (nNewKernelSize - 1) / 2 ); return CE_None; }