MrSID Decode SDK for Raster Reference Manual  9.5.4.4709
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    lt_uint32 getModifications(const LTIScene &scene) const;
00112    LT_STATUS getMetadataBlob(const char *type, LTIOStreamInf *&stream) const;
00113 
00114    // LTIImageStage
00115    lt_int64 getEncodingCost(const LTIScene& scene) const;
00116    bool getReaderScene(const LTIScene &decodeScene,
00117                        LTIScene &readerScene) const;
00118    LTIMaskSource *getMask() const;
00119    bool getPipelineInfo(LTIPipelineInfo info) const;
00120 
00126    void setFillMethod(LTIPixelFillMethod method,
00127                       double fuzzyThreshold /*= LTISceneBuffer::DefaultFuzzyThreshold*/);
00128    
00132    LTIPixelFillMethod getFillMethod(void) const;
00133    double getFuzzyThreshold(void) const;
00134 
00139    void setResampleMethod(LTIResampleMethod resampleMethod);
00140 
00141    void setMagSnapThreshold(double threshold);
00142    
00146    LTIResampleMethod getResampleMethod(void) const;
00147 
00148    void setResamplePixelCenter(bool usePixelCenter);
00149    
00150    // for LizardTech internal use only
00151    bool getReaderScene(lt_uint32 child,
00152                        const LTIScene &decodeScene,
00153                        LTIScene &mosaicScene,
00154                        LTIScene &readerScene) const;
00155    // for LizardTech internal use only
00156    bool getOverviewReaderScene(const LTIScene &decodeScene,
00157                                LTIScene &mosaicScene,
00158                                LTIScene &readerScene) const;
00159 
00160    // for LizardTech internal use only
00161    class InSceneCallback
00162    {
00163    public:
00164       virtual LT_STATUS found(const LTIScene &scene,
00165                               lt_uint32 imageNum,
00166                               LTIEmbeddedImage &embedded,
00167                               LTIImageStage &image) = 0;
00168    };
00169 
00170    // for LizardTech internal use only
00171    LT_STATUS forEachImageStageInScene(const LTIScene &scene,
00172                                       InSceneCallback &callback);
00173 
00174    // for LizardTech internal use only
00175    void setDeleteImages(bool deleteImages);
00176    // for LizardTech internal use only
00177    bool getDeleteImages(void) const;
00178 
00179    // for LizardTech internal use only
00180    LT_STATUS loadImage(lt_uint32 i,
00181                        LTIEmbeddedImage *&embedded,
00182                        LTIImageStage *&raw);
00183    // for LizardTech internal use only
00184    LT_STATUS closeImage(lt_uint32 i);
00185 
00186    // for LizardTech internal use only
00187    // does not take ownship of pipelineBuilder
00188    // don't call this function in inside a decodeBegin()/decodeStrip()/decodeEnd() loop
00189    LT_STATUS setPipelineBuilder(LTIPipelineBuilder *pipelineBuilder);
00190 
00191    // for LizardTech internal use only
00192    const LTIRTree &getRTree(void) const;
00193    // for LizardTech internal use only
00194    LTIImageStageManager &getImageStageManager(void) const;
00195 
00196    // for LizardTech internal use only
00197    bool hasOverviewImage(void) const;
00198    // for LizardTech internal use only
00199    double getOverviewMag(void) const;
00200    
00201 protected:
00202    LT_STATUS decodeBegin(const LTIPixel &pixelProps,
00203                          const LTIScene &fullScene);
00204    LT_STATUS decodeStrip(LTISceneBuffer &stripBuffer,
00205                          const LTIScene &stripScene);
00206    LT_STATUS decodeEnd(void);
00207 
00208 private:
00209    class ListImageStagesInSceneCallback;
00210    struct TileInfo;
00211 
00212    LT_STATUS setupPixelProps(TileInfo *tiles, lt_uint32 numTiles,
00213                              const LTIPixel *background,
00214                              bool mergeMetadata);
00215 
00216    LT_STATUS setupGeoProps(TileInfo *tiles, lt_uint32 numTiles,
00217                            bool useMultires);
00218 
00219    LT_STATUS setupBuffers(lt_uint32 numTiles);
00220    LT_STATUS setupOverview(void);
00221    
00222    LTIImageStageManager *m_imageStageManager;
00223 
00224    LTIRTree *m_rtree;
00225 
00226    // open image book keeping
00227    LTIImageStage **m_rImage;
00228    LTIEmbeddedImage **m_fImage;
00229    int *m_sImage;
00230    LTIPixelFillMethod m_fillMethod;
00231    double m_fuzzyThreshold;
00232    AlphaMode m_alphaMode;
00233    LTIResampleMethod m_resampleMethod;
00234    bool m_usePixelCenter;
00235    double m_magSnapThreshold;
00236    bool m_deleteImages;
00237 
00238    LTIPipelineBuilder *m_pipelineBuilder;
00239 
00240    // imageInScene
00241    lt_uint32 *m_inSceneList;
00242 
00243    LTIEmbeddedImage *m_overview;
00244    double m_overviewMag;
00245 };
00246 
00247 #ifndef DOXYGEN_EXCLUDE
00248 
00249 class LTIPipelineBuilder
00250 {
00251 public:
00252    virtual LT_STATUS buildPipeline(lt_uint32 imageNumber,
00253                                    LTIImageStage *&pipeline) = 0;
00254 };
00255 
00256 #endif
00257 
00258 LT_END_NAMESPACE(LizardTech)
00259 
00260 
00261 #endif // LTI_MOSAIC_FILTER_H