Skip to content

Commit 8a313ed

Browse files
author
rouault
committed
RFC 51: RasterIO() improvements : resampling and progress callback. Add -r and -tr options to gdal_translate
From: Even Rouault <[email protected]> git-svn-id: https://svn.osgeo.org/gdal/trunk/gdal@28053 f0d54148-0727-0410-94bb-9a71ac55c965
1 parent 13815c7 commit 8a313ed

File tree

133 files changed

+3724
-1124
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

133 files changed

+3724
-1124
lines changed

MIGRATION_GUIDE.TXT

+12
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,18 @@ Out-of-tree drivers :
6565
* Read RFC 49 for the needed changes. CreateFeature() and SetFeature() virtual
6666
methods must be renamed ICreateFeature() and ISetFeature().
6767

68+
C) RFC 51: RasterIO() improvements : resampling and progress callback
69+
70+
Link: http://trac.osgeo.org/gdal/wiki/rfc51_rasterio_resampling_progress
71+
72+
Out-of-tree drivers :
73+
74+
* Read RFC 51 for the needed changes. GDALRasterBand and GDALDataset::IRasterIO()
75+
take a new GDALRasterIOExtraArg* psExtraArg argument.
76+
GDALRasterBand and GDALDataset::RasterIO() take a new
77+
GDALRasterIOExtraArg* psExtraArg argument
78+
79+
6880
MIGRATION GUIDE FROM GDAL 1.10 to GDAL 1.11
6981
-------------------------------------------
7082

alg/gdal_rpc.cpp

