int copyDataToRasterElement(DataElement* pElement, DataPointerArgs* pArgs, void* pData) { RasterElement* pRaster = dynamic_cast<RasterElement*>(pElement); if (pRaster == NULL || pData == NULL) { setLastError(SIMPLE_BAD_PARAMS); return 1; } const RasterDataDescriptor* pDesc = static_cast<const RasterDataDescriptor*>(pRaster->getDataDescriptor()); void* pRawData = pRaster->getRawData(); if (pArgs == NULL && pRawData != NULL) { size_t len = pDesc->getRowCount() * pDesc->getColumnCount() * pDesc->getBandCount() * pDesc->getBytesPerElement(); memcpy(pRawData, pData, len); setLastError(SIMPLE_NO_ERROR); return 0; } DataPointerArgs args = { 0, pDesc->getRowCount() - 1, 0, pDesc->getColumnCount() - 1, 0, pDesc->getBandCount() - 1, 0 }; switch (pDesc->getInterleaveFormat()) { case BSQ: args.interleaveFormat = 0; break; case BIP: args.interleaveFormat = 1; break; case BIL: args.interleaveFormat = 2; break; } if (pArgs == NULL) { pArgs = &args; } bool success = true; switchOnComplexEncoding(pDesc->getDataType(), copySubcube, pData, pRaster, pArgs->rowStart, pArgs->rowEnd, pArgs->columnStart, pArgs->columnEnd, pArgs->bandStart, pArgs->bandEnd, true, success); if (!success) { setLastError(SIMPLE_OTHER_FAILURE); return 1; } setLastError(SIMPLE_NO_ERROR); return 0; }
void ConvolutionFilterShell::ConvolutionFilterThread::run() { EncodingType encoding = static_cast<const RasterDataDescriptor*>( mInput.mpRaster->getDataDescriptor())->getDataType(); switchOnComplexEncoding(encoding, convolve, NULL); }
void* createDataPointer(DataElement* pElement, DataPointerArgs* pArgs, int* pOwn) { RasterElement* pRaster = dynamic_cast<RasterElement*>(pElement); if (pRaster == NULL || pOwn == NULL) { setLastError(SIMPLE_BAD_PARAMS); return NULL; } void* pRawData = pRaster->getRawData(); if (pArgs == NULL && pRawData != NULL) { *pOwn = 0; setLastError(SIMPLE_NO_ERROR); return pRawData; } *pOwn = 1; const RasterDataDescriptor* pDesc = static_cast<const RasterDataDescriptor*>(pRaster->getDataDescriptor()); DataPointerArgs args = { 0, pDesc->getRowCount() - 1, 0, pDesc->getColumnCount() - 1, 0, pDesc->getBandCount() - 1, 0 }; switch (pDesc->getInterleaveFormat()) { case BSQ: args.interleaveFormat = 0; break; case BIP: args.interleaveFormat = 1; break; case BIL: args.interleaveFormat = 2; break; } if (pArgs == NULL) { pArgs = &args; } unsigned int rowCount = pArgs->rowEnd - pArgs->rowStart + 1; unsigned int columnCount = pArgs->columnEnd - pArgs->columnStart + 1; unsigned int bandCount = pArgs->bandEnd - pArgs->bandStart + 1; pRawData = new (std::nothrow) char[rowCount * columnCount * bandCount * pDesc->getBytesPerElement()]; if (pRawData == NULL) { setLastError(SIMPLE_NO_MEM); return NULL; } bool success = true; switchOnComplexEncoding(pDesc->getDataType(), copySubcube, pRawData, pRaster, pArgs->rowStart, pArgs->rowEnd, pArgs->columnStart, pArgs->columnEnd, pArgs->bandStart, pArgs->bandEnd, false, success); if (!success) { delete [] pRawData; setLastError(SIMPLE_OTHER_FAILURE); return NULL; } setLastError(SIMPLE_NO_ERROR); return pRawData; }