MrSID Decode SDK for Raster Reference Manual  9.0.0.3864
lti_mosaicFilter.h
Go to the documentation of this file.
00001 /* $Id$ */
00002 /* //////////////////////////////////////////////////////////////////////////
00003 //                                                                         //
00004 // This code is Copyright (c) 2004 LizardTech, Inc, 1008 Western Avenue,   //
00005 // Suite 200, Seattle, WA 98104.  Unauthorized use or distribution         //
00006 // prohibited.  Access to and use of this code is permitted only under     //
00007 // license from LizardTech, Inc.  Portions of the code are protected by    //
00008 // US and foreign patents and other filings. All Rights Reserved.          //
00009 //                                                                         //
00011 /* PUBLIC */
00012 
00013 #ifndef LTI_MOSAIC_FILTER_H
00014 #define LTI_MOSAIC_FILTER_H
00015 
00016 // lt_lib_mrsid_core
00017 #include "lti_imageStage.h"
00018 #include "lti_imageStageOverrides.h"
00019 #include "lti_imageStageManager.h"
00020 #include "lti_sceneBuffer.h"
00021 
00022 
00023 
00024 LT_BEGIN_NAMESPACE(LizardTech)
00025 
00026 class LTIRTree;
00027 class LTIEmbeddedImage;
00028 class LTIPipelineBuilder;
00029 
00040 #ifdef SWIG
00041 class LTIMosaicFilter : public LTIImageStage
00042 #else
00043 class LTIMosaicFilter : public LTIOverrideDimensions
00044                                <LTIOverridePixelProps
00045                                <LTIOverrideBackgroundPixel
00046                                <LTIOverrideGeoCoord
00047                                <LTIOverrideMagnification
00048                                <LTIOverrideIsSelective
00049                                <LTIOverrideStripHeight
00050                                <LTIOverrideDelegates
00051                                <LTIOverridePixelLookupTables
00052                                <LTIOverrideMetadata
00053                                <LTIImageStage> > > > > > > > > >
00054 #endif
00055 {
00056    LTI_REFERENCE_COUNTED_BOILERPLATE(LTIMosaicFilter);
00057 public:
00058    enum AlphaMode
00059    {
00060       DoNothing,
00061       FromMerge,
00062       FromSourceRectangle,
00063    };
00064 
00088    LT_STATUS initialize(LTIImageStageManager *imageStageManager,
00089                         const LTIPixel* backgroundPixel,
00090                         bool useMultires,
00091                         bool mergeMetadata = true,
00092                         AlphaMode alphaMode = DoNothing);
00093 
00104    static LT_STATUS checkResolutionConformance(LTIImageStageManager *imageStageManager,
00105                                                bool useMultires);
00106 
00107    // LTIImage
00108    LT_STATUS getDimsAtMag(double mag,
00109                           lt_uint32 &width,
00110                           lt_uint32 &height) const;
00111 
00112    // LTIImageStage
00113    lt_int64 getEncodingCost(const LTIScene& scene) const;
00114    bool getReaderScene(const LTIScene &decodeScene,
00115                        LTIScene &readerScene) const;
00116    virtual lt_uint32 getModifications(const LTIScene &scene) const;
00117    LTIMaskSource *getMask() const;
00118    bool getPipelineInfo(LTIPipelineInfo info) const;
00119 
00125    void setFillMethod(LTIPixelFillMethod method,
00126                       double fuzzyThreshold /*= LTISceneBuffer::DefaultFuzzyThreshold*/);
00127    
00131    LTIPixelFillMethod getFillMethod(void) const;
00132    double getFuzzyThreshold(void) const;
00133 
00138    void setResampleMethod(LTIResampleMethod resampleMethod);
00139 
00140    void setMagSnapThreshold(double threshold);
00141    
00145    LTIResampleMethod getResampleMethod(void) const;
00146    
00147    // for LizardTech internal use only
00148    bool getReaderScene(lt_uint32 child,
00149                        const LTIScene &decodeScene,
00150                        LTIScene &mosaicScene,
00151                        LTIScene &readerScene) const;
00152    // for LizardTech internal use only
00153    bool getOverviewReaderScene(const LTIScene &decodeScene,
00154                                LTIScene &mosaicScene,
00155                                LTIScene &readerScene) const;
00156 
00157    // for LizardTech internal use only
00158    class InSceneCallback
00159    {
00160    public:
00161       virtual LT_STATUS found(const LTIScene &scene,
00162                               lt_uint32 imageNum,
00163                               LTIEmbeddedImage &embedded,
00164                               LTIImageStage &image) = 0;
00165    };
00166 
00167    // for LizardTech internal use only
00168    LT_STATUS forEachImageStageInScene(const LTIScene &scene,
00169                                       InSceneCallback &callback);
00170 
00171    // for LizardTech internal use only
00172    void setDeleteImages(bool deleteImages);
00173    // for LizardTech internal use only
00174    bool getDeleteImages(void) const;
00175 
00176    // for LizardTech internal use only
00177    LT_STATUS loadImage(lt_uint32 i,
00178                        LTIEmbeddedImage *&embedded,
00179                        LTIImageStage *&raw);
00180    // for LizardTech internal use only
00181    LT_STATUS closeImage(lt_uint32 i);
00182 
00183    // for LizardTech internal use only
00184    // does not take ownship of pipelineBuilder
00185    // don't call this function in inside a decodeBegin()/decodeStrip()/decodeEnd() loop
00186    LT_STATUS setPipelineBuilder(LTIPipelineBuilder *pipelineBuilder);
00187 
00188    // for LizardTech internal use only
00189    const LTIRTree &getRTree(void) const;
00190    // for LizardTech internal use only
00191    LTIImageStageManager &getImageStageManager(void) const;
00192 
00193    // for LizardTech internal use only
00194    bool hasOverviewImage(void) const;
00195    // for LizardTech internal use only
00196    double getOverviewMag(void) const;
00197    
00198 protected:
00199    LT_STATUS decodeBegin(const LTIPixel &pixelProps,
00200                          const LTIScene &fullScene);
00201    LT_STATUS decodeStrip(LTISceneBuffer &stripBuffer,
00202                          const LTIScene &stripScene);
00203    LT_STATUS decodeEnd(void);
00204 
00205 private:
00206    class ListImageStagesInSceneCallback;
00207    struct TileInfo;
00208 
00209    LT_STATUS setupPixelProps(TileInfo *tiles, lt_uint32 numTiles,
00210                              const LTIPixel *background,
00211                              bool mergeMetadata);
00212 
00213    LT_STATUS setupGeoProps(TileInfo *tiles, lt_uint32 numTiles,
00214                            bool useMultires);
00215 
00216    LT_STATUS setupBuffers(lt_uint32 numTiles);
00217    LT_STATUS setupOverview(void);
00218    
00219    LTIImageStageManager *m_imageStageManager;
00220 
00221    LTIRTree *m_rtree;
00222 
00223    // open image book keeping
00224    LTIImageStage **m_rImage;
00225    LTIEmbeddedImage **m_fImage;
00226    int *m_sImage;
00227    LTIPixelFillMethod m_fillMethod;
00228    double m_fuzzyThreshold;
00229    AlphaMode m_alphaMode;
00230    LTIResampleMethod m_resampleMethod;
00231    double m_magSnapThreshold;
00232    bool m_deleteImages;
00233 
00234    LTIPipelineBuilder *m_pipelineBuilder;
00235 
00236    // imageInScene
00237    lt_uint32 *m_inSceneList;
00238 
00239    LTIEmbeddedImage *m_overview;
00240    double m_overviewMag;
00241 };
00242 
00243 #ifndef DOXYGEN_EXCLUDE
00244 
00245 class LTIPipelineBuilder
00246 {
00247 public:
00248    virtual LT_STATUS buildPipeline(lt_uint32 tileId,
00249                                    LTIImageStage *&pipeline) = 0;
00250 };
00251 
00252 #endif
00253 
00254 LT_END_NAMESPACE(LizardTech)
00255 
00256 
00257 #endif // LTI_MOSAIC_FILTER_H