+6-3
Original file line numberDiff line numberDiff line change
@@ -708,7 +708,8 @@ int GDALRPCGetDEMHeight( GDALRPCTransformInfo *psTransform,
708708
double adfElevData[16] = {0};
709709
CPLErr eErr = psTransform->poDS->RasterIO(GF_Read, dXNew, dYNew, 4, 4,
710710
&adfElevData, 4, 4,
711-
GDT_Float64, 1, bands, 0, 0, 0);
711+
GDT_Float64, 1, bands, 0, 0, 0,
712+
NULL);
712713
if(eErr != CE_None)
713714
{
714715
return FALSE;
@@ -753,7 +754,8 @@ int GDALRPCGetDEMHeight( GDALRPCTransformInfo *psTransform,
753754
double adfElevData[4] = {0,0,0,0};
754755
CPLErr eErr = psTransform->poDS->RasterIO(GF_Read, dX, dY, 2, 2,
755756
&adfElevData, 2, 2,
756-
GDT_Float64, 1, bands, 0, 0, 0);
757+
GDT_Float64, 1, bands, 0, 0, 0,
758+
NULL);
757759
if(eErr != CE_None)
758760
{
759761
return FALSE;
@@ -788,7 +790,8 @@ int GDALRPCGetDEMHeight( GDALRPCTransformInfo *psTransform,
788790
}
789791
CPLErr eErr = psTransform->poDS->RasterIO(GF_Read, dX, dY, 1, 1,
790792
&dfDEMH, 1, 1,
791-
GDT_Float64, 1, bands, 0, 0, 0);
793+
GDT_Float64, 1, bands, 0, 0, 0,
794+
NULL);
792795
if(eErr != CE_None ||
793796
(bGotNoDataValue && ARE_REAL_EQUAL(dfNoDataValue, dfDEMH)) )
794797
{

alg/gdal_simplesurf.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -178,9 +178,9 @@ CPLErr GDALSimpleSURF::ConvertRGBToLuminosity(
178178
void *paGreenLayer = CPLMalloc(dataGreenSize * nWidth * nHeight);
179179
void *paBlueLayer = CPLMalloc(dataBlueSize * nWidth * nHeight);
180180

181-
red->RasterIO(GF_Read, 0, 0, nXSize, nYSize, paRedLayer, nWidth, nHeight, eRedType, 0, 0);
182-
green->RasterIO(GF_Read, 0, 0, nXSize, nYSize, paGreenLayer, nWidth, nHeight, eGreenType, 0, 0);
183-
blue->RasterIO(GF_Read, 0, 0, nXSize, nYSize, paBlueLayer, nWidth, nHeight, eBlueType, 0, 0);
181+
red->RasterIO(GF_Read, 0, 0, nXSize, nYSize, paRedLayer, nWidth, nHeight, eRedType, 0, 0, NULL);
182+
green->RasterIO(GF_Read, 0, 0, nXSize, nYSize, paGreenLayer, nWidth, nHeight, eGreenType, 0, 0, NULL);
183+
blue->RasterIO(GF_Read, 0, 0, nXSize, nYSize, paBlueLayer, nWidth, nHeight, eBlueType, 0, 0, NULL);
184184

185185
double maxValue = 255.0;
186186
for (int row = 0; row < nHeight; row++)

alg/gdalrasterize.cpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -679,7 +679,7 @@ CPLErr GDALRasterizeGeometries( GDALDatasetH hDS,
679679
0, iY, poDS->GetRasterXSize(), nThisYChunkSize,
680680
pabyChunkBuf,poDS->GetRasterXSize(),nThisYChunkSize,
681681
eType, nBandCount, panBandList,
682-
0, 0, 0 );
682+
0, 0, 0, NULL );
683683
if( eErr != CE_None )
684684
break;
685685

@@ -699,7 +699,7 @@ CPLErr GDALRasterizeGeometries( GDALDatasetH hDS,
699699
poDS->GetRasterXSize(), nThisYChunkSize,
700700
pabyChunkBuf,
701701
poDS->GetRasterXSize(), nThisYChunkSize,
702-
eType, nBandCount, panBandList, 0, 0, 0 );
702+
eType, nBandCount, panBandList, 0, 0, 0, NULL);
703703

704704
if( !pfnProgress((iY+nThisYChunkSize)/((double)poDS->GetRasterYSize()),
705705
"", pProgressArg ) )
@@ -878,7 +878,7 @@ CPLErr GDALRasterizeLayers( GDALDatasetH hDS,
878878
if ( poDS->RasterIO( GF_Read, 0, 0, poDS->GetRasterXSize(),
879879
nYChunkSize, pabyChunkBuf,
880880
poDS->GetRasterXSize(), nYChunkSize,
881-
eType, nBandCount, panBandList, 0, 0, 0 )
881+
eType, nBandCount, panBandList, 0, 0, 0, NULL )
882882
!= CE_None )
883883
{
884884
CPLError( CE_Failure, CPLE_OutOfMemory,
@@ -993,7 +993,7 @@ CPLErr GDALRasterizeLayers( GDALDatasetH hDS,
993993
poDS->GetRasterXSize(), nThisYChunkSize,
994994
pabyChunkBuf,
995995
poDS->GetRasterXSize(), nThisYChunkSize,
996-
eType, nBandCount, panBandList, 0, 0, 0 );
996+
eType, nBandCount, panBandList, 0, 0, 0, NULL );
997997
if( eErr != CE_None )
998998
break;
999999
}
@@ -1035,7 +1035,7 @@ CPLErr GDALRasterizeLayers( GDALDatasetH hDS,
10351035
poDS->GetRasterXSize(), nThisYChunkSize,
10361036
pabyChunkBuf,
10371037
poDS->GetRasterXSize(), nThisYChunkSize,
1038-
eType, nBandCount, panBandList, 0, 0, 0 );
1038+
eType, nBandCount, panBandList, 0, 0, 0, NULL );
10391039
}
10401040

10411041
poLayer->ResetReading();
@@ -1066,7 +1066,7 @@ CPLErr GDALRasterizeLayers( GDALDatasetH hDS,
10661066
poDS->GetRasterXSize(), nYChunkSize,
10671067
pabyChunkBuf,
10681068
poDS->GetRasterXSize(), nYChunkSize,
1069-
eType, nBandCount, panBandList, 0, 0, 0 );
1069+
eType, nBandCount, panBandList, 0, 0, 0, NULL );
10701070
}
10711071

10721072
/* -------------------------------------------------------------------- */

