GDAL
|
00001 /****************************************************************************** 00002 * $Id: gdal_priv.h 18501 2010-01-09 18:43:12Z mloskot $ 00003 * 00004 * Name: gdal_priv.h 00005 * Project: GDAL Core 00006 * Purpose: GDAL Core C++/Private declarations. 00007 * Author: Frank Warmerdam, warmerdam@pobox.com 00008 * 00009 ****************************************************************************** 00010 * Copyright (c) 1998, Frank Warmerdam 00011 * 00012 * Permission is hereby granted, free of charge, to any person obtaining a 00013 * copy of this software and associated documentation files (the "Software"), 00014 * to deal in the Software without restriction, including without limitation 00015 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 00016 * and/or sell copies of the Software, and to permit persons to whom the 00017 * Software is furnished to do so, subject to the following conditions: 00018 * 00019 * The above copyright notice and this permission notice shall be included 00020 * in all copies or substantial portions of the Software. 00021 * 00022 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 00023 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00024 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 00025 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 00026 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 00027 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 00028 * DEALINGS IN THE SOFTWARE. 00029 ****************************************************************************/ 00030 00031 #ifndef GDAL_PRIV_H_INCLUDED 00032 #define GDAL_PRIV_H_INCLUDED 00033 00034 /* -------------------------------------------------------------------- */ 00035 /* Predeclare various classes before pulling in gdal.h, the */ 00036 /* public declarations. */ 00037 /* -------------------------------------------------------------------- */ 00038 class GDALMajorObject; 00039 class GDALDataset; 00040 class GDALRasterBand; 00041 class GDALDriver; 00042 class GDALRasterAttributeTable; 00043 class GDALProxyDataset; 00044 class GDALProxyRasterBand; 00045 00046 /* -------------------------------------------------------------------- */ 00047 /* Pull in the public declarations. This gets the C apis, and */ 00048 /* also various constants. However, we will still get to */ 00049 /* provide the real class definitions for the GDAL classes. */ 00050 /* -------------------------------------------------------------------- */ 00051 00052 #include "gdal.h" 00053 #include "gdal_frmts.h" 00054 #include "cpl_vsi.h" 00055 #include "cpl_conv.h" 00056 #include "cpl_string.h" 00057 #include "cpl_minixml.h" 00058 #include <vector> 00059 00060 #define GMO_VALID 0x0001 00061 #define GMO_IGNORE_UNIMPLEMENTED 0x0002 00062 #define GMO_SUPPORT_MD 0x0004 00063 #define GMO_SUPPORT_MDMD 0x0008 00064 #define GMO_MD_DIRTY 0x0010 00065 #define GMO_PAM_CLASS 0x0020 00066 00067 /************************************************************************/ 00068 /* GDALMultiDomainMetadata */ 00069 /************************************************************************/ 00070 00071 class CPL_DLL GDALMultiDomainMetadata 00072 { 00073 private: 00074 char **papszDomainList; 00075 char ***papapszMetadataLists; 00076 00077 public: 00078 GDALMultiDomainMetadata(); 00079 ~GDALMultiDomainMetadata(); 00080 00081 int XMLInit( CPLXMLNode *psMetadata, int bMerge ); 00082 CPLXMLNode *Serialize(); 00083 00084 char **GetDomainList() { return papszDomainList; } 00085 00086 char **GetMetadata( const char * pszDomain = "" ); 00087 CPLErr SetMetadata( char ** papszMetadata, 00088 const char * pszDomain = "" ); 00089 const char *GetMetadataItem( const char * pszName, 00090 const char * pszDomain = "" ); 00091 CPLErr SetMetadataItem( const char * pszName, 00092 const char * pszValue, 00093 const char * pszDomain = "" ); 00094 00095 void Clear(); 00096 }; 00097 00098 /* ******************************************************************** */ 00099 /* GDALMajorObject */ 00100 /* */ 00101 /* Base class providing metadata, description and other */ 00102 /* services shared by major objects. */ 00103 /* ******************************************************************** */ 00104 00106 00107 class CPL_DLL GDALMajorObject 00108 { 00109 protected: 00110 int nFlags; // GMO_* flags. 00111 CPLString sDescription; 00112 GDALMultiDomainMetadata oMDMD; 00113 00114 public: 00115 GDALMajorObject(); 00116 virtual ~GDALMajorObject(); 00117 00118 int GetMOFlags(); 00119 void SetMOFlags(int nFlags); 00120 00121 virtual const char *GetDescription() const; 00122 virtual void SetDescription( const char * ); 00123 00124 virtual char **GetMetadata( const char * pszDomain = "" ); 00125 virtual CPLErr SetMetadata( char ** papszMetadata, 00126 const char * pszDomain = "" ); 00127 virtual const char *GetMetadataItem( const char * pszName, 00128 const char * pszDomain = "" ); 00129 virtual CPLErr SetMetadataItem( const char * pszName, 00130 const char * pszValue, 00131 const char * pszDomain = "" ); 00132 }; 00133 00134 /* ******************************************************************** */ 00135 /* GDALDefaultOverviews */ 00136 /* ******************************************************************** */ 00137 class CPL_DLL GDALDefaultOverviews 00138 { 00139 friend class GDALDataset; 00140 00141 GDALDataset *poDS; 00142 GDALDataset *poODS; 00143 00144 CPLString osOvrFilename; 00145 00146 int bOvrIsAux; 00147 00148 int bCheckedForMask; 00149 int bOwnMaskDS; 00150 GDALDataset *poMaskDS; 00151 00152 // for "overview datasets" we record base level info so we can 00153 // find our way back to get overview masks. 00154 GDALDataset *poBaseDS; 00155 00156 // Stuff for deferred initialize/overviewscans... 00157 bool bCheckedForOverviews; 00158 void OverviewScan(); 00159 char *pszInitName; 00160 int bInitNameIsOVR; 00161 char **papszInitSiblingFiles; 00162 00163 public: 00164 GDALDefaultOverviews(); 00165 ~GDALDefaultOverviews(); 00166 00167 void Initialize( GDALDataset *poDS, const char *pszName = NULL, 00168 char **papszSiblingFiles = NULL, 00169 int bNameIsOVR = FALSE ); 00170 00171 int IsInitialized(); 00172 00173 // Overview Related 00174 00175 int GetOverviewCount(int); 00176 GDALRasterBand *GetOverview(int,int); 00177 00178 CPLErr BuildOverviews( const char * pszBasename, 00179 const char * pszResampling, 00180 int nOverviews, int * panOverviewList, 00181 int nBands, int * panBandList, 00182 GDALProgressFunc pfnProgress, 00183 void *pProgressData ); 00184 00185 CPLErr BuildOverviewsSubDataset( const char * pszPhysicalFile, 00186 const char * pszResampling, 00187 int nOverviews, int * panOverviewList, 00188 int nBands, int * panBandList, 00189 GDALProgressFunc pfnProgress, 00190 void *pProgressData ); 00191 00192 CPLErr CleanOverviews(); 00193 00194 // Mask Related 00195 00196 CPLErr CreateMaskBand( int nFlags, int nBand = -1 ); 00197 GDALRasterBand *GetMaskBand( int nBand ); 00198 int GetMaskFlags( int nBand ); 00199 00200 int HaveMaskFile( char **papszSiblings = NULL, 00201 const char *pszBasename = NULL ); 00202 00203 }; 00204 00205 /* ******************************************************************** */ 00206 /* GDALDataset */ 00207 /* ******************************************************************** */ 00208 00210 00211 class CPL_DLL GDALDataset : public GDALMajorObject 00212 { 00213 friend GDALDatasetH CPL_STDCALL GDALOpen( const char *, GDALAccess); 00214 friend GDALDatasetH CPL_STDCALL GDALOpenShared( const char *, GDALAccess); 00215 friend class GDALDriver; 00216 friend class GDALDefaultOverviews; 00217 friend class GDALProxyDataset; 00218 00219 protected: 00220 GDALDriver *poDriver; 00221 GDALAccess eAccess; 00222 00223 // Stored raster information. 00224 int nRasterXSize; 00225 int nRasterYSize; 00226 int nBands; 00227 GDALRasterBand **papoBands; 00228 00229 int bForceCachedIO; 00230 00231 int nRefCount; 00232 int bShared; 00233 00234 GDALDataset(void); 00235 void RasterInitialize( int, int ); 00236 void SetBand( int, GDALRasterBand * ); 00237 00238 GDALDefaultOverviews oOvManager; 00239 00240 virtual CPLErr IBuildOverviews( const char *, int, int *, 00241 int, int *, GDALProgressFunc, void * ); 00242 00243 virtual CPLErr IRasterIO( GDALRWFlag, int, int, int, int, 00244 void *, int, int, GDALDataType, 00245 int, int *, int, int, int ); 00246 00247 CPLErr BlockBasedRasterIO( GDALRWFlag, int, int, int, int, 00248 void *, int, int, GDALDataType, 00249 int, int *, int, int, int ); 00250 void BlockBasedFlushCache(); 00251 00252 friend class GDALRasterBand; 00253 00254 public: 00255 virtual ~GDALDataset(); 00256 00257 int GetRasterXSize( void ); 00258 int GetRasterYSize( void ); 00259 int GetRasterCount( void ); 00260 GDALRasterBand *GetRasterBand( int ); 00261 00262 virtual void FlushCache(void); 00263 00264 virtual const char *GetProjectionRef(void); 00265 virtual CPLErr SetProjection( const char * ); 00266 00267 virtual CPLErr GetGeoTransform( double * ); 00268 virtual CPLErr SetGeoTransform( double * ); 00269 00270 virtual CPLErr AddBand( GDALDataType eType, 00271 char **papszOptions=NULL ); 00272 00273 virtual void *GetInternalHandle( const char * ); 00274 virtual GDALDriver *GetDriver(void); 00275 virtual char **GetFileList(void); 00276 00277 virtual int GetGCPCount(); 00278 virtual const char *GetGCPProjection(); 00279 virtual const GDAL_GCP *GetGCPs(); 00280 virtual CPLErr SetGCPs( int nGCPCount, const GDAL_GCP *pasGCPList, 00281 const char *pszGCPProjection ); 00282 00283 virtual CPLErr AdviseRead( int nXOff, int nYOff, int nXSize, int nYSize, 00284 int nBufXSize, int nBufYSize, 00285 GDALDataType eDT, 00286 int nBandCount, int *panBandList, 00287 char **papszOptions ); 00288 00289 virtual CPLErr CreateMaskBand( int nFlags ); 00290 00291 CPLErr RasterIO( GDALRWFlag, int, int, int, int, 00292 void *, int, int, GDALDataType, 00293 int, int *, int, int, int ); 00294 00295 int Reference(); 00296 int Dereference(); 00297 GDALAccess GetAccess() { return eAccess; } 00298 00299 int GetShared(); 00300 void MarkAsShared(); 00301 00302 static GDALDataset **GetOpenDatasets( int *pnDatasetCount ); 00303 00304 CPLErr BuildOverviews( const char *, int, int *, 00305 int, int *, GDALProgressFunc, void * ); 00306 }; 00307 00308 /* ******************************************************************** */ 00309 /* GDALRasterBlock */ 00310 /* ******************************************************************** */ 00311 00313 00314 class CPL_DLL GDALRasterBlock 00315 { 00316 GDALDataType eType; 00317 00318 int bDirty; 00319 int nLockCount; 00320 00321 int nXOff; 00322 int nYOff; 00323 00324 int nXSize; 00325 int nYSize; 00326 00327 void *pData; 00328 00329 GDALRasterBand *poBand; 00330 00331 GDALRasterBlock *poNext; 00332 GDALRasterBlock *poPrevious; 00333 00334 public: 00335 GDALRasterBlock( GDALRasterBand *, int, int ); 00336 virtual ~GDALRasterBlock(); 00337 00338 CPLErr Internalize( void ); 00339 void Touch( void ); 00340 void MarkDirty( void ); 00341 void MarkClean( void ); 00342 void AddLock( void ) { nLockCount++; } 00343 void DropLock( void ) { nLockCount--; } 00344 void Detach(); 00345 00346 CPLErr Write(); 00347 00348 GDALDataType GetDataType() { return eType; } 00349 int GetXOff() { return nXOff; } 00350 int GetYOff() { return nYOff; } 00351 int GetXSize() { return nXSize; } 00352 int GetYSize() { return nYSize; } 00353 int GetDirty() { return bDirty; } 00354 int GetLockCount() { return nLockCount; } 00355 00356 void *GetDataRef( void ) { return pData; } 00357 00360 GDALRasterBand *GetBand() { return poBand; } 00361 00362 static int FlushCacheBlock(); 00363 static void Verify(); 00364 00365 static int SafeLockBlock( GDALRasterBlock ** ); 00366 }; 00367 00368 /* ******************************************************************** */ 00369 /* GDALColorTable */ 00370 /* ******************************************************************** */ 00371 00374 class CPL_DLL GDALColorTable 00375 { 00376 GDALPaletteInterp eInterp; 00377 00378 std::vector<GDALColorEntry> aoEntries; 00379 00380 public: 00381 GDALColorTable( GDALPaletteInterp = GPI_RGB ); 00382 ~GDALColorTable(); 00383 00384 GDALColorTable *Clone() const; 00385 00386 GDALPaletteInterp GetPaletteInterpretation() const; 00387 00388 int GetColorEntryCount() const; 00389 const GDALColorEntry *GetColorEntry( int ) const; 00390 int GetColorEntryAsRGB( int, GDALColorEntry * ) const; 00391 void SetColorEntry( int, const GDALColorEntry * ); 00392 int CreateColorRamp( int, const GDALColorEntry * , 00393 int, const GDALColorEntry * ); 00394 }; 00395 00396 /* ******************************************************************** */ 00397 /* GDALRasterBand */ 00398 /* ******************************************************************** */ 00399 00401 00402 class CPL_DLL GDALRasterBand : public GDALMajorObject 00403 { 00404 protected: 00405 GDALDataset *poDS; 00406 int nBand; /* 1 based */ 00407 00408 int nRasterXSize; 00409 int nRasterYSize; 00410 00411 GDALDataType eDataType; 00412 GDALAccess eAccess; 00413 00414 /* stuff related to blocking, and raster cache */ 00415 int nBlockXSize; 00416 int nBlockYSize; 00417 int nBlocksPerRow; 00418 int nBlocksPerColumn; 00419 00420 int bSubBlockingActive; 00421 int nSubBlocksPerRow; 00422 int nSubBlocksPerColumn; 00423 GDALRasterBlock **papoBlocks; 00424 00425 int nBlockReads; 00426 int bForceCachedIO; 00427 00428 GDALRasterBand *poMask; 00429 bool bOwnMask; 00430 int nMaskFlags; 00431 00432 friend class GDALDataset; 00433 friend class GDALRasterBlock; 00434 friend class GDALProxyRasterBand; 00435 00436 protected: 00437 virtual CPLErr IReadBlock( int, int, void * ) = 0; 00438 virtual CPLErr IWriteBlock( int, int, void * ); 00439 virtual CPLErr IRasterIO( GDALRWFlag, int, int, int, int, 00440 void *, int, int, GDALDataType, 00441 int, int ); 00442 CPLErr OverviewRasterIO( GDALRWFlag, int, int, int, int, 00443 void *, int, int, GDALDataType, 00444 int, int ); 00445 00446 int InitBlockInfo(); 00447 00448 CPLErr AdoptBlock( int, int, GDALRasterBlock * ); 00449 GDALRasterBlock *TryGetLockedBlockRef( int nXBlockOff, int nYBlockYOff ); 00450 00451 public: 00452 GDALRasterBand(); 00453 00454 virtual ~GDALRasterBand(); 00455 00456 int GetXSize(); 00457 int GetYSize(); 00458 int GetBand(); 00459 GDALDataset*GetDataset(); 00460 00461 GDALDataType GetRasterDataType( void ); 00462 void GetBlockSize( int *, int * ); 00463 GDALAccess GetAccess(); 00464 00465 CPLErr RasterIO( GDALRWFlag, int, int, int, int, 00466 void *, int, int, GDALDataType, 00467 int, int ); 00468 CPLErr ReadBlock( int, int, void * ); 00469 00470 CPLErr WriteBlock( int, int, void * ); 00471 00472 GDALRasterBlock *GetLockedBlockRef( int nXBlockOff, int nYBlockOff, 00473 int bJustInitialize = FALSE ); 00474 CPLErr FlushBlock( int = -1, int = -1 ); 00475 00476 unsigned char* GetIndexColorTranslationTo(/* const */ GDALRasterBand* poReferenceBand, 00477 unsigned char* pTranslationTable = NULL, 00478 int* pApproximateMatching = NULL); 00479 00480 // New OpengIS CV_SampleDimension stuff. 00481 00482 virtual CPLErr FlushCache(); 00483 virtual char **GetCategoryNames(); 00484 virtual double GetNoDataValue( int *pbSuccess = NULL ); 00485 virtual double GetMinimum( int *pbSuccess = NULL ); 00486 virtual double GetMaximum(int *pbSuccess = NULL ); 00487 virtual double GetOffset( int *pbSuccess = NULL ); 00488 virtual double GetScale( int *pbSuccess = NULL ); 00489 virtual const char *GetUnitType(); 00490 virtual GDALColorInterp GetColorInterpretation(); 00491 virtual GDALColorTable *GetColorTable(); 00492 virtual CPLErr Fill(double dfRealValue, double dfImaginaryValue = 0); 00493 00494 virtual CPLErr SetCategoryNames( char ** ); 00495 virtual CPLErr SetNoDataValue( double ); 00496 virtual CPLErr SetColorTable( GDALColorTable * ); 00497 virtual CPLErr SetColorInterpretation( GDALColorInterp ); 00498 virtual CPLErr SetOffset( double ); 00499 virtual CPLErr SetScale( double ); 00500 virtual CPLErr SetUnitType( const char * ); 00501 00502 virtual CPLErr GetStatistics( int bApproxOK, int bForce, 00503 double *pdfMin, double *pdfMax, 00504 double *pdfMean, double *padfStdDev ); 00505 virtual CPLErr ComputeStatistics( int bApproxOK, 00506 double *pdfMin, double *pdfMax, 00507 double *pdfMean, double *pdfStdDev, 00508 GDALProgressFunc, void *pProgressData ); 00509 virtual CPLErr SetStatistics( double dfMin, double dfMax, 00510 double dfMean, double dfStdDev ); 00511 virtual CPLErr ComputeRasterMinMax( int, double* ); 00512 00513 virtual int HasArbitraryOverviews(); 00514 virtual int GetOverviewCount(); 00515 virtual GDALRasterBand *GetOverview(int); 00516 virtual GDALRasterBand *GetRasterSampleOverview( int ); 00517 virtual CPLErr BuildOverviews( const char *, int, int *, 00518 GDALProgressFunc, void * ); 00519 00520 virtual CPLErr AdviseRead( int nXOff, int nYOff, int nXSize, int nYSize, 00521 int nBufXSize, int nBufYSize, 00522 GDALDataType eDT, char **papszOptions ); 00523 00524 virtual CPLErr GetHistogram( double dfMin, double dfMax, 00525 int nBuckets, int * panHistogram, 00526 int bIncludeOutOfRange, int bApproxOK, 00527 GDALProgressFunc, void *pProgressData ); 00528 00529 virtual CPLErr GetDefaultHistogram( double *pdfMin, double *pdfMax, 00530 int *pnBuckets, int ** ppanHistogram, 00531 int bForce, 00532 GDALProgressFunc, void *pProgressData); 00533 virtual CPLErr SetDefaultHistogram( double dfMin, double dfMax, 00534 int nBuckets, int *panHistogram ); 00535 00536 virtual const GDALRasterAttributeTable *GetDefaultRAT(); 00537 virtual CPLErr SetDefaultRAT( const GDALRasterAttributeTable * ); 00538 00539 virtual GDALRasterBand *GetMaskBand(); 00540 virtual int GetMaskFlags(); 00541 virtual CPLErr CreateMaskBand( int nFlags ); 00542 }; 00543 00544 /* ******************************************************************** */ 00545 /* GDALAllValidMaskBand */ 00546 /* ******************************************************************** */ 00547 00548 class CPL_DLL GDALAllValidMaskBand : public GDALRasterBand 00549 { 00550 protected: 00551 virtual CPLErr IReadBlock( int, int, void * ); 00552 00553 public: 00554 GDALAllValidMaskBand( GDALRasterBand * ); 00555 virtual ~GDALAllValidMaskBand(); 00556 00557 virtual GDALRasterBand *GetMaskBand(); 00558 virtual int GetMaskFlags(); 00559 }; 00560 00561 /* ******************************************************************** */ 00562 /* GDALNoDataMaskBand */ 00563 /* ******************************************************************** */ 00564 00565 class CPL_DLL GDALNoDataMaskBand : public GDALRasterBand 00566 { 00567 double dfNoDataValue; 00568 GDALRasterBand *poParent; 00569 00570 protected: 00571 virtual CPLErr IReadBlock( int, int, void * ); 00572 00573 public: 00574 GDALNoDataMaskBand( GDALRasterBand * ); 00575 virtual ~GDALNoDataMaskBand(); 00576 }; 00577 00578 /* ******************************************************************** */ 00579 /* GDALNoDataValuesMaskBand */ 00580 /* ******************************************************************** */ 00581 00582 class CPL_DLL GDALNoDataValuesMaskBand : public GDALRasterBand 00583 { 00584 double *padfNodataValues; 00585 00586 protected: 00587 virtual CPLErr IReadBlock( int, int, void * ); 00588 00589 public: 00590 GDALNoDataValuesMaskBand( GDALDataset * ); 00591 virtual ~GDALNoDataValuesMaskBand(); 00592 }; 00593 00594 /* ******************************************************************** */ 00595 /* GDALOpenInfo */ 00596 /* */ 00597 /* Structure of data about dataset for open functions. */ 00598 /* ******************************************************************** */ 00599 00600 class CPL_DLL GDALOpenInfo 00601 { 00602 public: 00603 GDALOpenInfo( const char * pszFile, GDALAccess eAccessIn, 00604 char **papszSiblingFiles = NULL ); 00605 ~GDALOpenInfo( void ); 00606 00607 char *pszFilename; 00608 char **papszSiblingFiles; 00609 00610 GDALAccess eAccess; 00611 00612 int bStatOK; 00613 int bIsDirectory; 00614 00615 FILE *fp; 00616 00617 int nHeaderBytes; 00618 GByte *pabyHeader; 00619 00620 }; 00621 00622 /* ******************************************************************** */ 00623 /* GDALDriver */ 00624 /* ******************************************************************** */ 00625 00626 00638 class CPL_DLL GDALDriver : public GDALMajorObject 00639 { 00640 public: 00641 GDALDriver(); 00642 ~GDALDriver(); 00643 00644 /* -------------------------------------------------------------------- */ 00645 /* Public C++ methods. */ 00646 /* -------------------------------------------------------------------- */ 00647 GDALDataset *Create( const char * pszName, 00648 int nXSize, int nYSize, int nBands, 00649 GDALDataType eType, char ** papszOptions ); 00650 00651 CPLErr Delete( const char * pszName ); 00652 CPLErr Rename( const char * pszNewName, 00653 const char * pszOldName ); 00654 CPLErr CopyFiles( const char * pszNewName, 00655 const char * pszOldName ); 00656 00657 GDALDataset *CreateCopy( const char *, GDALDataset *, 00658 int, char **, 00659 GDALProgressFunc pfnProgress, 00660 void * pProgressData ); 00661 00662 /* -------------------------------------------------------------------- */ 00663 /* The following are semiprivate, not intended to be accessed */ 00664 /* by anyone but the formats instantiating and populating the */ 00665 /* drivers. */ 00666 /* -------------------------------------------------------------------- */ 00667 GDALDataset *(*pfnOpen)( GDALOpenInfo * ); 00668 00669 GDALDataset *(*pfnCreate)( const char * pszName, 00670 int nXSize, int nYSize, int nBands, 00671 GDALDataType eType, 00672 char ** papszOptions ); 00673 00674 CPLErr (*pfnDelete)( const char * pszName ); 00675 00676 GDALDataset *(*pfnCreateCopy)( const char *, GDALDataset *, 00677 int, char **, 00678 GDALProgressFunc pfnProgress, 00679 void * pProgressData ); 00680 00681 void *pDriverData; 00682 00683 void (*pfnUnloadDriver)(GDALDriver *); 00684 00685 int (*pfnIdentify)( GDALOpenInfo * ); 00686 00687 CPLErr (*pfnRename)( const char * pszNewName, 00688 const char * pszOldName ); 00689 CPLErr (*pfnCopyFiles)( const char * pszNewName, 00690 const char * pszOldName ); 00691 00692 /* -------------------------------------------------------------------- */ 00693 /* Helper methods. */ 00694 /* -------------------------------------------------------------------- */ 00695 GDALDataset *DefaultCreateCopy( const char *, GDALDataset *, 00696 int, char **, 00697 GDALProgressFunc pfnProgress, 00698 void * pProgressData ); 00699 static CPLErr DefaultCopyMasks( GDALDataset *poSrcDS, 00700 GDALDataset *poDstDS, 00701 int bStrict ); 00702 static CPLErr QuietDelete( const char * pszName ); 00703 }; 00704 00705 /* ******************************************************************** */ 00706 /* GDALDriverManager */ 00707 /* ******************************************************************** */ 00708 00716 class CPL_DLL GDALDriverManager : public GDALMajorObject 00717 { 00718 int nDrivers; 00719 GDALDriver **papoDrivers; 00720 00721 char *pszHome; 00722 00723 public: 00724 GDALDriverManager(); 00725 ~GDALDriverManager(); 00726 00727 int GetDriverCount( void ); 00728 GDALDriver *GetDriver( int ); 00729 GDALDriver *GetDriverByName( const char * ); 00730 00731 int RegisterDriver( GDALDriver * ); 00732 void MoveDriver( GDALDriver *, int ); 00733 void DeregisterDriver( GDALDriver * ); 00734 00735 void AutoLoadDrivers(); 00736 void AutoSkipDrivers(); 00737 00738 const char *GetHome(); 00739 void SetHome( const char * ); 00740 }; 00741 00742 /* Not a public symbol for the moment */ 00743 CPLErr 00744 GDALRegenerateOverviewsMultiBand(int nBands, GDALRasterBand** papoSrcBands, 00745 int nOverviews, 00746 GDALRasterBand*** papapoOverviewBands, 00747 const char * pszResampling, 00748 GDALProgressFunc pfnProgress, void * pProgressData ); 00749 00750 CPL_C_START 00751 GDALDriverManager CPL_DLL * GetGDALDriverManager( void ); 00752 CPL_C_END 00753 00754 /* ==================================================================== */ 00755 /* An assortment of overview related stuff. */ 00756 /* ==================================================================== */ 00757 00758 CPL_C_START 00759 00760 #ifndef WIN32CE 00761 00762 CPLErr CPL_DLL 00763 HFAAuxBuildOverviews( const char *pszOvrFilename, GDALDataset *poParentDS, 00764 GDALDataset **ppoDS, 00765 int nBands, int *panBandList, 00766 int nNewOverviews, int *panNewOverviewList, 00767 const char *pszResampling, 00768 GDALProgressFunc pfnProgress, 00769 void *pProgressData ); 00770 00771 #endif /* WIN32CE */ 00772 00773 CPLErr CPL_DLL 00774 GTIFFBuildOverviews( const char * pszFilename, 00775 int nBands, GDALRasterBand **papoBandList, 00776 int nOverviews, int * panOverviewList, 00777 const char * pszResampling, 00778 GDALProgressFunc pfnProgress, void * pProgressData ); 00779 00780 CPLErr CPL_DLL 00781 GDALDefaultBuildOverviews( GDALDataset *hSrcDS, const char * pszBasename, 00782 const char * pszResampling, 00783 int nOverviews, int * panOverviewList, 00784 int nBands, int * panBandList, 00785 GDALProgressFunc pfnProgress, void * pProgressData); 00786 00787 int CPL_DLL GDALBandGetBestOverviewLevel(GDALRasterBand* poBand, 00788 int &nXOff, int &nYOff, 00789 int &nXSize, int &nYSize, 00790 int nBufXSize, int nBufYSize); 00791 00792 int CPL_DLL GDALOvLevelAdjust( int nOvLevel, int nXSize ); 00793 00794 GDALDataset CPL_DLL * 00795 GDALFindAssociatedAuxFile( const char *pszBasefile, GDALAccess eAccess, 00796 GDALDataset *poDependentDS ); 00797 00798 /* ==================================================================== */ 00799 /* Misc functions. */ 00800 /* ==================================================================== */ 00801 00802 CPLErr CPL_DLL GDALParseGMLCoverage( CPLXMLNode *psTree, 00803 int *pnXSize, int *pnYSize, 00804 double *padfGeoTransform, 00805 char **ppszProjection ); 00806 00807 /* ==================================================================== */ 00808 /* Infrastructure to check that dataset characteristics are valid */ 00809 /* ==================================================================== */ 00810 00811 int CPL_DLL GDALCheckDatasetDimensions( int nXSize, int nYSize ); 00812 int CPL_DLL GDALCheckBandCount( int nBands, int bIsZeroAllowed ); 00813 00814 CPL_C_END 00815 00816 #endif /* ndef GDAL_PRIV_H_INCLUDED */