31#ifndef GDALWARPER_H_INCLUDED
32#define GDALWARPER_H_INCLUDED
44#include "cpl_multiproc.h"
85(*GDALMaskFunc)(
void *pMaskFuncArg,
88 int nXSize,
int nYSize,
89 GByte **papabyImageData,
90 int bMaskIsFloat,
void *pMask );
93GDALWarpNoDataMasker(
void *pMaskFuncArg,
int nBandCount,
GDALDataType eType,
94 int nXOff,
int nYOff,
int nXSize,
int nYSize,
95 GByte **papabyImageData,
int bMaskIsFloat,
96 void *pValidityMask,
int* pbOutAllValid );
99GDALWarpDstAlphaMasker(
void *pMaskFuncArg,
int nBandCount,
GDALDataType eType,
100 int nXOff,
int nYOff,
int nXSize,
int nYSize,
102 int bMaskIsFloat,
void *pValidityMask );
104GDALWarpSrcAlphaMasker(
void *pMaskFuncArg,
int nBandCount,
GDALDataType eType,
105 int nXOff,
int nYOff,
int nXSize,
int nYSize,
107 int bMaskIsFloat,
void *pValidityMask,
int* pbOutAllOpaque );
110GDALWarpSrcMaskMasker(
void *pMaskFuncArg,
int nBandCount,
GDALDataType eType,
111 int nXOff,
int nYOff,
int nXSize,
int nYSize,
113 int bMaskIsFloat,
void *pValidityMask );
116GDALWarpCutlineMasker(
void *pMaskFuncArg,
int nBandCount,
GDALDataType eType,
117 int nXOff,
int nYOff,
int nXSize,
int nYSize,
119 int bMaskIsFloat,
void *pValidityMask );
215 CPLErr (*pfnPreWarpChunkProcessor)(
void *pKern,
void *pArg );
220 CPLErr (*pfnPostWarpChunkProcessor)(
void *pKern,
void *pArg);
237void CPL_DLL CPL_STDCALL
240void CPL_DLL CPL_STDCALL
243void CPL_DLL CPL_STDCALL
246void CPL_DLL CPL_STDCALL
249void CPL_DLL CPL_STDCALL
252void CPL_DLL CPL_STDCALL
255void CPL_DLL CPL_STDCALL
274 GDALProgressFunc pfnProgress,
void *pProgressArg,
279 const char *pszDstFilename,
const char *pszDstWKT,
283 GDALProgressFunc pfnProgress,
void *pProgressArg,
292 const char *pszSrcWKT,
const char *pszDstWKT,
298 const char *pszSrcWKT,
const char *pszDstWKT,
305 int nPixels,
int nLines,
double *padfGeoTransform,
314#if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
328#define WARP_EXTRA_ELTS 1
430 bool bApplyVerticalShift =
false;
432 double dfMultFactorVerticalShit = 1.0;
443void* GWKThreadsCreate(
char** papszWarpOptions,
445 void* pTransformerArg);
446void GWKThreadsEnd(
void* psThreadDataIn);
460typedef struct _GDALWarpChunk GDALWarpChunk;
471 int ValidateOptions();
473 CPLErr ComputeSourceWindow(
int nDstXOff,
int nDstYOff,
474 int nDstXSize,
int nDstYSize,
475 int *pnSrcXOff,
int *pnSrcYOff,
476 int *pnSrcXSize,
int *pnSrcYSize,
477 double *pdfSrcXExtraSize,
double *pdfSrcYExtraSize,
478 double* pdfSrcFillRatio );
480 void ComputeSourceWindowStartingFromSource(
481 int nDstXOff,
int nDstYOff,
482 int nDstXSize,
int nDstYSize,
483 double* padfSrcMinX,
double* padfSrcMinY,
484 double* padfSrcMaxX,
double* padfSrcMaxY);
487 const char *pszType );
490 CPLMutex *hWarpMutex;
494 GDALWarpChunk *pasChunkList;
497 unsigned long nLastTimeReported;
503 std::vector<std::pair<double, double>> aDstXYSpecialPoints{};
505 bool m_bIsTranslationOnPixelBoundaries =
false;
507 void WipeChunkList();
508 CPLErr CollectChunkListInternal(
int nDstXOff,
int nDstYOff,
509 int nDstXSize,
int nDstYSize );
510 void CollectChunkList(
int nDstXOff,
int nDstYOff,
511 int nDstXSize,
int nDstYSize );
512 void ReportTiming(
const char * );
519 void* CreateDestinationBuffer(
int nDstXSize,
int nDstYSize,
520 int *pbWasInitialized =
nullptr );
521 static void DestroyDestinationBuffer(
void* pDstBuffer);
525 CPLErr ChunkAndWarpImage(
int nDstXOff,
int nDstYOff,
526 int nDstXSize,
int nDstYSize );
527 CPLErr ChunkAndWarpMulti(
int nDstXOff,
int nDstYOff,
528 int nDstXSize,
int nDstYSize );
529 CPLErr WarpRegion(
int nDstXOff,
int nDstYOff,
530 int nDstXSize,
int nDstYSize,
531 int nSrcXOff=0,
int nSrcYOff=0,
532 int nSrcXSize=0,
int nSrcYSize=0,
533 double dfProgressBase=0.0,
double dfProgressScale=1.0);
534 CPLErr WarpRegion(
int nDstXOff,
int nDstYOff,
535 int nDstXSize,
int nDstYSize,
536 int nSrcXOff,
int nSrcYOff,
537 int nSrcXSize,
int nSrcYSize,
538 double dfSrcXExtraSize,
double dfSrcYExtraSize,
539 double dfProgressBase,
double dfProgressScale);
540 CPLErr WarpRegionToBuffer(
int nDstXOff,
int nDstYOff,
541 int nDstXSize,
int nDstYSize,
544 int nSrcXOff=0,
int nSrcYOff=0,
545 int nSrcXSize=0,
int nSrcYSize=0,
546 double dfProgressBase=0.0,
double dfProgressScale=1.0);
547 CPLErr WarpRegionToBuffer(
int nDstXOff,
int nDstYOff,
548 int nDstXSize,
int nDstYSize,
551 int nSrcXOff,
int nSrcYOff,
552 int nSrcXSize,
int nSrcYSize,
553 double dfSrcXExtraSize,
double dfSrcYExtraSize,
554 double dfProgressBase,
double dfProgressScale);
569 int,
int,
int,
int,
int,
int,
int,
int );
572 int,
int,
int,
int );
581typedef double (*FilterFuncType)(
double dfX);
585typedef double (*FilterFunc4ValuesType)(
double* padfVals);
586FilterFunc4ValuesType GWKGetFilterFunc4Values(
GDALResampleAlg eResampleAlg);
This class represents the lowest level of abstraction of warping.
Definition gdalwarper.h:338
int nXRadius
X size of window to filter.
Definition gdalwarper.h:390
int nSrcYSize
Height of the source image.
Definition gdalwarper.h:355
char ** papszWarpOptions
Warp options.
Definition gdalwarper.h:343
GByte ** papabySrcImage
Array of nBands source images of size nSrcXSize * nSrcYSize.
Definition gdalwarper.h:361
int nFiltInitX
X filtering offset.
Definition gdalwarper.h:394
double dfXScale
X resampling scale, i.e.
Definition gdalwarper.h:382
void * pTransformerArg
User data provided to pfnTransformer.
Definition gdalwarper.h:411
double dfYFilter
Y size of filter kernel.
Definition gdalwarper.h:388
int nDstXSize
Width of the destination image.
Definition gdalwarper.h:371
double dfSrcXExtraSize
Extra pixels (included in nSrcXSize) reserved for filter window.
Definition gdalwarper.h:357
double * padfDstNoDataReal
Array of nBands value for destination nodata.
Definition gdalwarper.h:424
int nDstXOff
X offset of the destination buffer regarding the top-left corner of the image.
Definition gdalwarper.h:404
GDALResampleAlg eResample
Resample algorithm.
Definition gdalwarper.h:346
GDALTransformerFunc pfnTransformer
Pixel transformation function.
Definition gdalwarper.h:409
int nDstYSize
Height of the destination image.
Definition gdalwarper.h:373
int nBands
Number of input and output bands (excluding alpha bands)
Definition gdalwarper.h:350
double dfProgressBase
Base/offset value for progress computation.
Definition gdalwarper.h:419
GDALDataType eWorkingDataType
Working data type.
Definition gdalwarper.h:348
double dfSrcYExtraSize
Extra pixels (included in nSrcYSize) reserved for filter window.
Definition gdalwarper.h:359
int nSrcXOff
X offset of the source buffer regarding the top-left corner of the image.
Definition gdalwarper.h:399
float * pafDstDensity
Destination density of size nDstXSize * nDstYSize.
Definition gdalwarper.h:379
void * pProgress
User data provided to pfnProgress.
Definition gdalwarper.h:416
GUInt32 ** papanBandSrcValid
Array of nBands validity mask of size (nSrcXSize * nSrcYSize + WARP_EXTRA_ELTS) / 8.
Definition gdalwarper.h:364
int nSrcYOff
Y offset of the source buffer regarding the top-left corner of the image.
Definition gdalwarper.h:401
float * pafUnifiedSrcDensity
Unified source density of size nSrcXSize * nSrcYSize + WARP_EXTRA_ELTS.
Definition gdalwarper.h:368
int nDstYOff
Y offset of the destination buffer regarding the top-left corner of the image.
Definition gdalwarper.h:406
int nFiltInitY
Y filtering offset.
Definition gdalwarper.h:396
GDALProgressFunc pfnProgress
Progress function.
Definition gdalwarper.h:414
GUInt32 * panDstValid
Validify mask of size (nDstXSize * nDstYSize) / 8.
Definition gdalwarper.h:377
GUInt32 * panUnifiedSrcValid
Unified validity mask of size (nSrcXSize * nSrcYSize + WARP_EXTRA_ELTS) / 8.
Definition gdalwarper.h:366
int nYRadius
Y size of window to filter.
Definition gdalwarper.h:392
GByte ** papabyDstImage
Array of nBands destination images of size nDstXSize * nDstYSize.
Definition gdalwarper.h:375
double dfXFilter
X size of filter kernel.
Definition gdalwarper.h:386
double dfYScale
Y resampling scale, i.e.
Definition gdalwarper.h:384
double dfProgressScale
Scale value for progress computation.
Definition gdalwarper.h:421
int nSrcXSize
Width of the source image.
Definition gdalwarper.h:353
High level image warping class.
Definition gdalwarper.h:463
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:331
#define CPL_C_START
Macro to start a block of C symbols.
Definition cpl_port.h:329
unsigned int GUInt32
Unsigned int32 type.
Definition cpl_port.h:207
#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:955
char ** CSLConstList
Type of a constant null-terminated list of nul terminated strings.
Definition cpl_port.h:1169
unsigned char GByte
Unsigned byte type.
Definition cpl_port.h:215
GDALDataType
Definition gdal.h:62
void * GDALDatasetH
Opaque type used for the C bindings of the C++ GDALDataset class.
Definition gdal.h:268
void * GDALDriverH
Opaque type used for the C bindings of the C++ GDALDriver class.
Definition gdal.h:274
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:114
CPLErr GDALWarpRegion(GDALWarpOperationH, int, int, int, int, int, int, int, int)
Definition gdalwarpoperation.cpp:1692
void GDALDestroyWarpOperation(GDALWarpOperationH)
Definition gdalwarpoperation.cpp:830
GDALWarpOperationH GDALCreateWarpOperation(const GDALWarpOptions *)
Definition gdalwarpoperation.cpp:809
GWKAverageOrModeAlg
Definition gdalwarper.h:72
@ GWKAOM_Fmode
Definition gdalwarper.h:74
@ GWKAOM_Min
Definition gdalwarper.h:77
@ GWKAOM_RMS
Definition gdalwarper.h:80
@ GWKAOM_Quant
Definition gdalwarper.h:78
@ GWKAOM_Sum
Definition gdalwarper.h:79
@ GWKAOM_Imode
Definition gdalwarper.h:75
@ GWKAOM_Average
Definition gdalwarper.h:73
@ GWKAOM_Max
Definition gdalwarper.h:76
void GDALWarpInitDstNoDataImag(GDALWarpOptions *, double dNoDataImag)
Initialize padfDstNoDataImag with specified value.
Definition gdalwarper.cpp:1438
GDALResampleAlg
Definition gdalwarper.h:50
@ GRA_CubicSpline
Definition gdalwarper.h:54
@ GRA_Q1
Definition gdalwarper.h:62
@ GRA_Sum
Definition gdalwarper.h:64
@ GRA_Max
Definition gdalwarper.h:59
@ GRA_Cubic
Definition gdalwarper.h:53
@ GRA_Min
Definition gdalwarper.h:60
@ GRA_RMS
Definition gdalwarper.h:65
@ GRA_Lanczos
Definition gdalwarper.h:55
@ GRA_Mode
Definition gdalwarper.h:57
@ GRA_NearestNeighbour
Definition gdalwarper.h:51
@ GRA_Q3
Definition gdalwarper.h:63
@ GRA_Med
Definition gdalwarper.h:61
@ GRA_Average
Definition gdalwarper.h:56
@ GRA_Bilinear
Definition gdalwarper.h:52
GDALDatasetH GDALCreateWarpedVRT(GDALDatasetH hSrcDS, int nPixels, int nLines, double *padfGeoTransform, GDALWarpOptions *psOptions)
Create virtual warped dataset.
Definition vrtwarped.cpp:322
void GDALDestroyWarpOptions(GDALWarpOptions *)
Destroy a warp options structure.
Definition gdalwarper.cpp:1279
void * GDALWarpOperationH
Opaque type representing a GDALWarpOperation object.
Definition gdalwarper.h:562
CPLErr GDALWarpRegionToBuffer(GDALWarpOperationH, int, int, int, int, void *, GDALDataType, int, int, int, int)
Definition gdalwarpoperation.cpp:2342
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:240
CPLErr GDALChunkAndWarpImage(GDALWarpOperationH, int, int, int, int)
Definition gdalwarpoperation.cpp:1012
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:134
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:1582
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:108
void GDALWarpInitSrcNoDataImag(GDALWarpOptions *, double dNoDataImag)
Initialize padfSrcNoDataImag with specified value.
Definition gdalwarper.cpp:1457
CPLErr GDALInitializeWarpedVRT(GDALDatasetH hDS, GDALWarpOptions *psWO)
Set warp info on virtual warped dataset.
Definition vrtwarped.cpp:1212
void GDALWarpInitSrcNoDataReal(GDALWarpOptions *, double dNoDataReal)
Initialize padfSrcNoDataReal with specified value.
Definition gdalwarper.cpp:1400
void GDALWarpInitDstNoDataReal(GDALWarpOptions *, double dNoDataReal)
Initialize padfDstNoDataReal with specified value.
Definition gdalwarper.cpp:1380
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:1247
GDALWarpOptions * GDALCreateWarpOptions(void)
Create a warp options structure.
Definition gdalwarper.cpp:1260
void GDALWarpInitNoDataReal(GDALWarpOptions *, double dNoDataReal)
Initialize padfSrcNoDataReal and padfDstNoDataReal with specified value.
Definition gdalwarper.cpp:1420
GDALWarpOptions * GDALCloneWarpOptions(const GDALWarpOptions *)
Clone a warp options structure.
Definition gdalwarper.cpp:1320
void GDALWarpResolveWorkingDataType(GDALWarpOptions *)
If the working data type is unknown, this method will determine a valid working data type to support ...
Definition gdalwarper.cpp:1477
Document node structure.
Definition cpl_minixml.h:70
Warp control options for use with GDALWarpOperation::Initialize()
Definition gdalwarper.h:127
int nSrcAlphaBand
Definition gdalwarper.h:157
GDALDatasetH hDstDS
Definition gdalwarper.h:145
double * padfDstNoDataImag
Definition gdalwarper.h:174
GDALMaskFunc pfnDstValidityMaskFunc
Unused.
Definition gdalwarper.h:210
double * padfSrcNoDataReal
Definition gdalwarper.h:163
void * pTransformerArg
Definition gdalwarper.h:187
GDALDataType eWorkingDataType
Definition gdalwarper.h:139
void * pSrcValidityMaskFuncArg
Unused.
Definition gdalwarper.h:197
void * pDstDensityMaskFuncArg
Unused.
Definition gdalwarper.h:207
int * panDstBands
Definition gdalwarper.h:154
double dfCutlineBlendDist
Definition gdalwarper.h:228
GDALProgressFunc pfnProgress
Definition gdalwarper.h:178
GDALMaskFunc pfnSrcDensityMaskFunc
Unused.
Definition gdalwarper.h:200
GDALDatasetH hSrcDS
Definition gdalwarper.h:142
GDALMaskFunc pfnDstDensityMaskFunc
Unused.
Definition gdalwarper.h:205
void * pPreWarpProcessorArg
Unused.
Definition gdalwarper.h:217
void * pProgressArg
Definition gdalwarper.h:181
int nDstAlphaBand
Definition gdalwarper.h:160
int * panSrcBands
Definition gdalwarper.h:151
GDALTransformerFunc pfnTransformer
Definition gdalwarper.h:184
int nBandCount
Definition gdalwarper.h:148
double dfWarpMemoryLimit
Definition gdalwarper.h:132
void * pSrcDensityMaskFuncArg
Unused.
Definition gdalwarper.h:202
GDALMaskFunc * papfnSrcPerBandValidityMaskFunc
Unused.
Definition gdalwarper.h:190
GDALResampleAlg eResampleAlg
Definition gdalwarper.h:135
GDALMaskFunc pfnSrcValidityMaskFunc
Unused.
Definition gdalwarper.h:195
char ** papszWarpOptions
A string list of additional options controlling the warp operation in name=value format.
Definition gdalwarper.h:129
void * hCutline
Definition gdalwarper.h:225
void * pDstValidityMaskFuncArg
Unused.
Definition gdalwarper.h:212
void ** papSrcPerBandValidityMaskFuncArg
Unused.
Definition gdalwarper.h:192
double * padfDstNoDataReal
Definition gdalwarper.h:170
double * padfSrcNoDataImag
Definition gdalwarper.h:167
void * pPostWarpProcessorArg
Unused.
Definition gdalwarper.h:222