[gdal-dev] RE: progressive rendering

Even Rouault even.rouault at mines-paris.org
Wed Aug 27 16:34:58 EDT 2008


Norman,

as I see you are currently editing your proposal and I've not yet made my 
comments, here I go.

I would like that the dataset object to be added as the first argument of the 
callback, and a void* user_data to be added as the last argument

So the call would be :

ds->RasterIO (GF_Read, xOff, yOff, xSize, ySize, NULL (1), bufXSize, bufYSize, 
bufType, nBandCount, bandMap, nPixelSpace, nLineSpace, nBandSpace, 
pfnProgressIO, pProgressUserData)

typedef (*GDALRasterIOProgressFunc) (GDALDatasetH hDS, int xOff, int yOff, int 
xSize, int ySize, void * pBuf, int bufXSize, int bufYSize, GDALDataType 
bufType, int nBandCount, int* bandMap, int nPixelSpace, int nLineSpace, int 
nBandSpace, void* pProgressUserData)


I've a few questions so that your explanations and proposals are clear to my 
mind.

- Is the extended version of the RasterIO() call still blocking as the current 
version?
My understanding of the discussion is "yes", but I would like a yes/no 
confirmation. If "no", then I don't understand at all how it can work.

- What happens if the user specifies a not NULL argument as the output buffer 
( in (1) ) ? What happens if the user specifies GF_Write ?
It is probably an argument for a name change, something like 
ProgressiveRasterIO.

- Is it guaranteed that the bufType, nBandCount, bandMap, nPixelSpace, 
nLineSpace, nBandSpace specified by the caller will be the values passed to 
the call back function ?

- Maybe it can make sense to add some way of cancelling the whole RasterIO 
call by providing a callback, like the standard progress callback 
(GDALProgressFunc in gdal.h) mechanism do ? Because the RasterIO() will spend 
most of the time waiting for data. It could resume from time to time to call 
that callback and see if the user still wants the request to be continued. It 
would be nice if the mechanism could provide some percentage of the total 
progress as it might be tedious for the user to compute that ? But that's 
probably not easy to define if you first update the whole request area with a 
low resolution, and then at higher resolutions.

- What happens if the user issues another call to RasterIO(), traditionnal 
version and/or your extended version, in the pfnProgressIO callback ? Is it 
forbidden, or does the answer depend of the underlying driver ?

Best regards



More information about the gdal-dev mailing list