31 #ifndef GDALWARPER_H_INCLUDED
32 #define GDALWARPER_H_INCLUDED
44 #include "cpl_multiproc.h"
80 (*GDALMaskFunc)(
void *pMaskFuncArg,
83 int nXSize,
int nYSize,
84 GByte **papabyImageData,
85 int bMaskIsFloat,
void *pMask );
88 GDALWarpNoDataMasker(
void *pMaskFuncArg,
int nBandCount,
GDALDataType eType,
89 int nXOff,
int nYOff,
int nXSize,
int nYSize,
90 GByte **papabyImageData,
int bMaskIsFloat,
91 void *pValidityMask,
int* pbOutAllValid );
94 GDALWarpDstAlphaMasker(
void *pMaskFuncArg,
int nBandCount,
GDALDataType eType,
95 int nXOff,
int nYOff,
int nXSize,
int nYSize,
97 int bMaskIsFloat,
void *pValidityMask );
99 GDALWarpSrcAlphaMasker(
void *pMaskFuncArg,
int nBandCount,
GDALDataType eType,
100 int nXOff,
int nYOff,
int nXSize,
int nYSize,
102 int bMaskIsFloat,
void *pValidityMask,
int* pbOutAllOpaque );
105 GDALWarpSrcMaskMasker(
void *pMaskFuncArg,
int nBandCount,
GDALDataType eType,
106 int nXOff,
int nYOff,
int nXSize,
int nYSize,
108 int bMaskIsFloat,
void *pValidityMask );
111 GDALWarpCutlineMasker(
void *pMaskFuncArg,
int nBandCount,
GDALDataType eType,
112 int nXOff,
int nYOff,
int nXSize,
int nYSize,
114 int bMaskIsFloat,
void *pValidityMask );
210 CPLErr (*pfnPreWarpChunkProcessor)(
void *pKern,
void *pArg );
215 CPLErr (*pfnPostWarpChunkProcessor)(
void *pKern,
void *pArg);
232 void CPL_DLL CPL_STDCALL
235 void CPL_DLL CPL_STDCALL
238 void CPL_DLL CPL_STDCALL
241 void CPL_DLL CPL_STDCALL
244 void CPL_DLL CPL_STDCALL
247 void CPL_DLL CPL_STDCALL
250 void CPL_DLL CPL_STDCALL
264 CPLErr CPL_DLL CPL_STDCALL
269 GDALProgressFunc pfnProgress,
void *pProgressArg,
272 CPLErr CPL_DLL CPL_STDCALL
274 const char *pszDstFilename,
const char *pszDstWKT,
278 GDALProgressFunc pfnProgress,
void *pProgressArg,
287 const char *pszSrcWKT,
const char *pszDstWKT,
293 int nPixels,
int nLines,
double *padfGeoTransform,
296 CPLErr CPL_DLL CPL_STDCALL
302 #if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
313 #define WARP_EXTRA_ELTS 1
424 void* GWKThreadsCreate(
char** papszWarpOptions,
426 void* pTransformerArg);
427 void GWKThreadsEnd(
void* psThreadDataIn);
441 typedef struct _GDALWarpChunk GDALWarpChunk;
452 int ValidateOptions();
454 CPLErr ComputeSourceWindow(
int nDstXOff,
int nDstYOff,
455 int nDstXSize,
int nDstYSize,
456 int *pnSrcXOff,
int *pnSrcYOff,
457 int *pnSrcXSize,
int *pnSrcYSize,
458 double *pdfSrcXExtraSize,
double *pdfSrcYExtraSize,
459 double* pdfSrcFillRatio );
461 void ComputeSourceWindowStartingFromSource(
462 int nDstXOff,
int nDstYOff,
463 int nDstXSize,
int nDstYSize,
464 double* padfSrcMinX,
double* padfSrcMinY,
465 double* padfSrcMaxX,
double* padfSrcMaxY);
468 const char *pszType );
471 CPLMutex *hWarpMutex;
475 GDALWarpChunk *pasChunkList;
478 unsigned long nLastTimeReported;
482 void WipeChunkList();
483 CPLErr CollectChunkListInternal(
int nDstXOff,
int nDstYOff,
484 int nDstXSize,
int nDstYSize );
485 void CollectChunkList(
int nDstXOff,
int nDstYOff,
486 int nDstXSize,
int nDstYSize );
487 void ReportTiming(
const char * );
494 void* CreateDestinationBuffer(
int nDstXSize,
int nDstYSize,
495 int *pbWasInitialized =
nullptr );
496 static void DestroyDestinationBuffer(
void* pDstBuffer);
500 CPLErr ChunkAndWarpImage(
int nDstXOff,
int nDstYOff,
501 int nDstXSize,
int nDstYSize );
502 CPLErr ChunkAndWarpMulti(
int nDstXOff,
int nDstYOff,
503 int nDstXSize,
int nDstYSize );
504 CPLErr WarpRegion(
int nDstXOff,
int nDstYOff,
505 int nDstXSize,
int nDstYSize,
506 int nSrcXOff=0,
int nSrcYOff=0,
507 int nSrcXSize=0,
int nSrcYSize=0,
508 double dfProgressBase=0.0,
double dfProgressScale=1.0);
509 CPLErr WarpRegion(
int nDstXOff,
int nDstYOff,
510 int nDstXSize,
int nDstYSize,
511 int nSrcXOff,
int nSrcYOff,
512 int nSrcXSize,
int nSrcYSize,
513 double dfSrcXExtraSize,
double dfSrcYExtraSize,
514 double dfProgressBase,
double dfProgressScale);
515 CPLErr WarpRegionToBuffer(
int nDstXOff,
int nDstYOff,
516 int nDstXSize,
int nDstYSize,
519 int nSrcXOff=0,
int nSrcYOff=0,
520 int nSrcXSize=0,
int nSrcYSize=0,
521 double dfProgressBase=0.0,
double dfProgressScale=1.0);
522 CPLErr WarpRegionToBuffer(
int nDstXOff,
int nDstYOff,
523 int nDstXSize,
int nDstYSize,
526 int nSrcXOff,
int nSrcYOff,
527 int nSrcXSize,
int nSrcYSize,
528 double dfSrcXExtraSize,
double dfSrcYExtraSize,
529 double dfProgressBase,
double dfProgressScale);
544 int,
int,
int,
int,
int,
int,
int,
int );
547 int,
int,
int,
int );
556 typedef double (*FilterFuncType)(
double dfX);
560 typedef double (*FilterFunc4ValuesType)(
double* padfVals);
561 FilterFunc4ValuesType GWKGetFilterFunc4Values(
GDALResampleAlg eResampleAlg);
This class represents the lowest level of abstraction of warping.
Definition: gdalwarper.h:323
int nXRadius
X size of window to filter.
Definition: gdalwarper.h:375
int nSrcYSize
Height of the source image.
Definition: gdalwarper.h:340
char ** papszWarpOptions
Warp options.
Definition: gdalwarper.h:328
int nFiltInitX
X filtering offset.
Definition: gdalwarper.h:379
double dfXScale
X resampling scale, i.e.
Definition: gdalwarper.h:367
double dfYFilter
Y size of filter kernel.
Definition: gdalwarper.h:373
int nDstXSize
Width of the destination image.
Definition: gdalwarper.h:356
double dfSrcXExtraSize
Extra pixels (included in nSrcXSize) reserved for filter window.
Definition: gdalwarper.h:342
double * padfDstNoDataReal
Array of nBands value for destination nodata.
Definition: gdalwarper.h:409
int nDstXOff
X offset of the destination buffer regarding the top-left corner of the image.
Definition: gdalwarper.h:389
GDALResampleAlg eResample
Resample algorithm.
Definition: gdalwarper.h:331
GDALTransformerFunc pfnTransformer
Pixel transformation function.
Definition: gdalwarper.h:394
GUInt32 * panUnifiedSrcValid
Unified validity mask of size (nSrcXSize * nSrcYSize + WARP_EXTRA_ELTS) / 8.
Definition: gdalwarper.h:351
int nDstYSize
Height of the destination image.
Definition: gdalwarper.h:358
int nBands
Number of input and output bands (excluding alpha bands)
Definition: gdalwarper.h:335
double dfProgressBase
Base/offset value for progress computation.
Definition: gdalwarper.h:404
GDALDataType eWorkingDataType
Working data type.
Definition: gdalwarper.h:333
double dfSrcYExtraSize
Extra pixels (included in nSrcYSize) reserved for filter window.
Definition: gdalwarper.h:344
int nSrcXOff
X offset of the source buffer regarding the top-left corner of the image.
Definition: gdalwarper.h:384
int nSrcYOff
Y offset of the source buffer regarding the top-left corner of the image.
Definition: gdalwarper.h:386
int nDstYOff
Y offset of the destination buffer regarding the top-left corner of the image.
Definition: gdalwarper.h:391
int nFiltInitY
Y filtering offset.
Definition: gdalwarper.h:381
GDALProgressFunc pfnProgress
Progress function.
Definition: gdalwarper.h:399
GUInt32 ** papanBandSrcValid
Array of nBands validity mask of size (nSrcXSize * nSrcYSize + WARP_EXTRA_ELTS) / 8.
Definition: gdalwarper.h:349
void * pProgress
User data provided to pfnProgress.
Definition: gdalwarper.h:401
float * pafUnifiedSrcDensity
Unified source density of size nSrcXSize * nSrcYSize + WARP_EXTRA_ELTS.
Definition: gdalwarper.h:353
int nYRadius
Y size of window to filter.
Definition: gdalwarper.h:377
float * pafDstDensity
Destination density of size nDstXSize * nDstYSize.
Definition: gdalwarper.h:364
double dfXFilter
X size of filter kernel.
Definition: gdalwarper.h:371
double dfYScale
Y resampling scale, i.e.
Definition: gdalwarper.h:369
GByte ** papabyDstImage
Array of nBands destination images of size nDstXSize * nDstYSize.
Definition: gdalwarper.h:360
double dfProgressScale
Scale value for progress computation.
Definition: gdalwarper.h:406
int nSrcXSize
Width of the source image.
Definition: gdalwarper.h:338
void * pTransformerArg
User data provided to pfnTransformer.
Definition: gdalwarper.h:396
GByte ** papabySrcImage
Array of nBands source images of size nSrcXSize * nSrcYSize.
Definition: gdalwarper.h:346
GUInt32 * panDstValid
Validify mask of size (nDstXSize * nDstYSize) / 8.
Definition: gdalwarper.h:362
High level image warping class.
Definition: gdalwarper.h:444
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:339
#define CPL_C_START
Macro to start a block of C symbols.
Definition: cpl_port.h:337
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:1003
unsigned char GByte
Unsigned byte type.
Definition: cpl_port.h:215
GDALDataType
Definition: gdal.h:60
void * GDALDatasetH
Opaque type used for the C bindings of the C++ GDALDataset class.
Definition: gdal.h:258
void * GDALDriverH
Opaque type used for the C bindings of the C++ GDALDriver class.
Definition: gdal.h:264
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:1660
void GDALDestroyWarpOperation(GDALWarpOperationH)
Definition: gdalwarpoperation.cpp:798
GDALWarpOperationH GDALCreateWarpOperation(const GDALWarpOptions *)
Definition: gdalwarpoperation.cpp:777
GWKAverageOrModeAlg
Definition: gdalwarper.h:68
@ GWKAOM_Fmode
Definition: gdalwarper.h:70
@ GWKAOM_Min
Definition: gdalwarper.h:73
@ GWKAOM_Quant
Definition: gdalwarper.h:74
@ GWKAOM_Sum
Definition: gdalwarper.h:75
@ GWKAOM_Imode
Definition: gdalwarper.h:71
@ GWKAOM_Average
Definition: gdalwarper.h:69
@ GWKAOM_Max
Definition: gdalwarper.h:72
void GDALWarpInitDstNoDataImag(GDALWarpOptions *, double dNoDataImag)
Initialize padfDstNoDataImag with specified value.
Definition: gdalwarper.cpp:1399
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_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:274
void GDALDestroyWarpOptions(GDALWarpOptions *)
Destroy a warp options structure.
Definition: gdalwarper.cpp:1241
void * GDALWarpOperationH
Opaque type representing a GDALWarpOperation object.
Definition: gdalwarper.h:537
CPLErr GDALWarpRegionToBuffer(GDALWarpOperationH, int, int, int, int, void *, GDALDataType, int, int, int, int)
Definition: gdalwarpoperation.cpp:2283
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
GDALWarpOptions * GDALCloneWarpOptions(const GDALWarpOptions *)
Clone a warp options structure.
Definition: gdalwarper.cpp:1282
CPLErr GDALChunkAndWarpImage(GDALWarpOperationH, int, int, int, int)
Definition: gdalwarpoperation.cpp:980
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:1529
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:104
void GDALWarpInitSrcNoDataImag(GDALWarpOptions *, double dNoDataImag)
Initialize padfSrcNoDataImag with specified value.
Definition: gdalwarper.cpp:1418
CPLErr GDALInitializeWarpedVRT(GDALDatasetH hDS, GDALWarpOptions *psWO)
Set warp info on virtual warped dataset.
Definition: vrtwarped.cpp:1178
void GDALWarpInitSrcNoDataReal(GDALWarpOptions *, double dNoDataReal)
Initialize padfSrcNoDataReal with specified value.
Definition: gdalwarper.cpp:1361
void GDALWarpInitDstNoDataReal(GDALWarpOptions *, double dNoDataReal)
Initialize padfDstNoDataReal with specified value.
Definition: gdalwarper.cpp:1341
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:1215
GDALWarpOptions * GDALCreateWarpOptions(void)
Create a warp options structure.
Definition: gdalwarper.cpp:1222
void GDALWarpInitNoDataReal(GDALWarpOptions *, double dNoDataReal)
Initialize padfSrcNoDataReal and padfDstNoDataReal with specified value.
Definition: gdalwarper.cpp:1381
void GDALWarpResolveWorkingDataType(GDALWarpOptions *)
If the working data type is unknown, this method will determine a valid working data type to support ...
Definition: gdalwarper.cpp:1438
Document node structure.
Definition: cpl_minixml.h:70
Warp control options for use with GDALWarpOperation::Initialize()
Definition: gdalwarper.h:122
int nSrcAlphaBand
Definition: gdalwarper.h:152
GDALDatasetH hDstDS
Definition: gdalwarper.h:140
char ** papszWarpOptions
A string list of additional options controlling the warp operation in name=value format.
Definition: gdalwarper.h:124
double * padfDstNoDataImag
Definition: gdalwarper.h:169
GDALMaskFunc pfnDstValidityMaskFunc
Unused.
Definition: gdalwarper.h:205
double * padfSrcNoDataReal
Definition: gdalwarper.h:158
void * pTransformerArg
Definition: gdalwarper.h:182
GDALDataType eWorkingDataType
Definition: gdalwarper.h:134
void * pSrcValidityMaskFuncArg
Unused.
Definition: gdalwarper.h:192
void * pDstDensityMaskFuncArg
Unused.
Definition: gdalwarper.h:202
int * panDstBands
Definition: gdalwarper.h:149
double dfCutlineBlendDist
Definition: gdalwarper.h:223
GDALProgressFunc pfnProgress
Definition: gdalwarper.h:173
GDALMaskFunc pfnSrcDensityMaskFunc
Unused.
Definition: gdalwarper.h:195
GDALDatasetH hSrcDS
Definition: gdalwarper.h:137
GDALMaskFunc pfnDstDensityMaskFunc
Unused.
Definition: gdalwarper.h:200
void * pPreWarpProcessorArg
Unused.
Definition: gdalwarper.h:212
void * pProgressArg
Definition: gdalwarper.h:176
int nDstAlphaBand
Definition: gdalwarper.h:155
int * panSrcBands
Definition: gdalwarper.h:146
GDALTransformerFunc pfnTransformer
Definition: gdalwarper.h:179
int nBandCount
Definition: gdalwarper.h:143
double dfWarpMemoryLimit
Definition: gdalwarper.h:127
void * pSrcDensityMaskFuncArg
Unused.
Definition: gdalwarper.h:197
GDALMaskFunc * papfnSrcPerBandValidityMaskFunc
Unused.
Definition: gdalwarper.h:185
GDALResampleAlg eResampleAlg
Definition: gdalwarper.h:130
GDALMaskFunc pfnSrcValidityMaskFunc
Unused.
Definition: gdalwarper.h:190
void * hCutline
Definition: gdalwarper.h:220
void * pDstValidityMaskFuncArg
Unused.
Definition: gdalwarper.h:207
void ** papSrcPerBandValidityMaskFuncArg
Unused.
Definition: gdalwarper.h:187
double * padfDstNoDataReal
Definition: gdalwarper.h:165
double * padfSrcNoDataImag
Definition: gdalwarper.h:162
void * pPostWarpProcessorArg
Unused.
Definition: gdalwarper.h:217