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 );
93 GDALWarpNoDataMasker(
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 );
99 GDALWarpDstAlphaMasker(
void *pMaskFuncArg,
int nBandCount,
GDALDataType eType,
100 int nXOff,
int nYOff,
int nXSize,
int nYSize,
102 int bMaskIsFloat,
void *pValidityMask );
104 GDALWarpSrcAlphaMasker(
void *pMaskFuncArg,
int nBandCount,
GDALDataType eType,
105 int nXOff,
int nYOff,
int nXSize,
int nYSize,
107 int bMaskIsFloat,
void *pValidityMask,
int* pbOutAllOpaque );
110 GDALWarpSrcMaskMasker(
void *pMaskFuncArg,
int nBandCount,
GDALDataType eType,
111 int nXOff,
int nYOff,
int nXSize,
int nYSize,
113 int bMaskIsFloat,
void *pValidityMask );
116 GDALWarpCutlineMasker(
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);
237 void CPL_DLL CPL_STDCALL
240 void CPL_DLL CPL_STDCALL
243 void CPL_DLL CPL_STDCALL
246 void CPL_DLL CPL_STDCALL
249 void CPL_DLL CPL_STDCALL
252 void CPL_DLL CPL_STDCALL
255 void CPL_DLL CPL_STDCALL
269 CPLErr CPL_DLL CPL_STDCALL
274 GDALProgressFunc pfnProgress,
void *pProgressArg,
277 CPLErr CPL_DLL CPL_STDCALL
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,
308 CPLErr CPL_DLL CPL_STDCALL
314 #if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
325 #define WARP_EXTRA_ELTS 1
436 void* GWKThreadsCreate(
char** papszWarpOptions,
438 void* pTransformerArg);
439 void GWKThreadsEnd(
void* psThreadDataIn);
453 typedef struct _GDALWarpChunk GDALWarpChunk;
464 int ValidateOptions();
466 CPLErr ComputeSourceWindow(
int nDstXOff,
int nDstYOff,
467 int nDstXSize,
int nDstYSize,
468 int *pnSrcXOff,
int *pnSrcYOff,
469 int *pnSrcXSize,
int *pnSrcYSize,
470 double *pdfSrcXExtraSize,
double *pdfSrcYExtraSize,
471 double* pdfSrcFillRatio );
473 void ComputeSourceWindowStartingFromSource(
474 int nDstXOff,
int nDstYOff,
475 int nDstXSize,
int nDstYSize,
476 double* padfSrcMinX,
double* padfSrcMinY,
477 double* padfSrcMaxX,
double* padfSrcMaxY);
480 const char *pszType );
483 CPLMutex *hWarpMutex;
487 GDALWarpChunk *pasChunkList;
490 unsigned long nLastTimeReported;
494 void WipeChunkList();
495 CPLErr CollectChunkListInternal(
int nDstXOff,
int nDstYOff,
496 int nDstXSize,
int nDstYSize );
497 void CollectChunkList(
int nDstXOff,
int nDstYOff,
498 int nDstXSize,
int nDstYSize );
499 void ReportTiming(
const char * );
506 void* CreateDestinationBuffer(
int nDstXSize,
int nDstYSize,
507 int *pbWasInitialized =
nullptr );
508 static void DestroyDestinationBuffer(
void* pDstBuffer);
512 CPLErr ChunkAndWarpImage(
int nDstXOff,
int nDstYOff,
513 int nDstXSize,
int nDstYSize );
514 CPLErr ChunkAndWarpMulti(
int nDstXOff,
int nDstYOff,
515 int nDstXSize,
int nDstYSize );
516 CPLErr WarpRegion(
int nDstXOff,
int nDstYOff,
517 int nDstXSize,
int nDstYSize,
518 int nSrcXOff=0,
int nSrcYOff=0,
519 int nSrcXSize=0,
int nSrcYSize=0,
520 double dfProgressBase=0.0,
double dfProgressScale=1.0);
521 CPLErr WarpRegion(
int nDstXOff,
int nDstYOff,
522 int nDstXSize,
int nDstYSize,
523 int nSrcXOff,
int nSrcYOff,
524 int nSrcXSize,
int nSrcYSize,
525 double dfSrcXExtraSize,
double dfSrcYExtraSize,
526 double dfProgressBase,
double dfProgressScale);
527 CPLErr WarpRegionToBuffer(
int nDstXOff,
int nDstYOff,
528 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 WarpRegionToBuffer(
int nDstXOff,
int nDstYOff,
535 int nDstXSize,
int nDstYSize,
538 int nSrcXOff,
int nSrcYOff,
539 int nSrcXSize,
int nSrcYSize,
540 double dfSrcXExtraSize,
double dfSrcYExtraSize,
541 double dfProgressBase,
double dfProgressScale);
556 int,
int,
int,
int,
int,
int,
int,
int );
559 int,
int,
int,
int );
568 typedef double (*FilterFuncType)(
double dfX);
572 typedef double (*FilterFunc4ValuesType)(
double* padfVals);
573 FilterFunc4ValuesType GWKGetFilterFunc4Values(
GDALResampleAlg eResampleAlg);
This class represents the lowest level of abstraction of warping.
Definition: gdalwarper.h:335
int nXRadius
X size of window to filter.
Definition: gdalwarper.h:387
int nSrcYSize
Height of the source image.
Definition: gdalwarper.h:352
char ** papszWarpOptions
Warp options.
Definition: gdalwarper.h:340
int nFiltInitX
X filtering offset.
Definition: gdalwarper.h:391
double dfXScale
X resampling scale, i.e.
Definition: gdalwarper.h:379
double dfYFilter
Y size of filter kernel.
Definition: gdalwarper.h:385
int nDstXSize
Width of the destination image.
Definition: gdalwarper.h:368
double dfSrcXExtraSize
Extra pixels (included in nSrcXSize) reserved for filter window.
Definition: gdalwarper.h:354
double * padfDstNoDataReal
Array of nBands value for destination nodata.
Definition: gdalwarper.h:421
int nDstXOff
X offset of the destination buffer regarding the top-left corner of the image.
Definition: gdalwarper.h:401
GDALResampleAlg eResample
Resample algorithm.
Definition: gdalwarper.h:343
GDALTransformerFunc pfnTransformer
Pixel transformation function.
Definition: gdalwarper.h:406
GUInt32 * panUnifiedSrcValid
Unified validity mask of size (nSrcXSize * nSrcYSize + WARP_EXTRA_ELTS) / 8.
Definition: gdalwarper.h:363
int nDstYSize
Height of the destination image.
Definition: gdalwarper.h:370
int nBands
Number of input and output bands (excluding alpha bands)
Definition: gdalwarper.h:347
double dfProgressBase
Base/offset value for progress computation.
Definition: gdalwarper.h:416
GDALDataType eWorkingDataType
Working data type.
Definition: gdalwarper.h:345
double dfSrcYExtraSize
Extra pixels (included in nSrcYSize) reserved for filter window.
Definition: gdalwarper.h:356
int nSrcXOff
X offset of the source buffer regarding the top-left corner of the image.
Definition: gdalwarper.h:396
int nSrcYOff
Y offset of the source buffer regarding the top-left corner of the image.
Definition: gdalwarper.h:398
int nDstYOff
Y offset of the destination buffer regarding the top-left corner of the image.
Definition: gdalwarper.h:403
int nFiltInitY
Y filtering offset.
Definition: gdalwarper.h:393
GDALProgressFunc pfnProgress
Progress function.
Definition: gdalwarper.h:411
GUInt32 ** papanBandSrcValid
Array of nBands validity mask of size (nSrcXSize * nSrcYSize + WARP_EXTRA_ELTS) / 8.
Definition: gdalwarper.h:361
void * pProgress
User data provided to pfnProgress.
Definition: gdalwarper.h:413
float * pafUnifiedSrcDensity
Unified source density of size nSrcXSize * nSrcYSize + WARP_EXTRA_ELTS.
Definition: gdalwarper.h:365
int nYRadius
Y size of window to filter.
Definition: gdalwarper.h:389
float * pafDstDensity
Destination density of size nDstXSize * nDstYSize.
Definition: gdalwarper.h:376
double dfXFilter
X size of filter kernel.
Definition: gdalwarper.h:383
double dfYScale
Y resampling scale, i.e.
Definition: gdalwarper.h:381
GByte ** papabyDstImage
Array of nBands destination images of size nDstXSize * nDstYSize.
Definition: gdalwarper.h:372
double dfProgressScale
Scale value for progress computation.
Definition: gdalwarper.h:418
int nSrcXSize
Width of the source image.
Definition: gdalwarper.h:350
void * pTransformerArg
User data provided to pfnTransformer.
Definition: gdalwarper.h:408
GByte ** papabySrcImage
Array of nBands source images of size nSrcXSize * nSrcYSize.
Definition: gdalwarper.h:358
GUInt32 * panDstValid
Validify mask of size (nDstXSize * nDstYSize) / 8.
Definition: gdalwarper.h:374
High level image warping class.
Definition: gdalwarper.h:456
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:1007
char ** CSLConstList
Type of a constant null-terminated list of nul terminated strings.
Definition: cpl_port.h:1216
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:1662
void GDALDestroyWarpOperation(GDALWarpOperationH)
Definition: gdalwarpoperation.cpp:800
GDALWarpOperationH GDALCreateWarpOperation(const GDALWarpOptions *)
Definition: gdalwarpoperation.cpp:779
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:312
void GDALDestroyWarpOptions(GDALWarpOptions *)
Destroy a warp options structure.
Definition: gdalwarper.cpp:1279
void * GDALWarpOperationH
Opaque type representing a GDALWarpOperation object.
Definition: gdalwarper.h:549
CPLErr GDALWarpRegionToBuffer(GDALWarpOperationH, int, int, int, int, void *, GDALDataType, int, int, int, int)
Definition: gdalwarpoperation.cpp:2311
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:1320
CPLErr GDALChunkAndWarpImage(GDALWarpOperationH, int, int, int, int)
Definition: gdalwarpoperation.cpp:982
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:130
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:1568
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:1457
CPLErr GDALInitializeWarpedVRT(GDALDatasetH hDS, GDALWarpOptions *psWO)
Set warp info on virtual warped dataset.
Definition: vrtwarped.cpp:1217
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:1217
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
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
char ** papszWarpOptions
A string list of additional options controlling the warp operation in name=value format.
Definition: gdalwarper.h:129
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
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