GDAL
|
00001 /****************************************************************************** 00002 * $Id: gdal_priv.h 15038 2008-07-26 11:46:05Z rouault $ 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 public: 00157 GDALDefaultOverviews(); 00158 ~GDALDefaultOverviews(); 00159 00160 void Initialize( GDALDataset *poDS, const char *pszName = NULL, 00161 char **papszSiblingFiles = NULL, 00162 int bNameIsOVR = FALSE ); 00163 00164 int IsInitialized() { return poDS != NULL && strlen(osOvrFilename) > 0; } 00165 00166 // Overview Related 00167 00168 int GetOverviewCount(int); 00169 GDALRasterBand *GetOverview(int,int); 00170 00171 CPLErr BuildOverviews( const char * pszBasename, 00172 const char * pszResampling, 00173 int nOverviews, int * panOverviewList, 00174 int nBands, int * panBandList, 00175 GDALProgressFunc pfnProgress, 00176 void *pProgressData ); 00177 00178 // Mask Related 00179 00180 CPLErr CreateMaskBand( int nFlags, int nBand = -1 ); 00181 GDALRasterBand *GetMaskBand( int nBand ); 00182 int GetMaskFlags( int nBand ); 00183 00184 int HaveMaskFile( char **papszSiblings = NULL, 00185 const char *pszBasename = NULL ); 00186 00187 }; 00188 00189 /* ******************************************************************** */ 00190 /* GDALDataset */ 00191 /* ******************************************************************** */ 00192 00194 00195 class CPL_DLL GDALDataset : public GDALMajorObject 00196 { 00197 friend GDALDatasetH CPL_STDCALL GDALOpen( const char *, GDALAccess); 00198 friend GDALDatasetH CPL_STDCALL GDALOpenShared( const char *, GDALAccess); 00199 friend class GDALDriver; 00200 friend class GDALDefaultOverviews; 00201 friend class GDALProxyDataset; 00202 00203 protected: 00204 GDALDriver *poDriver; 00205 GDALAccess eAccess; 00206 00207 // Stored raster information. 00208 int nRasterXSize; 00209 int nRasterYSize; 00210 int nBands; 00211 GDALRasterBand **papoBands; 00212 00213 int bForceCachedIO; 00214 00215 int nRefCount; 00216 int bShared; 00217 00218 GDALDataset(void); 00219 void RasterInitialize( int, int ); 00220 void SetBand( int, GDALRasterBand * ); 00221 00222 GDALDefaultOverviews oOvManager; 00223 00224 virtual CPLErr IBuildOverviews( const char *, int, int *, 00225 int, int *, GDALProgressFunc, void * ); 00226 00227 virtual CPLErr IRasterIO( GDALRWFlag, int, int, int, int, 00228 void *, int, int, GDALDataType, 00229 int, int *, int, int, int ); 00230 00231 CPLErr BlockBasedRasterIO( GDALRWFlag, int, int, int, int, 00232 void *, int, int, GDALDataType, 00233 int, int *, int, int, int ); 00234 void BlockBasedFlushCache(); 00235 00236 friend class GDALRasterBand; 00237 00238 public: 00239 virtual ~GDALDataset(); 00240 00241 int GetRasterXSize( void ); 00242 int GetRasterYSize( void ); 00243 int GetRasterCount( void ); 00244 GDALRasterBand *GetRasterBand( int ); 00245 00246 virtual void FlushCache(void); 00247 00248 virtual const char *GetProjectionRef(void); 00249 virtual CPLErr SetProjection( const char * ); 00250 00251 virtual CPLErr GetGeoTransform( double * ); 00252 virtual CPLErr SetGeoTransform( double * ); 00253 00254 virtual CPLErr AddBand( GDALDataType eType, 00255 char **papszOptions=NULL ); 00256 00257 virtual void *GetInternalHandle( const char * ); 00258 virtual GDALDriver *GetDriver(void); 00259 virtual char **GetFileList(void); 00260 00261 virtual int GetGCPCount(); 00262 virtual const char *GetGCPProjection(); 00263 virtual const GDAL_GCP *GetGCPs(); 00264 virtual CPLErr SetGCPs( int nGCPCount, const GDAL_GCP *pasGCPList, 00265 const char *pszGCPProjection ); 00266 00267 virtual CPLErr AdviseRead( int nXOff, int nYOff, int nXSize, int nYSize, 00268 int nBufXSize, int nBufYSize, 00269 GDALDataType eDT, 00270 int nBandCount, int *panBandList, 00271 char **papszOptions ); 00272 00273 virtual CPLErr CreateMaskBand( int nFlags ); 00274 00275 CPLErr RasterIO( GDALRWFlag, int, int, int, int, 00276 void *, int, int, GDALDataType, 00277 int, int *, int, int, int ); 00278 00279 int Reference(); 00280 int Dereference(); 00281 GDALAccess GetAccess() { return eAccess; } 00282 00283 int GetShared(); 00284 void MarkAsShared(); 00285 00286 static GDALDataset **GetOpenDatasets( int *pnDatasetCount ); 00287 00288 CPLErr BuildOverviews( const char *, int, int *, 00289 int, int *, GDALProgressFunc, void * ); 00290 }; 00291 00292 /* ******************************************************************** */ 00293 /* GDALRasterBlock */ 00294 /* ******************************************************************** */ 00295 00296 class CPL_DLL GDALRasterBlock 00297 { 00298 GDALDataType eType; 00299 00300 int bDirty; 00301 int nLockCount; 00302 00303 int nXOff; 00304 int nYOff; 00305 00306 int nXSize; 00307 int nYSize; 00308 00309 void *pData; 00310 00311 GDALRasterBand *poBand; 00312 00313 GDALRasterBlock *poNext; 00314 GDALRasterBlock *poPrevious; 00315 00316 public: 00317 GDALRasterBlock( GDALRasterBand *, int, int ); 00318 virtual ~GDALRasterBlock(); 00319 00320 CPLErr Internalize( void ); /* make copy of data */ 00321 void Touch( void ); /* update age */ 00322 void MarkDirty( void ); /* data has been modified since read */ 00323 void MarkClean( void ); 00324 void AddLock( void ) { nLockCount++; } 00325 void DropLock( void ) { nLockCount--; } 00326 void Detach(); 00327 00328 CPLErr Write(); 00329 00330 GDALDataType GetDataType() { return eType; } 00331 int GetXOff() { return nXOff; } 00332 int GetYOff() { return nYOff; } 00333 int GetXSize() { return nXSize; } 00334 int GetYSize() { return nYSize; } 00335 int GetDirty() { return bDirty; } 00336 int GetLockCount() { return nLockCount; } 00337 00338 void *GetDataRef( void ) { return pData; } 00339 00340 GDALRasterBand *GetBand() { return poBand; } 00341 00342 static int FlushCacheBlock(); 00343 static void Verify(); 00344 00345 static int SafeLockBlock( GDALRasterBlock ** ); 00346 }; 00347 00348 /* ******************************************************************** */ 00349 /* GDALColorTable */ 00350 /* ******************************************************************** */ 00351 00354 class CPL_DLL GDALColorTable 00355 { 00356 GDALPaletteInterp eInterp; 00357 00358 std::vector<GDALColorEntry> aoEntries; 00359 00360 public: 00361 GDALColorTable( GDALPaletteInterp = GPI_RGB ); 00362 ~GDALColorTable(); 00363 00364 GDALColorTable *Clone() const; 00365 00366 GDALPaletteInterp GetPaletteInterpretation() const; 00367 00368 int GetColorEntryCount() const; 00369 const GDALColorEntry *GetColorEntry( int ) const; 00370 int GetColorEntryAsRGB( int, GDALColorEntry * ) const; 00371 void SetColorEntry( int, const GDALColorEntry * ); 00372 int CreateColorRamp( int, const GDALColorEntry * , 00373 int, const GDALColorEntry * ); 00374 }; 00375 00376 /* ******************************************************************** */ 00377 /* GDALRasterBand */ 00378 /* ******************************************************************** */ 00379 00381 00382 class CPL_DLL GDALRasterBand : public GDALMajorObject 00383 { 00384 protected: 00385 GDALDataset *poDS; 00386 int nBand; /* 1 based */ 00387 00388 int nRasterXSize; 00389 int nRasterYSize; 00390 00391 GDALDataType eDataType; 00392 GDALAccess eAccess; 00393 00394 /* stuff related to blocking, and raster cache */ 00395 int nBlockXSize; 00396 int nBlockYSize; 00397 int nBlocksPerRow; 00398 int nBlocksPerColumn; 00399 00400 int bSubBlockingActive; 00401 int nSubBlocksPerRow; 00402 int nSubBlocksPerColumn; 00403 GDALRasterBlock **papoBlocks; 00404 00405 int nBlockReads; 00406 int bForceCachedIO; 00407 00408 GDALRasterBand *poMask; 00409 bool bOwnMask; 00410 int nMaskFlags; 00411 00412 friend class GDALDataset; 00413 friend class GDALRasterBlock; 00414 friend class GDALProxyRasterBand; 00415 00416 protected: 00417 virtual CPLErr IReadBlock( int, int, void * ) = 0; 00418 virtual CPLErr IWriteBlock( int, int, void * ); 00419 virtual CPLErr IRasterIO( GDALRWFlag, int, int, int, int, 00420 void *, int, int, GDALDataType, 00421 int, int ); 00422 CPLErr OverviewRasterIO( GDALRWFlag, int, int, int, int, 00423 void *, int, int, GDALDataType, 00424 int, int ); 00425 00426 int InitBlockInfo(); 00427 00428 CPLErr AdoptBlock( int, int, GDALRasterBlock * ); 00429 GDALRasterBlock *TryGetLockedBlockRef( int nXBlockOff, int nYBlockYOff ); 00430 00431 public: 00432 GDALRasterBand(); 00433 00434 virtual ~GDALRasterBand(); 00435 00436 int GetXSize(); 00437 int GetYSize(); 00438 int GetBand(); 00439 GDALDataset*GetDataset(); 00440 00441 GDALDataType GetRasterDataType( void ); 00442 void GetBlockSize( int *, int * ); 00443 GDALAccess GetAccess(); 00444 00445 CPLErr RasterIO( GDALRWFlag, int, int, int, int, 00446 void *, int, int, GDALDataType, 00447 int, int ); 00448 CPLErr ReadBlock( int, int, void * ); 00449 00450 CPLErr WriteBlock( int, int, void * ); 00451 00452 GDALRasterBlock *GetLockedBlockRef( int nXBlockOff, int nYBlockOff, 00453 int bJustInitialize = FALSE ); 00454 CPLErr FlushBlock( int = -1, int = -1 ); 00455 00456 unsigned char* GetIndexColorTranslationTo(/* const */ GDALRasterBand* poReferenceBand, 00457 unsigned char* pTranslationTable = NULL, 00458 int* pApproximateMatching = NULL); 00459 00460 // New OpengIS CV_SampleDimension stuff. 00461 00462 virtual CPLErr FlushCache(); 00463 virtual char **GetCategoryNames(); 00464 virtual double GetNoDataValue( int *pbSuccess = NULL ); 00465 virtual double GetMinimum( int *pbSuccess = NULL ); 00466 virtual double GetMaximum(int *pbSuccess = NULL ); 00467 virtual double GetOffset( int *pbSuccess = NULL ); 00468 virtual double GetScale( int *pbSuccess = NULL ); 00469 virtual const char *GetUnitType(); 00470 virtual GDALColorInterp GetColorInterpretation(); 00471 virtual GDALColorTable *GetColorTable(); 00472 virtual CPLErr Fill(double dfRealValue, double dfImaginaryValue = 0); 00473 00474 virtual CPLErr SetCategoryNames( char ** ); 00475 virtual CPLErr SetNoDataValue( double ); 00476 virtual CPLErr SetColorTable( GDALColorTable * ); 00477 virtual CPLErr SetColorInterpretation( GDALColorInterp ); 00478 virtual CPLErr SetOffset( double ); 00479 virtual CPLErr SetScale( double ); 00480 virtual CPLErr SetUnitType( const char * ); 00481 00482 virtual CPLErr GetStatistics( int bApproxOK, int bForce, 00483 double *pdfMin, double *pdfMax, 00484 double *pdfMean, double *padfStdDev ); 00485 virtual CPLErr ComputeStatistics( int bApproxOK, 00486 double *pdfMin, double *pdfMax, 00487 double *pdfMean, double *pdfStdDev, 00488 GDALProgressFunc, void *pProgressData ); 00489 virtual CPLErr SetStatistics( double dfMin, double dfMax, 00490 double dfMean, double dfStdDev ); 00491 virtual CPLErr ComputeRasterMinMax( int, double* ); 00492 00493 virtual int HasArbitraryOverviews(); 00494 virtual int GetOverviewCount(); 00495 virtual GDALRasterBand *GetOverview(int); 00496 virtual GDALRasterBand *GetRasterSampleOverview( int ); 00497 virtual CPLErr BuildOverviews( const char *, int, int *, 00498 GDALProgressFunc, void * ); 00499 00500 virtual CPLErr AdviseRead( int nXOff, int nYOff, int nXSize, int nYSize, 00501 int nBufXSize, int nBufYSize, 00502 GDALDataType eDT, char **papszOptions ); 00503 00504 virtual CPLErr GetHistogram( double dfMin, double dfMax, 00505 int nBuckets, int * panHistogram, 00506 int bIncludeOutOfRange, int bApproxOK, 00507 GDALProgressFunc, void *pProgressData ); 00508 00509 virtual CPLErr GetDefaultHistogram( double *pdfMin, double *pdfMax, 00510 int *pnBuckets, int ** ppanHistogram, 00511 int bForce, 00512 GDALProgressFunc, void *pProgressData); 00513 virtual CPLErr SetDefaultHistogram( double dfMin, double dfMax, 00514 int nBuckets, int *panHistogram ); 00515 00516 virtual const GDALRasterAttributeTable *GetDefaultRAT(); 00517 virtual CPLErr SetDefaultRAT( const GDALRasterAttributeTable * ); 00518 00519 virtual GDALRasterBand *GetMaskBand(); 00520 virtual int GetMaskFlags(); 00521 virtual CPLErr CreateMaskBand( int nFlags ); 00522 }; 00523 00524 /* ******************************************************************** */ 00525 /* GDALAllValidMaskBand */ 00526 /* ******************************************************************** */ 00527 00528 class CPL_DLL GDALAllValidMaskBand : public GDALRasterBand 00529 { 00530 protected: 00531 virtual CPLErr IReadBlock( int, int, void * ); 00532 00533 public: 00534 GDALAllValidMaskBand( GDALRasterBand * ); 00535 virtual ~GDALAllValidMaskBand(); 00536 00537 virtual GDALRasterBand *GetMaskBand(); 00538 virtual int GetMaskFlags(); 00539 }; 00540 00541 /* ******************************************************************** */ 00542 /* GDALNoDataMaskBand */ 00543 /* ******************************************************************** */ 00544 00545 class CPL_DLL GDALNoDataMaskBand : public GDALRasterBand 00546 { 00547 double dfNoDataValue; 00548 GDALRasterBand *poParent; 00549 00550 protected: 00551 virtual CPLErr IReadBlock( int, int, void * ); 00552 00553 public: 00554 GDALNoDataMaskBand( GDALRasterBand * ); 00555 virtual ~GDALNoDataMaskBand(); 00556 }; 00557 00558 /* ******************************************************************** */ 00559 /* GDALNoDataValuesMaskBand */ 00560 /* ******************************************************************** */ 00561 00562 class CPL_DLL GDALNoDataValuesMaskBand : public GDALRasterBand 00563 { 00564 double *padfNodataValues; 00565 00566 protected: 00567 virtual CPLErr IReadBlock( int, int, void * ); 00568 00569 public: 00570 GDALNoDataValuesMaskBand( GDALDataset * ); 00571 virtual ~GDALNoDataValuesMaskBand(); 00572 }; 00573 00574 /* ******************************************************************** */ 00575 /* GDALOpenInfo */ 00576 /* */ 00577 /* Structure of data about dataset for open functions. */ 00578 /* ******************************************************************** */ 00579 00580 class CPL_DLL GDALOpenInfo 00581 { 00582 public: 00583 GDALOpenInfo( const char * pszFile, GDALAccess eAccessIn, 00584 char **papszSiblingFiles = NULL ); 00585 ~GDALOpenInfo( void ); 00586 00587 char *pszFilename; 00588 char **papszSiblingFiles; 00589 00590 GDALAccess eAccess; 00591 00592 int bStatOK; 00593 int bIsDirectory; 00594 00595 FILE *fp; 00596 00597 int nHeaderBytes; 00598 GByte *pabyHeader; 00599 00600 }; 00601 00602 /* ******************************************************************** */ 00603 /* GDALDriver */ 00604 /* ******************************************************************** */ 00605 00606 00618 class CPL_DLL GDALDriver : public GDALMajorObject 00619 { 00620 public: 00621 GDALDriver(); 00622 ~GDALDriver(); 00623 00624 /* -------------------------------------------------------------------- */ 00625 /* Public C++ methods. */ 00626 /* -------------------------------------------------------------------- */ 00627 GDALDataset *Create( const char * pszName, 00628 int nXSize, int nYSize, int nBands, 00629 GDALDataType eType, char ** papszOptions ); 00630 00631 CPLErr Delete( const char * pszName ); 00632 CPLErr Rename( const char * pszNewName, 00633 const char * pszOldName ); 00634 CPLErr CopyFiles( const char * pszNewName, 00635 const char * pszOldName ); 00636 00637 GDALDataset *CreateCopy( const char *, GDALDataset *, 00638 int, char **, 00639 GDALProgressFunc pfnProgress, 00640 void * pProgressData ); 00641 00642 /* -------------------------------------------------------------------- */ 00643 /* The following are semiprivate, not intended to be accessed */ 00644 /* by anyone but the formats instantiating and populating the */ 00645 /* drivers. */ 00646 /* -------------------------------------------------------------------- */ 00647 GDALDataset *(*pfnOpen)( GDALOpenInfo * ); 00648 00649 GDALDataset *(*pfnCreate)( const char * pszName, 00650 int nXSize, int nYSize, int nBands, 00651 GDALDataType eType, 00652 char ** papszOptions ); 00653 00654 CPLErr (*pfnDelete)( const char * pszName ); 00655 00656 GDALDataset *(*pfnCreateCopy)( const char *, GDALDataset *, 00657 int, char **, 00658 GDALProgressFunc pfnProgress, 00659 void * pProgressData ); 00660 00661 void *pDriverData; 00662 00663 void (*pfnUnloadDriver)(GDALDriver *); 00664 00665 int (*pfnIdentify)( GDALOpenInfo * ); 00666 00667 CPLErr (*pfnRename)( const char * pszNewName, 00668 const char * pszOldName ); 00669 CPLErr (*pfnCopyFiles)( const char * pszNewName, 00670 const char * pszOldName ); 00671 00672 /* -------------------------------------------------------------------- */ 00673 /* Helper methods. */ 00674 /* -------------------------------------------------------------------- */ 00675 GDALDataset *DefaultCreateCopy( const char *, GDALDataset *, 00676 int, char **, 00677 GDALProgressFunc pfnProgress, 00678 void * pProgressData ); 00679 static CPLErr DefaultCopyMasks( GDALDataset *poSrcDS, 00680 GDALDataset *poDstDS, 00681 int bStrict ); 00682 static CPLErr QuietDelete( const char * pszName ); 00683 }; 00684 00685 /* ******************************************************************** */ 00686 /* GDALDriverManager */ 00687 /* ******************************************************************** */ 00688 00696 class CPL_DLL GDALDriverManager : public GDALMajorObject 00697 { 00698 int nDrivers; 00699 GDALDriver **papoDrivers; 00700 00701 char *pszHome; 00702 00703 public: 00704 GDALDriverManager(); 00705 ~GDALDriverManager(); 00706 00707 int GetDriverCount( void ); 00708 GDALDriver *GetDriver( int ); 00709 GDALDriver *GetDriverByName( const char * ); 00710 00711 int RegisterDriver( GDALDriver * ); 00712 void MoveDriver( GDALDriver *, int ); 00713 void DeregisterDriver( GDALDriver * ); 00714 00715 void AutoLoadDrivers(); 00716 void AutoSkipDrivers(); 00717 00718 const char *GetHome(); 00719 void SetHome( const char * ); 00720 }; 00721 00722 /* Not a public symbol for the moment */ 00723 CPLErr 00724 GDALRegenerateOverviewsMultiBand(int nBands, GDALRasterBand** papoSrcBands, 00725 int nOverviews, 00726 GDALRasterBand*** papapoOverviewBands, 00727 const char * pszResampling, 00728 GDALProgressFunc pfnProgress, void * pProgressData ); 00729 00730 CPL_C_START 00731 GDALDriverManager CPL_DLL * GetGDALDriverManager( void ); 00732 CPL_C_END 00733 00734 /* ==================================================================== */ 00735 /* An assortment of overview related stuff. */ 00736 /* ==================================================================== */ 00737 00738 CPL_C_START 00739 00740 #ifndef WIN32CE 00741 00742 CPLErr CPL_DLL 00743 HFAAuxBuildOverviews( const char *pszOvrFilename, GDALDataset *poParentDS, 00744 GDALDataset **ppoDS, 00745 int nBands, int *panBandList, 00746 int nNewOverviews, int *panNewOverviewList, 00747 const char *pszResampling, 00748 GDALProgressFunc pfnProgress, 00749 void *pProgressData ); 00750 00751 #endif /* WIN32CE */ 00752 00753 CPLErr CPL_DLL 00754 GTIFFBuildOverviews( const char * pszFilename, 00755 int nBands, GDALRasterBand **papoBandList, 00756 int nOverviews, int * panOverviewList, 00757 const char * pszResampling, 00758 GDALProgressFunc pfnProgress, void * pProgressData ); 00759 00760 CPLErr CPL_DLL 00761 GDALDefaultBuildOverviews( GDALDataset *hSrcDS, const char * pszBasename, 00762 const char * pszResampling, 00763 int nOverviews, int * panOverviewList, 00764 int nBands, int * panBandList, 00765 GDALProgressFunc pfnProgress, void * pProgressData); 00766 00767 00768 00769 int CPL_DLL GDALOvLevelAdjust( int nOvLevel, int nXSize ); 00770 00771 GDALDataset CPL_DLL * 00772 GDALFindAssociatedAuxFile( const char *pszBasefile, GDALAccess eAccess, 00773 GDALDataset *poDependentDS ); 00774 00775 /* ==================================================================== */ 00776 /* Misc functions. */ 00777 /* ==================================================================== */ 00778 00779 CPLErr CPL_DLL GDALParseGMLCoverage( CPLXMLNode *psTree, 00780 int *pnXSize, int *pnYSize, 00781 double *padfGeoTransform, 00782 char **ppszProjection ); 00783 00784 CPL_C_END 00785 00786 #endif /* ndef GDAL_PRIV_H_INCLUDED */