alg/gdaltransformgeolocs.cpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -109,13 +109,13 @@ GDALTransformGeolocations( GDALRasterBandH hXBand,
109109
for( iLine = 0; eErr == CE_None && iLine < nYSize; iLine++ )
110110
{
111111
eErr = poXBand->RasterIO( GF_Read, 0, iLine, nXSize, 1,
112-
padfX, nXSize, 1, GDT_Float64, 0, 0 );
112+
padfX, nXSize, 1, GDT_Float64, 0, 0, NULL );
113113
if( eErr == CE_None )
114114
eErr = poYBand->RasterIO( GF_Read, 0, iLine, nXSize, 1,
115-
padfY, nXSize, 1, GDT_Float64, 0, 0 );
115+
padfY, nXSize, 1, GDT_Float64, 0, 0, NULL );
116116
if( eErr == CE_None && poZBand != NULL )
117117
eErr = poZBand->RasterIO( GF_Read, 0, iLine, nXSize, 1,
118-
padfZ, nXSize, 1, GDT_Float64, 0, 0 );
118+
padfZ, nXSize, 1, GDT_Float64, 0, 0, NULL );
119119
else
120120
memset( padfZ, 0, sizeof(double) * nXSize);
121121

@@ -127,13 +127,13 @@ GDALTransformGeolocations( GDALRasterBandH hXBand,
127127

128128
if( eErr == CE_None )
129129
eErr = poXBand->RasterIO( GF_Write, 0, iLine, nXSize, 1,
130-
padfX, nXSize, 1, GDT_Float64, 0, 0 );
130+
padfX, nXSize, 1, GDT_Float64, 0, 0, NULL );
131131
if( eErr == CE_None )
132132
eErr = poYBand->RasterIO( GF_Write, 0, iLine, nXSize, 1,
133-
padfY, nXSize, 1, GDT_Float64, 0, 0 );
133+
padfY, nXSize, 1, GDT_Float64, 0, 0, NULL );
134134
if( eErr == CE_None && poZBand != NULL )
135135
eErr = poZBand->RasterIO( GF_Write, 0, iLine, nXSize, 1,
136-
padfZ, nXSize, 1, GDT_Float64, 0, 0 );
136+
padfZ, nXSize, 1, GDT_Float64, 0, 0, NULL );
137137

138138
if( eErr == CE_None )
139139
pfnProgress( (iLine+1) / (double) nYSize, "", pProgressArg );

alg/gdalwarper.h

+14
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444

4545
CPL_C_START
4646

47+
/* Note: values are selected to be consistant with GDALRIOResampleAlg of gcore/gdal.h */
4748
/*! Warp Resampling Algorithm */
4849
typedef enum {
4950
/*! Nearest neighbour (select on one input pixel) */ GRA_NearestNeighbour=0,
@@ -53,6 +54,7 @@ typedef enum {
5354
/*! Lanczos windowed sinc interpolation (6x6 kernel) */ GRA_Lanczos=4,
5455
/*! Average (computes the average of all non-NODATA contributing pixels) */ GRA_Average=5,
5556
/*! Mode (selects the value which appears most often of all the sampled points) */ GRA_Mode=6
57+
// GRA_Gauss=7 reserved.
5658
} GDALResampleAlg;
5759

5860
typedef int
@@ -414,6 +416,18 @@ CPLErr CPL_DLL GDALWarpRegionToBuffer( GDALWarpOperationH, int, int, int, int,
414416
void *, GDALDataType,
415417
int, int, int, int );
416418

419+
/************************************************************************/
420+
/* Warping kernel functions */
421+
/************************************************************************/
422+
423+
int GWKGetFilterRadius(GDALResampleAlg eResampleAlg);
424+
425+
typedef double (*FilterFuncType)(double dfX);
426+
FilterFuncType GWKGetFilterFunc(GDALResampleAlg eResampleAlg);
427+
428+
typedef double (*FilterFunc4ValuesType)(double* padfVals);
429+
FilterFunc4ValuesType GWKGetFilterFunc4Values(GDALResampleAlg eResampleAlg);
430+
417431
CPL_C_END
418432

419433
#endif /* ndef GDAL_ALG_H_INCLUDED */

0 commit comments

Comments
 (0)