#include "gdalwarper.h"
Public Member Functions | |
CPLErr | Initialize (const GDALWarpOptions *psNewOptions) |
const GDALWarpOptions * | GetOptions () |
CPLErr | ChunkAndWarpImage (int nDstXOff, int nDstYOff, int nDstXSize, int nDstYSize) |
CPLErr | ChunkAndWarpMulti (int nDstXOff, int nDstYOff, int nDstXSize, int nDstYSize) |
CPLErr | WarpRegion (int nDstXOff, int nDstYOff, int nDstXSize, int nDstYSize, int nSrcXOff=0, int nSrcYOff=0, int nSrcXSize=0, int nSrcYSize=0) |
CPLErr | WarpRegionToBuffer (int nDstXOff, int nDstYOff, int nDstXSize, int nDstYSize, void *pDataBuf, GDALDataType eBufDataType, int nSrcXOff=0, int nSrcYOff=0, int nSrcXSize=0, int nSrcYSize=0) |
High level image warping class.
The overall GDAL high performance image warper is split into a few components.
The GDALWarpOptions ChunkAndWarpImage() method is responsible for invoking the WarpRegion() method on appropriate sized output chunks such that the memory required for the output image buffer, input image buffer and any required density and validity buffers is less than or equal to the application defined maximum memory available for use.
It checks the memory requrired by walking the edges of the output region, transforming the locations back into source pixel/line coordinates and establishing a bounding rectangle of source imagery that would be required for the output area. This is actually accomplished by the private GDALWarpOperation::ComputeSourceWindow() method.
Then memory requirements are used by totaling the memory required for all output bands, input bands, validity masks and density masks. If this is greater than the GDALWarpOptions::dfWarpMemoryLimit then the destination region is divided in two (splitting the longest dimension), and ChunkAndWarpImage() recursively invoked on each destination subregion.
Fill in ways in which the validity and density masks may be generated here. Note that detailed semantics of the masks should be found in GDALWarpKernel.
CPLErr GDALWarpOperation::ChunkAndWarpImage | ( | int | nDstXOff, | |
int | nDstYOff, | |||
int | nDstXSize, | |||
int | nDstYSize | |||
) |
This method does a complete warp of the source image to the destination image for the indicated region with the current warp options in effect. Progress is reported to the installed progress monitor, if any.
This function will subdivide the region and recursively call itself until the total memory required to process a region chunk will all fit in the memory pool defined by GDALWarpOptions::dfWarpMemoryLimit.
Once an appropriate region is selected GDALWarpOperation::WarpRegion() is invoked to do the actual work.
nDstXOff | X offset to window of destination data to be produced. | |
nDstYOff | Y offset to window of destination data to be produced. | |
nDstXSize | Width of output window on destination file to be produced. | |
nDstYSize | Height of output window on destination file to be produced. |
References GDALWarpOptions::pfnProgress, GDALWarpOptions::pProgressArg, and WarpRegion().
Referenced by GDALReprojectImage().
CPLErr GDALWarpOperation::ChunkAndWarpMulti | ( | int | nDstXOff, | |
int | nDstYOff, | |||
int | nDstXSize, | |||
int | nDstYSize | |||
) |
This method does a complete warp of the source image to the destination image for the indicated region with the current warp options in effect. Progress is reported to the installed progress monitor, if any.
Externally this method operates the same as ChunkAndWarpImage(), but internally this method uses multiple threads to interleave input/output for one region while the processing is being done for another.
nDstXOff | X offset to window of destination data to be produced. | |
nDstYOff | Y offset to window of destination data to be produced. | |
nDstXSize | Width of output window on destination file to be produced. | |
nDstYSize | Height of output window on destination file to be produced. |
CPLErr GDALWarpOperation::Initialize | ( | const GDALWarpOptions * | psNewOptions | ) |
This method initializes the GDALWarpOperation's concept of the warp options in effect. It creates an internal copy of the GDALWarpOptions structure and defaults a variety of additional fields in the internal copy if not set in the provides warp options.
Defaulting operations include:
psNewOptions | input set of warp options. These are copied and may be destroyed after this call by the application. |
References GDALWarpOptions::dfWarpMemoryLimit, GDALWarpOptions::eWorkingDataType, GDALDataTypeIsComplex(), GDALDataTypeUnion(), GDALGetRasterBand(), GDALGetRasterCount(), GDALGetRasterDataType(), GDT_Byte, GDT_Int16, GDT_Int32, GDT_UInt16, GDT_UInt32, GDALWarpOptions::hDstDS, GDALWarpOptions::hSrcDS, GDALWarpOptions::nBandCount, GDALWarpOptions::padfSrcNoDataImag, GDALWarpOptions::padfSrcNoDataReal, GDALWarpOptions::panDstBands, GDALWarpOptions::panSrcBands, and GDALWarpOptions::papszWarpOptions.
Referenced by GDALCreateWarpOperation(), and GDALReprojectImage().
CPLErr GDALWarpOperation::WarpRegion | ( | int | nDstXOff, | |
int | nDstYOff, | |||
int | nDstXSize, | |||
int | nDstYSize, | |||
int | nSrcXOff = 0 , |
|||
int | nSrcYOff = 0 , |
|||
int | nSrcXSize = 0 , |
|||
int | nSrcYSize = 0 | |||
) |
This method requests the indicated region of the output file be generated.
Note that WarpRegion() will produce the requested area in one low level warp operation without verifying that this does not exceed the stated memory limits for the warp operation. Applications should take care not to call WarpRegion() on too large a region! This function is normally called by ChunkAndWarpImage(), the normal entry point for applications. Use it instead if staying within memory constraints is desired.
Progress is reported from 0.0 to 1.0 for the indicated region.
nDstXOff | X offset to window of destination data to be produced. | |
nDstYOff | Y offset to window of destination data to be produced. | |
nDstXSize | Width of output window on destination file to be produced. | |
nDstYSize | Height of output window on destination file to be produced. |
References GDALWarpOptions::eWorkingDataType, GDALCopyWords(), GDALDatasetRasterIO(), GDALFlushCache(), GDALGetDataTypeSize(), GDT_Byte, GDT_CFloat64, GDT_Float64, GF_Read, GF_Write, GDALWarpOptions::hDstDS, GDALWarpOptions::nBandCount, GDALWarpOptions::padfDstNoDataImag, GDALWarpOptions::padfDstNoDataReal, GDALWarpOptions::panDstBands, GDALWarpOptions::papszWarpOptions, and WarpRegionToBuffer().
Referenced by ChunkAndWarpImage().
CPLErr GDALWarpOperation::WarpRegionToBuffer | ( | int | nDstXOff, | |
int | nDstYOff, | |||
int | nDstXSize, | |||
int | nDstYSize, | |||
void * | pDataBuf, | |||
GDALDataType | eBufDataType, | |||
int | nSrcXOff = 0 , |
|||
int | nSrcYOff = 0 , |
|||
int | nSrcXSize = 0 , |
|||
int | nSrcYSize = 0 | |||
) |
This method requests that a particular window of the output dataset be warped and the result put into the provided data buffer. The output dataset doesn't even really have to exist to use this method as long as the transformation function in the GDALWarpOptions is setup to map to a virtual pixel/line space.
This method will do the whole region in one chunk, so be wary of the amount of memory that might be used.
nDstXOff | X offset to window of destination data to be produced. | |
nDstYOff | Y offset to window of destination data to be produced. | |
nDstXSize | Width of output window on destination file to be produced. | |
nDstYSize | Height of output window on destination file to be produced. | |
pDataBuf | the data buffer to place result in, of type eBufDataType. | |
eBufDataType | the type of the output data buffer. For now this must match GDALWarpOptions::eWorkingDataType. | |
nSrcXOff | source window X offset (computed if window all zero) | |
nSrcYOff | source window Y offset (computed if window all zero) | |
nSrcXSize | source window X size (computed if window all zero) | |
nSrcYSize | source window Y size (computed if window all zero) |
References GDALWarpKernel::eResample, GDALWarpOptions::eResampleAlg, GDALWarpKernel::eWorkingDataType, GDALWarpOptions::eWorkingDataType, GDALDatasetRasterIO(), GDALGetDataTypeSize(), GF_Read, GDALWarpOptions::hSrcDS, GDALWarpOptions::nBandCount, GDALWarpKernel::nBands, GDALWarpOptions::nDstAlphaBand, GDALWarpKernel::nDstXOff, GDALWarpKernel::nDstXSize, GDALWarpKernel::nDstYOff, GDALWarpKernel::nDstYSize, GDALWarpOptions::nSrcAlphaBand, GDALWarpKernel::nSrcXOff, GDALWarpKernel::nSrcXSize, GDALWarpKernel::nSrcYOff, GDALWarpKernel::nSrcYSize, GDALWarpOptions::padfDstNoDataImag, GDALWarpOptions::padfDstNoDataReal, GDALWarpOptions::padfSrcNoDataImag, GDALWarpOptions::padfSrcNoDataReal, GDALWarpKernel::pafDstDensity, GDALWarpKernel::pafUnifiedSrcDensity, GDALWarpKernel::panDstValid, GDALWarpOptions::panSrcBands, GDALWarpKernel::panUnifiedSrcValid, GDALWarpKernel::papabyDstImage, GDALWarpKernel::papabySrcImage, GDALWarpKernel::papanBandSrcValid, GDALWarpOptions::papszWarpOptions, GDALWarpOptions::pfnProgress, GDALWarpKernel::pfnProgress, GDALWarpOptions::pfnTransformer, GDALWarpKernel::pfnTransformer, GDALWarpKernel::pProgress, GDALWarpOptions::pProgressArg, GDALWarpOptions::pTransformerArg, and GDALWarpKernel::pTransformerArg.
Referenced by WarpRegion().