31#ifndef GDALWARPER_H_INCLUDED
32#define GDALWARPER_H_INCLUDED
44#include "cpl_multiproc.h"
101typedef int (*GDALMaskFunc)(
void *pMaskFuncArg,
int nBandCount,
103 int nXSize,
int nYSize,
GByte **papabyImageData,
104 int bMaskIsFloat,
void *pMask);
106CPLErr CPL_DLL GDALWarpNoDataMasker(
void *pMaskFuncArg,
int nBandCount,
108 int nXSize,
int nYSize,
109 GByte **papabyImageData,
int bMaskIsFloat,
110 void *pValidityMask,
int *pbOutAllValid);
112CPLErr CPL_DLL GDALWarpDstAlphaMasker(
void *pMaskFuncArg,
int nBandCount,
114 int nXSize,
int nYSize,
116 int bMaskIsFloat,
void *pValidityMask);
117CPLErr CPL_DLL GDALWarpSrcAlphaMasker(
void *pMaskFuncArg,
int nBandCount,
119 int nXSize,
int nYSize,
121 int bMaskIsFloat,
void *pValidityMask,
122 int *pbOutAllOpaque);
124CPLErr CPL_DLL GDALWarpSrcMaskMasker(
void *pMaskFuncArg,
int nBandCount,
126 int nXSize,
int nYSize,
128 int bMaskIsFloat,
void *pValidityMask);
130CPLErr CPL_DLL GDALWarpCutlineMasker(
void *pMaskFuncArg,
int nBandCount,
132 int nXSize,
int nYSize,
134 int bMaskIsFloat,
void *pValidityMask);
234 CPLErr (*pfnPreWarpChunkProcessor)(
void *pKern,
void *pArg);
239 CPLErr (*pfnPostWarpChunkProcessor)(
void *pKern,
void *pArg);
290 double dfWarpMemoryLimit,
double dfMaxError, GDALProgressFunc pfnProgress,
294 GDALDatasetH hSrcDS,
const char *pszSrcWKT,
const char *pszDstFilename,
295 const char *pszDstWKT,
GDALDriverH hDstDriver,
char **papszCreateOptions,
296 GDALResampleAlg eResampleAlg,
double dfWarpMemoryLimit,
double dfMaxError,
297 GDALProgressFunc pfnProgress,
void *pProgressArg,
310 GDALDatasetH hSrcDS,
const char *pszSrcWKT,
const char *pszDstWKT,
323#if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
337#define WARP_EXTRA_ELTS 1
449 bool bApplyVerticalShift =
false;
451 double dfMultFactorVerticalShift = 1.0;
462void *GWKThreadsCreate(
char **papszWarpOptions,
464 void *pTransformerArg);
465void GWKThreadsEnd(
void *psThreadDataIn);
479typedef struct _GDALWarpChunk GDALWarpChunk;
491 int ValidateOptions();
493 CPLErr ComputeSourceWindow(
int nDstXOff,
int nDstYOff,
int nDstXSize,
494 int nDstYSize,
int *pnSrcXOff,
int *pnSrcYOff,
495 int *pnSrcXSize,
int *pnSrcYSize,
496 double *pdfSrcXExtraSize,
497 double *pdfSrcYExtraSize,
498 double *pdfSrcFillRatio);
500 void ComputeSourceWindowStartingFromSource(
int nDstXOff,
int nDstYOff,
501 int nDstXSize,
int nDstYSize,
505 double *padfSrcMaxY);
508 const char *pszType);
511 CPLMutex *hWarpMutex;
515 GDALWarpChunk *pasChunkList;
518 unsigned long nLastTimeReported;
524 std::vector<std::pair<double, double>> aDstXYSpecialPoints{};
526 bool m_bIsTranslationOnPixelBoundaries =
false;
528 void WipeChunkList();
529 CPLErr CollectChunkListInternal(
int nDstXOff,
int nDstYOff,
int nDstXSize,
531 void CollectChunkList(
int nDstXOff,
int nDstYOff,
int nDstXSize,
533 void ReportTiming(
const char *);
540 void *CreateDestinationBuffer(
int nDstXSize,
int nDstYSize,
541 int *pbWasInitialized =
nullptr);
542 static void DestroyDestinationBuffer(
void *pDstBuffer);
546 CPLErr ChunkAndWarpImage(
int nDstXOff,
int nDstYOff,
int nDstXSize,
548 CPLErr ChunkAndWarpMulti(
int nDstXOff,
int nDstYOff,
int nDstXSize,
550 CPLErr WarpRegion(
int nDstXOff,
int nDstYOff,
int nDstXSize,
int nDstYSize,
551 int nSrcXOff = 0,
int nSrcYOff = 0,
int nSrcXSize = 0,
552 int nSrcYSize = 0,
double dfProgressBase = 0.0,
553 double dfProgressScale = 1.0);
554 CPLErr WarpRegion(
int nDstXOff,
int nDstYOff,
int nDstXSize,
int nDstYSize,
555 int nSrcXOff,
int nSrcYOff,
int nSrcXSize,
int nSrcYSize,
556 double dfSrcXExtraSize,
double dfSrcYExtraSize,
557 double dfProgressBase,
double dfProgressScale);
558 CPLErr WarpRegionToBuffer(
int nDstXOff,
int nDstYOff,
int nDstXSize,
559 int nDstYSize,
void *pDataBuf,
561 int nSrcYOff = 0,
int nSrcXSize = 0,
562 int nSrcYSize = 0,
double dfProgressBase = 0.0,
563 double dfProgressScale = 1.0);
564 CPLErr WarpRegionToBuffer(
int nDstXOff,
int nDstYOff,
int nDstXSize,
565 int nDstYSize,
void *pDataBuf,
567 int nSrcYOff,
int nSrcXSize,
int nSrcYSize,
568 double dfSrcXExtraSize,
double dfSrcYExtraSize,
569 double dfProgressBase,
double dfProgressScale);
595typedef double (*FilterFuncType)(
double dfX);
599typedef double (*FilterFunc4ValuesType)(
double *padfVals);
600FilterFunc4ValuesType GWKGetFilterFunc4Values(
GDALResampleAlg eResampleAlg);
This class represents the lowest level of abstraction of warping.
Definition gdalwarper.h:347
int nXRadius
X size of window to filter.
Definition gdalwarper.h:405
int nSrcYSize
Height of the source image.
Definition gdalwarper.h:364
char ** papszWarpOptions
Warp options.
Definition gdalwarper.h:352
int nFiltInitX
X filtering offset.
Definition gdalwarper.h:409
double dfXScale
X resampling scale, i.e.
Definition gdalwarper.h:397
double dfYFilter
Y size of filter kernel.
Definition gdalwarper.h:403
int nDstXSize
Width of the destination image.
Definition gdalwarper.h:386
double dfSrcXExtraSize
Extra pixels (included in nSrcXSize) reserved for filter window.
Definition gdalwarper.h:367
double * padfDstNoDataReal
Array of nBands value for destination nodata.
Definition gdalwarper.h:443
int nDstXOff
X offset of the destination buffer regarding the top-left corner of the image.
Definition gdalwarper.h:422
GDALResampleAlg eResample
Resample algorithm.
Definition gdalwarper.h:355
GDALTransformerFunc pfnTransformer
Pixel transformation function.
Definition gdalwarper.h:428
GUInt32 * panUnifiedSrcValid
Unified validity mask of size (nSrcXSize * nSrcYSize + WARP_EXTRA_ELTS) / 8.
Definition gdalwarper.h:380
int nDstYSize
Height of the destination image.
Definition gdalwarper.h:388
int nBands
Number of input and output bands (excluding alpha bands)
Definition gdalwarper.h:359
double dfProgressBase
Base/offset value for progress computation.
Definition gdalwarper.h:438
GDALDataType eWorkingDataType
Working data type.
Definition gdalwarper.h:357
double dfSrcYExtraSize
Extra pixels (included in nSrcYSize) reserved for filter window.
Definition gdalwarper.h:370
int nSrcXOff
X offset of the source buffer regarding the top-left corner of the image.
Definition gdalwarper.h:415
int nSrcYOff
Y offset of the source buffer regarding the top-left corner of the image.
Definition gdalwarper.h:418
int nDstYOff
Y offset of the destination buffer regarding the top-left corner of the image.
Definition gdalwarper.h:425
int nFiltInitY
Y filtering offset.
Definition gdalwarper.h:411
GDALProgressFunc pfnProgress
Progress function.
Definition gdalwarper.h:433
GUInt32 ** papanBandSrcValid
Array of nBands validity mask of size (nSrcXSize * nSrcYSize + WARP_EXTRA_ELTS) / 8.
Definition gdalwarper.h:377
void * pProgress
User data provided to pfnProgress.
Definition gdalwarper.h:435
float * pafUnifiedSrcDensity
Unified source density of size nSrcXSize * nSrcYSize + WARP_EXTRA_ELTS.
Definition gdalwarper.h:383
int nYRadius
Y size of window to filter.
Definition gdalwarper.h:407
float * pafDstDensity
Destination density of size nDstXSize * nDstYSize.
Definition gdalwarper.h:394
double dfXFilter
X size of filter kernel.
Definition gdalwarper.h:401
double dfYScale
Y resampling scale, i.e.
Definition gdalwarper.h:399
GByte ** papabyDstImage
Array of nBands destination images of size nDstXSize * nDstYSize.
Definition gdalwarper.h:390
double dfProgressScale
Scale value for progress computation.
Definition gdalwarper.h:440
int nSrcXSize
Width of the source image.
Definition gdalwarper.h:362
void * pTransformerArg
User data provided to pfnTransformer.
Definition gdalwarper.h:430
GByte ** papabySrcImage
Array of nBands source images of size nSrcXSize * nSrcYSize.
Definition gdalwarper.h:373
GUInt32 * panDstValid
Validify mask of size (nDstXSize * nDstYSize) / 8.
Definition gdalwarper.h:392
High level image warping class.
Definition gdalwarper.h:483
CPLErr
Error category.
Definition cpl_error.h:53
Definitions for CPL mini XML Parser/Serializer.
#define CPL_C_END
Macro to end a block of C symbols.
Definition cpl_port.h:317
#define CPL_C_START
Macro to start a block of C symbols.
Definition cpl_port.h:313
unsigned int GUInt32
Unsigned int32 type.
Definition cpl_port.h:197
#define CPL_DISALLOW_COPY_ASSIGN(ClassName)
Helper to remove the copy and assignment constructors so that the compiler will not generate the defa...
Definition cpl_port.h:1049
char ** CSLConstList
Type of a constant null-terminated list of nul terminated strings.
Definition cpl_port.h:1190
unsigned char GByte
Unsigned byte type.
Definition cpl_port.h:205
GDALDataType
Definition gdal.h:64
void * GDALDatasetH
Opaque type used for the C bindings of the C++ GDALDataset class.
Definition gdal.h:290
void * GDALDriverH
Opaque type used for the C bindings of the C++ GDALDriver class.
Definition gdal.h:296
Public (C callable) GDAL algorithm entry points, and definitions.
int(* GDALTransformerFunc)(void *pTransformerArg, int bDstToSrc, int nPointCount, double *x, double *y, double *z, int *panSuccess)
Definition gdal_alg.h:95
CPLErr GDALWarpRegion(GDALWarpOperationH, int, int, int, int, int, int, int, int)
Definition gdalwarpoperation.cpp:1664
void GDALDestroyWarpOperation(GDALWarpOperationH)
Definition gdalwarpoperation.cpp:824
GDALWarpOperationH GDALCreateWarpOperation(const GDALWarpOptions *)
Definition gdalwarpoperation.cpp:804
GWKAverageOrModeAlg
Definition gdalwarper.h:89
@ GWKAOM_Fmode
Definition gdalwarper.h:91
@ GWKAOM_Min
Definition gdalwarper.h:94
@ GWKAOM_RMS
Definition gdalwarper.h:97
@ GWKAOM_Quant
Definition gdalwarper.h:95
@ GWKAOM_Sum
Definition gdalwarper.h:96
@ GWKAOM_Imode
Definition gdalwarper.h:92
@ GWKAOM_Average
Definition gdalwarper.h:90
@ GWKAOM_Max
Definition gdalwarper.h:93
void GDALWarpInitDstNoDataImag(GDALWarpOptions *, double dNoDataImag)
Initialize padfDstNoDataImag with specified value.
Definition gdalwarper.cpp:1445
GDALResampleAlg
Definition gdalwarper.h:52
@ GRA_CubicSpline
Definition gdalwarper.h:57
@ GRA_Q1
Definition gdalwarper.h:73
@ GRA_Sum
Definition gdalwarper.h:78
@ GRA_Max
Definition gdalwarper.h:66
@ GRA_Cubic
Definition gdalwarper.h:56
@ GRA_Min
Definition gdalwarper.h:68
@ GRA_RMS
Definition gdalwarper.h:81
@ GRA_Lanczos
Definition gdalwarper.h:58
@ GRA_Mode
Definition gdalwarper.h:64
@ GRA_NearestNeighbour
Definition gdalwarper.h:53
@ GRA_Q3
Definition gdalwarper.h:75
@ GRA_Med
Definition gdalwarper.h:70
@ GRA_Average
Definition gdalwarper.h:61
@ GRA_Bilinear
Definition gdalwarper.h:55
GDALDatasetH GDALCreateWarpedVRT(GDALDatasetH hSrcDS, int nPixels, int nLines, double *padfGeoTransform, GDALWarpOptions *psOptions)
Create virtual warped dataset.
Definition vrtwarped.cpp:362
void GDALDestroyWarpOptions(GDALWarpOptions *)
Destroy a warp options structure.
Definition gdalwarper.cpp:1278
void * GDALWarpOperationH
Opaque type representing a GDALWarpOperation object.
Definition gdalwarper.h:577
CPLErr GDALWarpRegionToBuffer(GDALWarpOperationH, int, int, int, int, void *, GDALDataType, int, int, int, int)
Definition gdalwarpoperation.cpp:2284
CPLErr GDALCreateAndReprojectImage(GDALDatasetH hSrcDS, const char *pszSrcWKT, const char *pszDstFilename, const char *pszDstWKT, GDALDriverH hDstDriver, char **papszCreateOptions, GDALResampleAlg eResampleAlg, double dfWarpMemoryLimit, double dfMaxError, GDALProgressFunc pfnProgress, void *pProgressArg, GDALWarpOptions *psOptions)
Reproject an image and create the target reprojected image.
Definition gdalwarper.cpp:234
CPLErr GDALChunkAndWarpImage(GDALWarpOperationH, int, int, int, int)
Definition gdalwarpoperation.cpp:998
GDALDatasetH GDALAutoCreateWarpedVRTEx(GDALDatasetH hSrcDS, const char *pszSrcWKT, const char *pszDstWKT, GDALResampleAlg eResampleAlg, double dfMaxError, const GDALWarpOptions *psOptions, CSLConstList papszTransformerOptions)
Create virtual warped dataset automatically.
Definition vrtwarped.cpp:152
void GDALWarpInitDefaultBandMapping(GDALWarpOptions *, int nBandCount)
Init src and dst band mappings such that Bands[i] = i+1 for nBandCount Does nothing if psOptionsIn->n...
Definition gdalwarper.cpp:1589
GDALDatasetH GDALAutoCreateWarpedVRT(GDALDatasetH hSrcDS, const char *pszSrcWKT, const char *pszDstWKT, GDALResampleAlg eResampleAlg, double dfMaxError, const GDALWarpOptions *psOptions)
Create virtual warped dataset automatically.
Definition vrtwarped.cpp:131
void GDALWarpInitSrcNoDataImag(GDALWarpOptions *, double dNoDataImag)
Initialize padfSrcNoDataImag with specified value.
Definition gdalwarper.cpp:1464
CPLErr GDALInitializeWarpedVRT(GDALDatasetH hDS, GDALWarpOptions *psWO)
Set warp info on virtual warped dataset.
Definition vrtwarped.cpp:1265
void GDALWarpInitSrcNoDataReal(GDALWarpOptions *, double dNoDataReal)
Initialize padfSrcNoDataReal with specified value.
Definition gdalwarper.cpp:1407
void GDALWarpInitDstNoDataReal(GDALWarpOptions *, double dNoDataReal)
Initialize padfDstNoDataReal with specified value.
Definition gdalwarper.cpp:1388
CPLErr GDALReprojectImage(GDALDatasetH hSrcDS, const char *pszSrcWKT, GDALDatasetH hDstDS, const char *pszDstWKT, GDALResampleAlg eResampleAlg, double dfWarpMemoryLimit, double dfMaxError, GDALProgressFunc pfnProgress, void *pProgressArg, GDALWarpOptions *psOptions)
Reproject image.
Definition gdalwarper.cpp:97
CPLErr GDALChunkAndWarpMulti(GDALWarpOperationH, int, int, int, int)
Definition gdalwarpoperation.cpp:1238
GDALWarpOptions * GDALCreateWarpOptions(void)
Create a warp options structure.
Definition gdalwarper.cpp:1259
void GDALWarpInitNoDataReal(GDALWarpOptions *, double dNoDataReal)
Initialize padfSrcNoDataReal and padfDstNoDataReal with specified value.
Definition gdalwarper.cpp:1427
GDALWarpOptions * GDALCloneWarpOptions(const GDALWarpOptions *)
Clone a warp options structure.
Definition gdalwarper.cpp:1324
void GDALWarpResolveWorkingDataType(GDALWarpOptions *)
If the working data type is unknown, this method will determine a valid working data type to support ...
Definition gdalwarper.cpp:1484
Document node structure.
Definition cpl_minixml.h:70
Warp control options for use with GDALWarpOperation::Initialize()
Definition gdalwarper.h:143
int nSrcAlphaBand
Definition gdalwarper.h:174
GDALDatasetH hDstDS
Definition gdalwarper.h:162
char ** papszWarpOptions
A string list of additional options controlling the warp operation in name=value format.
Definition gdalwarper.h:145
double * padfDstNoDataImag
Definition gdalwarper.h:193
GDALMaskFunc pfnDstValidityMaskFunc
Unused.
Definition gdalwarper.h:229
double * padfSrcNoDataReal
Definition gdalwarper.h:181
void * pTransformerArg
Definition gdalwarper.h:206
GDALDataType eWorkingDataType
Definition gdalwarper.h:155
void * pSrcValidityMaskFuncArg
Unused.
Definition gdalwarper.h:216
void * pDstDensityMaskFuncArg
Unused.
Definition gdalwarper.h:226
int * panDstBands
Definition gdalwarper.h:171
double dfCutlineBlendDist
Definition gdalwarper.h:248
GDALProgressFunc pfnProgress
Definition gdalwarper.h:197
GDALMaskFunc pfnSrcDensityMaskFunc
Unused.
Definition gdalwarper.h:219
GDALDatasetH hSrcDS
Definition gdalwarper.h:158
GDALMaskFunc pfnDstDensityMaskFunc
Unused.
Definition gdalwarper.h:224
void * pPreWarpProcessorArg
Unused.
Definition gdalwarper.h:236
void * pProgressArg
Definition gdalwarper.h:200
int nDstAlphaBand
Definition gdalwarper.h:177
int * panSrcBands
Definition gdalwarper.h:168
GDALTransformerFunc pfnTransformer
Definition gdalwarper.h:203
int nBandCount
Definition gdalwarper.h:165
double dfWarpMemoryLimit
Definition gdalwarper.h:148
void * pSrcDensityMaskFuncArg
Unused.
Definition gdalwarper.h:221
GDALMaskFunc * papfnSrcPerBandValidityMaskFunc
Unused.
Definition gdalwarper.h:209
GDALResampleAlg eResampleAlg
Definition gdalwarper.h:151
GDALMaskFunc pfnSrcValidityMaskFunc
Unused.
Definition gdalwarper.h:214
void * hCutline
Definition gdalwarper.h:244
void * pDstValidityMaskFuncArg
Unused.
Definition gdalwarper.h:231
void ** papSrcPerBandValidityMaskFuncArg
Unused.
Definition gdalwarper.h:211
double * padfDstNoDataReal
Definition gdalwarper.h:189
double * padfSrcNoDataImag
Definition gdalwarper.h:185
void * pPostWarpProcessorArg
Unused.
Definition gdalwarper.h:241