Changeset 13191

Show
Ignore:
Timestamp:
06/19/13 19:28:28 (9 hours ago)
Author:
robert
Message:

Removed svn:executable property.

Location:
OpenSceneGraph/trunk
Files:
12 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/examples/osgimagesequence/osgimagesequence.cpp

    r13158 r13191  
    131131        else 
    132132        { 
    133             unsigned int maxNum = osg::maximum(imageSequence->getFileNames().size(), 
    134                                                imageSequence->getImages().size()); 
    135                                                 
     133            unsigned int maxNum = imageSequence->getNumImageData(); 
    136134            imageSequence->setLength(double(maxNum)*(1.0/fps)); 
    137135        } 
  • OpenSceneGraph/trunk/include/osg/ImageSequence

    r13041 r13191  
    4949        virtual double getTimeMultiplier() const { return _timeMultiplier; } 
    5050 
    51         typedef std::vector< osg::ref_ptr<osg::Image> >   Images; 
    52         typedef std::vector< std::string >                FileNames; 
     51        struct OSG_EXPORT ImageData 
     52        { 
     53            ImageData(); 
     54            ImageData(const ImageData& id); 
     55            ImageData& operator = (const ImageData& id); 
     56 
     57            std::string                     _filename; 
     58            osg::ref_ptr<osg::Image>        _image; 
     59            osg::ref_ptr<osg::Referenced>   _imageRequest; 
     60        }; 
     61 
     62        typedef std::vector<ImageData> ImageDataList; 
    5363 
    5464        virtual void seek(double time); 
     
    7989        std::string getImageFile(unsigned int pos) const; 
    8090 
    81         unsigned int getNumImageFiles() const { return _fileNames.size(); } 
    82  
    83         FileNames& getFileNames() { return _fileNames; } 
    84         const FileNames& getFileNames() const { return _fileNames; } 
    85  
    8691        void addImage(osg::Image* image); 
    8792 
     
    97102        const Image* getImage(unsigned int pos) const; 
    98103 
    99         unsigned int getNumImages() const { return _images.size(); } 
     104        unsigned int getNumImageData() const { return _imageDataList.size(); } 
    100105 
    101         Images& getImages() { return _images; } 
    102         const Images& getImages() const { return _images; } 
     106        ImageDataList& getImageDataList() { return _imageDataList; } 
     107        const ImageDataList& getImageDataList() const { return _imageDataList; } 
    103108 
     109         
    104110        /** ImageSequence requires a call to update(NodeVisitor*) during the update traversal so return true.*/ 
    105111        virtual bool requiresUpdateCall() const { return true; } 
     
    108114        virtual void update(NodeVisitor* nv); 
    109115 
    110     protected: 
     116 
     117        /** Set the optional osgDB::Options object to use when reading images.*/ 
     118        void setReadOptions(osg::Referenced* options) { _readOptions = options; } 
     119 
     120        /** Get the optional osgDB::Options object used when reading images.*/ 
     121        osg::Referenced* getReadOptions() { return _readOptions.get(); } 
     122 
     123        /** Get the optional osgDB::Options object used when reading images.*/ 
     124        const osg::Referenced* getReadOptions() const { return _readOptions.get(); } 
     125 
     126protected: 
    111127 
    112128        virtual ~ImageSequence() {} 
     
    114130        virtual void applyLoopingMode(); 
    115131 
    116         void setImageToChild(const osg::Image* image); 
     132        void setImageToChild(int pos); 
    117133 
    118134        void computeTimePerImage(); 
     
    130146 
    131147        mutable OpenThreads::Mutex      _mutex; 
    132         FileNames                       _fileNames; 
    133148 
    134         Images                          _images; 
    135  
    136         typedef std::set< std::string > FilesRequested; 
    137         FilesRequested                  _filesRequested; 
     149        ImageDataList                   _imageDataList; 
    138150 
    139151        int                             _previousAppliedImageIndex; 
     
    143155        double                          _seekTime; 
    144156 
    145  
     157        osg::ref_ptr<osg::Referenced>       _readOptions; 
    146158 
    147159}; 
  • OpenSceneGraph/trunk/include/osg/NodeVisitor

    r13041 r13191  
    309309            virtual osg::Image* readImageFile(const std::string& fileName) = 0; 
    310310 
    311             virtual void requestImageFile(const std::string& fileName,osg::Object* attachmentPoint, int attachmentIndex, double timeToMergeBy, const FrameStamp* framestamp) = 0; 
     311            virtual void requestImageFile(const std::string& fileName,osg::Object* attachmentPoint, int attachmentIndex, double timeToMergeBy, const FrameStamp* framestamp, osg::ref_ptr<osg::Referenced>& imageRequest, const osg::Referenced* options=0) = 0; 
    312312 
    313313        protected: 
  • OpenSceneGraph/trunk/include/osg/PagedLOD

    r13041 r13191  
    4545 
    4646 
    47         /** Set the optional database osgDB::Options object to use when loaded children.*/ 
     47        /** Set the optional database osgDB::Options object to use when reading children.*/ 
    4848        void setDatabaseOptions(osg::Referenced* options) { _databaseOptions = options; } 
    4949 
    50         /** Get the optional database osgDB::Options object used when loaded children.*/ 
     50        /** Get the optional database osgDB::Options object used when reading children.*/ 
    5151        osg::Referenced* getDatabaseOptions() { return _databaseOptions.get(); } 
    5252 
    53         /** Get the optional database osgDB::Options object used when loaded children.*/ 
     53        /** Get the optional database osgDB::Options object used when reading children.*/ 
    5454        const osg::Referenced* getDatabaseOptions() const { return _databaseOptions.get(); } 
    5555 
  • OpenSceneGraph/trunk/include/osgDB/ImagePager

    r13144 r13191  
    6161            virtual ~ImageThread(); 
    6262 
    63             bool            _done; 
    64             Mode            _mode; 
    65             ImagePager*     _pager; 
    66             std::string     _name; 
     63            bool                                _done; 
     64            Mode                                _mode; 
     65            ImagePager*                         _pager; 
     66            std::string                         _name; 
    6767        }; 
    6868 
     
    8080        virtual osg::Image* readImageFile(const std::string& fileName); 
    8181 
    82         virtual void requestImageFile(const std::string& fileName,osg::Object* attachmentPoint, int attachmentIndex, double timeToMergeBy, const osg::FrameStamp* framestamp); 
    83  
     82        virtual void requestImageFile(const std::string& fileName, osg::Object* attachmentPoint, int attachmentIndex, double timeToMergeBy, const osg::FrameStamp* framestamp, osg::ref_ptr<osg::Referenced>& imageRequest, const osg::Referenced* options); 
    8483 
    8584        /** Return true if there are pending updates to the scene graph that require a call to updateSceneGraph(double). */ 
     
    114113            osg::ref_ptr<osg::Image>            _loadedImage; 
    115114            RequestQueue*                       _requestQueue; 
     115            osg::ref_ptr<osgDB::Options>        _readOptions; 
    116116 
    117117        }; 
  • OpenSceneGraph/trunk/src/osg/ImageSequence.cpp

    r13186 r13191  
    2323using namespace osg; 
    2424 
     25ImageSequence::ImageData::ImageData() 
     26{ 
     27} 
     28 
     29ImageSequence::ImageData::ImageData(const ImageData& id): 
     30    _filename(id._filename), 
     31    _image(id._image), 
     32    _imageRequest(id._imageRequest) 
     33{ 
     34} 
     35 
     36ImageSequence::ImageData& ImageSequence::ImageData::operator = (const ImageSequence::ImageData& rhs) 
     37{ 
     38    if (&rhs!=this) 
     39    { 
     40        _filename = rhs._filename; 
     41        _image = rhs._image; 
     42        _imageRequest = rhs._imageRequest; 
     43    } 
     44    return *this; 
     45} 
     46 
    2547ImageSequence::ImageSequence() 
    2648{ 
     
    97119void ImageSequence::computeTimePerImage() 
    98120{ 
    99     if (!_fileNames.empty()) _timePerImage = _length / double(_fileNames.size()); 
    100     else if (!_images.empty()) _timePerImage = _length / double(_images.size()); 
     121    if (!_imageDataList.empty()) _timePerImage = _length / double(_imageDataList.size()); 
    101122    else _timePerImage = _length; 
    102123} 
     
    106127    OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_mutex); 
    107128 
    108     if (pos>=_fileNames.size()) _fileNames.resize(pos); 
    109     _fileNames[pos] = fileName; 
     129    if (pos>=_imageDataList.size()) _imageDataList.resize(pos); 
     130    _imageDataList[pos]._filename = fileName; 
    110131} 
    111132 
     
    113134{ 
    114135    OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_mutex); 
    115     return pos<_fileNames.size() ? _fileNames[pos] : std::string(); 
     136    return pos<_imageDataList.size() ? _imageDataList[pos]._filename : std::string(); 
    116137} 
    117138 
     
    119140{ 
    120141    OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_mutex); 
    121     _fileNames.push_back(fileName); 
     142    _imageDataList.push_back(ImageData()); 
     143    _imageDataList.back()._filename = fileName; 
    122144    computeTimePerImage(); 
    123145} 
     
    127149    OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_mutex); 
    128150 
    129     OSG_INFO<<"ImageSequence::setImage("<<pos<<","<<image->getFileName()<<")"<<std::endl; 
    130  
    131     if (pos>=_images.size()) _images.resize(pos+1); 
    132  
    133     _images[pos] = image; 
    134  
    135     // prune from file requested list. 
    136     FilesRequested::iterator itr = _filesRequested.find(image->getFileName()); 
    137     if (itr!=_filesRequested.end()) _filesRequested.erase(itr); 
     151    if (pos>=_imageDataList.size()) _imageDataList.resize(pos+1); 
     152 
     153    _imageDataList[pos]._image = image; 
     154    _imageDataList[pos]._filename = image->getFileName(); 
    138155} 
    139156 
     
    141158{ 
    142159    OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_mutex); 
    143     return pos<_images.size() ? _images[pos].get() : 0; 
     160    return pos<_imageDataList.size() ? _imageDataList[pos]._image.get() : 0; 
    144161} 
    145162 
     
    147164{ 
    148165    OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_mutex); 
    149     return pos<_images.size() ? _images[pos].get() : 0; 
     166    return pos<_imageDataList.size() ? _imageDataList[pos]._image.get() : 0; 
    150167} 
    151168 
     
    157174 
    158175    // OSG_NOTICE<<"merging image in order expected : "<<image->getFileName()<<std::endl; 
    159     _images.push_back(image); 
     176    _imageDataList.push_back(ImageData()); 
     177    _imageDataList.back()._image = image; 
    160178 
    161179    computeTimePerImage(); 
     
    163181    if (data()==0) 
    164182    { 
    165         setImageToChild(_images.front().get()); 
    166     } 
    167 } 
    168  
    169 void ImageSequence::setImageToChild(const osg::Image* image) 
    170 { 
    171     // OSG_NOTICE<<"setImageToChild("<<image<<")"<<std::endl; 
    172  
     183        setImageToChild(_imageDataList.size()-1); 
     184    } 
     185} 
     186 
     187void ImageSequence::setImageToChild(int pos) 
     188{ 
     189     
     190    const osg::Image* image = (pos>=0 && pos<static_cast<int>(_imageDataList.size())) ? _imageDataList[pos]._image.get() : 0; 
    173191    if (image==0) return; 
    174192 
    175193    // check to see if data is changing, if not don't apply 
    176     if (image->data() == data()) return; 
     194    if (image->data() == data()) 
     195    { 
     196        return; 
     197    } 
     198 
     199 
     200    if (_mode==PAGE_AND_DISCARD_USED_IMAGES && _previousAppliedImageIndex>=0) 
     201    { 
     202        if (_previousAppliedImageIndex<pos) 
     203        { 
     204            OSG_INFO<<"Moving forward from "<<_previousAppliedImageIndex<<" to "<<pos<<std::endl; 
     205            while(_previousAppliedImageIndex<pos) 
     206            { 
     207                _imageDataList[_previousAppliedImageIndex]._image = 0; 
     208                OSG_INFO<<"   deleting "<<_previousAppliedImageIndex<<std::endl; 
     209                ++_previousAppliedImageIndex; 
     210            } 
     211        } 
     212        else if (_previousAppliedImageIndex>pos) 
     213        { 
     214            OSG_INFO<<"Moving back from "<<_previousAppliedImageIndex<<" to "<<pos<<std::endl; 
     215            while(_previousAppliedImageIndex>pos) 
     216            { 
     217                _imageDataList[_previousAppliedImageIndex]._image = 0; 
     218                OSG_INFO<<"   deleting "<<_previousAppliedImageIndex<<std::endl; 
     219                --_previousAppliedImageIndex; 
     220            } 
     221        }         
     222    } 
     223     
     224 
     225    _previousAppliedImageIndex = pos; 
    177226 
    178227    setImage(image->s(),image->t(),image->r(), 
     
    198247    if (time<0.0) return 0; 
    199248    int index = int(time/_timePerImage); 
    200     if (index>=int(_images.size())) return int(_images.size())-1; 
     249    if (index>=int(_imageDataList.size())) return int(_imageDataList.size())-1; 
    201250    return index; 
    202251} 
     
    223272    { 
    224273        time = _seekTime; 
     274        useDirectTimeRequest = true; 
    225275        _referenceTime =  fs->getSimulationTime() - time/_timeMultiplier; 
    226276    } 
     
    248298    _seekTimeSet = false; 
    249299 
    250     bool pruneOldImages = false; 
    251  
    252     switch(_mode) 
    253     { 
    254         case(PRE_LOAD_ALL_IMAGES): 
    255         { 
    256             if (irh && _fileNames.size()>_images.size()) 
    257             { 
    258                 FileNames::iterator itr = _fileNames.begin(); 
    259                 for(unsigned int i=0;i<_images.size();++i) ++itr; 
    260  
    261                 for(; itr!=_fileNames.end(); ++itr) 
    262                 { 
    263                     osg::Image* image = irh->readImageFile(*itr); 
    264                     _images.push_back(image); 
    265                 } 
    266             } 
    267  
    268             irh = 0; 
    269             break; 
    270         } 
    271         case(PAGE_AND_RETAIN_IMAGES): 
    272         { 
    273             break; 
    274         } 
    275         case(PAGE_AND_DISCARD_USED_IMAGES): 
    276         { 
    277             pruneOldImages = true; 
    278             break; 
     300    if (irh && _mode==PRE_LOAD_ALL_IMAGES) 
     301    { 
     302        for(ImageDataList::iterator itr = _imageDataList.begin(); 
     303            itr != _imageDataList.end(); 
     304            ++itr) 
     305        { 
     306            if (!(itr->_image) && !(itr->_filename.empty())) 
     307            { 
     308                itr->_image = irh->readImageFile(itr->_filename); 
     309            } 
    279310        } 
    280311    } 
     
    283314    // OSG_NOTICE<<"time= "<<time<<" _timePerImage="<<_timePerImage<<" index="<<index<<" _length="<<_length<<std::endl; 
    284315 
    285     if (index>=int(_images.size())) index = int(_images.size())-1; 
    286  
    287     if (index>=0 && index<int(_images.size())) 
    288     { 
    289         if (pruneOldImages) 
    290         { 
     316    if (index>=int(_imageDataList.size())) index = int(_imageDataList.size())-1; 
     317 
     318    if (index>=0 && index<int(_imageDataList.size())) 
     319    { 
     320        // need to find the nearest relevant change. 
     321        if (!_imageDataList[index]._image) 
     322        {             
    291323            if (_previousAppliedImageIndex<index) 
    292324            { 
    293325                OSG_DEBUG<<"ImageSequence::update(..) Moving forward by "<<index-_previousAppliedImageIndex<<std::endl; 
    294                 while (index>=0 && !_images[index].valid()) 
     326                while (index>=0 && !_imageDataList[index]._image.valid()) 
    295327                { 
    296328                    --index; 
     
    300332            { 
    301333                OSG_DEBUG<<"ImageSequence::update(..) Moving back by "<<_previousAppliedImageIndex-index<<std::endl; 
    302                 while (index<static_cast<int>(_images.size()) && !_images[index].valid()) 
     334                while (index<static_cast<int>(_imageDataList.size()) && !_imageDataList[index]._image.valid()) 
    303335                { 
    304336                    ++index; 
    305337                } 
    306338            } 
     339        } 
     340         
     341        if (index>=0 && index!=_previousAppliedImageIndex) 
     342        { 
     343            setImageToChild(index); 
     344        } 
     345    } 
     346 
     347    // OSG_NOTICE<<"time = "<<time<<std::endl; 
     348 
     349    if (!irh) return; 
     350 
     351    if (useDirectTimeRequest) 
     352    { 
     353        int i = int(time/_timePerImage); 
     354        if ((i>=int(_imageDataList.size()) || !_imageDataList[i]._image)) 
     355        { 
     356             i = osg::clampTo<int>(i, 0, _imageDataList.size()-1); 
     357 
     358             OSG_INFO<<"Requesting file, entry="<<i<<" : _fileNames[i]="<<_imageDataList[i]._filename<<std::endl; 
     359             irh->requestImageFile(_imageDataList[i]._filename, this, i, time, fs, _imageDataList[i]._imageRequest, _readOptions.get()); 
     360        } 
     361    } 
     362    else 
     363    { 
     364        double preLoadTime = time + osg::minimum(irh->getPreLoadTime()*_timeMultiplier, _length); 
     365 
     366        int startLoadIndex = int(time/_timePerImage); 
     367        if (startLoadIndex>=int(_imageDataList.size())) startLoadIndex = int(_imageDataList.size())-1; 
     368        if (startLoadIndex<0) startLoadIndex = 0; 
     369 
     370        int endLoadIndex = int(preLoadTime/_timePerImage); 
     371        if (endLoadIndex>=int(_imageDataList.size())) 
     372        { 
     373            if (looping) 
     374            { 
     375                endLoadIndex -= int(_imageDataList.size()); 
     376            } 
    307377            else 
    308378            { 
    309                 // OSG_NOTICE<<"ImageSequence::update(..) Same index."<<std::endl; 
    310             } 
    311         } 
    312  
    313         if (index>=0) 
    314         { 
    315             // OSG_NOTICE<<"at time "<<time<<" setting child = "<<index<<std::endl; 
    316  
    317             if (_previousAppliedImageIndex!=index) 
    318             { 
    319                 if (_previousAppliedImageIndex >= 0 && 
    320                     _previousAppliedImageIndex<int(_images.size()) && 
    321                     pruneOldImages) 
     379                endLoadIndex = int(_imageDataList.size())-1; 
     380            } 
     381        } 
     382        if (endLoadIndex<0) endLoadIndex = 0; 
     383 
     384        double requestTime = time; 
     385 
     386        if (endLoadIndex<startLoadIndex) 
     387        { 
     388            for(int i=startLoadIndex; i<int(_imageDataList.size()); ++i) 
     389            { 
     390                if (!_imageDataList[i]._image) 
    322391                { 
    323                     _images[_previousAppliedImageIndex] = 0; 
    324                 } 
    325  
    326                 setImageToChild(_images[index].get()); 
    327  
    328                 _previousAppliedImageIndex = index; 
    329             } 
    330         } 
    331     } 
    332  
    333     // OSG_NOTICE<<"time = "<<time<<std::endl; 
    334  
    335     if (!irh) return; 
    336  
    337     if (useDirectTimeRequest) 
    338     { 
    339         int i = int(time/_timePerImage); 
    340         if ((i>=int(_images.size()) || !_images[i])) 
    341         { 
    342              i = osg::clampTo<int>(i, 0, _fileNames.size()-1); 
    343              if (_filesRequested.count(_fileNames[i])==0) 
    344              { 
    345                  OSG_INFO<<"Requesting file, entry="<<i<<" : _fileNames[i]="<<_fileNames[i]<<std::endl; 
    346                 //_filesRequested.insert(_fileNames[i]); 
    347                 irh->requestImageFile(_fileNames[i], this, i, time, fs); 
    348              } 
    349              else 
    350              { 
    351                  OSG_DEBUG<<"File already requested, entry="<<i<<" : _fileNames[i]="<<_fileNames[i]<<std::endl; 
    352              } 
    353         } 
    354     } 
    355     else 
    356     { 
    357         double preLoadTime = time + osg::minimum(irh->getPreLoadTime()*_timeMultiplier, _length); 
    358  
    359         int startLoadIndex = int(time/_timePerImage); 
    360         if (startLoadIndex>=int(_images.size())) startLoadIndex = int(_images.size())-1; 
    361         if (startLoadIndex<0) startLoadIndex = 0; 
    362  
    363         int endLoadIndex = int(preLoadTime/_timePerImage); 
    364         if (endLoadIndex>=int(_fileNames.size())) 
    365         { 
    366             if (looping) 
    367             { 
    368                 endLoadIndex -= int(_fileNames.size()); 
    369             } 
    370             else 
    371             { 
    372                 endLoadIndex = int(_fileNames.size())-1; 
    373             } 
    374         } 
    375         if (endLoadIndex<0) endLoadIndex = 0; 
    376  
    377         double requestTime = time; 
    378  
    379         if (endLoadIndex<startLoadIndex) 
    380         { 
    381             for(int i=startLoadIndex; i<int(_fileNames.size()); ++i) 
    382             { 
    383                 if ((i>=int(_images.size()) || !_images[i]) && _filesRequested.count(_fileNames[i])==0) 
    384                 { 
    385                     //_filesRequested.insert(_fileNames[i]); 
    386                     irh->requestImageFile(_fileNames[i], this, i, requestTime, fs); 
     392                    irh->requestImageFile(_imageDataList[i]._filename, this, i, requestTime, fs, _imageDataList[i]._imageRequest, _readOptions.get()); 
    387393                } 
    388394                requestTime += _timePerImage; 
     
    391397            for(int i=0; i<=endLoadIndex; ++i) 
    392398            { 
    393                 if ((i>=int(_images.size()) || !_images[i]) && _filesRequested.count(_fileNames[i])==0) 
     399                if (!_imageDataList[i]._image) 
    394400                { 
    395                     //_filesRequested.insert(_fileNames[i]); 
    396                     irh->requestImageFile(_fileNames[i], this, i, requestTime, fs); 
     401                    irh->requestImageFile(_imageDataList[i]._filename, this, i, requestTime, fs, _imageDataList[i]._imageRequest, _readOptions.get()); 
    397402                } 
    398403                requestTime += _timePerImage; 
     
    403408            for(int i=startLoadIndex; i<=endLoadIndex; ++i) 
    404409            { 
    405                 if ((i>=int(_images.size()) || !_images[i]) && _filesRequested.count(_fileNames[i])==0) 
     410                if (!_imageDataList[i]._image) 
    406411                { 
    407                     //_filesRequested.insert(_fileNames[i]); 
    408                     irh->requestImageFile(_fileNames[i], this, i, requestTime, fs); 
     412                    irh->requestImageFile(_imageDataList[i]._filename, this, i, requestTime, fs, _imageDataList[i]._imageRequest, _readOptions.get()); 
    409413                } 
    410414                requestTime += _timePerImage; 
     
    412416        } 
    413417 
    414  
    415     } 
    416  
    417 } 
     418    } 
     419 
     420} 
  • OpenSceneGraph/trunk/src/osgDB/ImagePager.cpp

    r13159 r13191  
    8484    // note this will mean that only one ImageSequence can be properly managed at one time, 
    8585    // this hack will be removed once a better system for managing expiry of requests is introduced. 
    86     clear(); 
     86    // clear(); 
    8787 
    8888    OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_requestMutex); 
     
    9191    databaseRequest->_requestQueue = this; 
    9292 
    93     OSG_INFO<<"ImagePager::ReadQueue::add(..), size()="<<_requestList.size()<<std::endl; 
     93    OSG_INFO<<"ImagePager::ReadQueue::add("<<databaseRequest->_fileName<<"), size()="<<_requestList.size()<<std::endl; 
    9494 
    9595    updateBlock(); 
     
    207207        if (imageRequest.valid()) 
    208208        { 
    209             osg::ref_ptr<osg::Image> image = osgDB::readImageFile(imageRequest->_fileName); 
     209            // OSG_NOTICE<<"doing readImageFile("<<imageRequest->_fileName<<") index to assign = "<<imageRequest->_attachmentIndex<<std::endl; 
     210            osg::ref_ptr<osg::Image> image = osgDB::readImageFile(imageRequest->_fileName, imageRequest->_readOptions.get()); 
    210211            if (image.valid()) 
    211212            { 
     213                // OSG_NOTICE<<"   successful readImageFile("<<imageRequest->_fileName<<") index to assign = "<<imageRequest->_attachmentIndex<<std::endl; 
     214                 
    212215                osg::ImageSequence* is = dynamic_cast<osg::ImageSequence*>(imageRequest->_attachmentPoint.get()); 
    213216                if (is) 
     
    267270    _completedQueue = new RequestQueue; 
    268271    _imageThreads.push_back(new ImageThread(this, ImageThread::HANDLE_ALL_REQUESTS, "Image Thread 1")); 
     272#if 1 
    269273    _imageThreads.push_back(new ImageThread(this, ImageThread::HANDLE_ALL_REQUESTS, "Image Thread 2")); 
    270274    _imageThreads.push_back(new ImageThread(this, ImageThread::HANDLE_ALL_REQUESTS, "Image Thread 3")); 
     
    272276    _imageThreads.push_back(new ImageThread(this, ImageThread::HANDLE_ALL_REQUESTS, "Image Thread 5")); 
    273277    _imageThreads.push_back(new ImageThread(this, ImageThread::HANDLE_ALL_REQUESTS, "Image Thread 6")); 
    274  
     278#endif 
    275279    // 1 second 
    276280    _preLoadTime = 1.0; 
     
    315319} 
    316320 
    317 void ImagePager::requestImageFile(const std::string& fileName,osg::Object* attachmentPoint, int attachmentIndex, double timeToMergeBy, const osg::FrameStamp*) 
    318 { 
    319     OSG_INFO<<"ImagePager::requestNodeFile("<<fileName<<")"<<std::endl; 
     321void ImagePager::requestImageFile(const std::string& fileName, osg::Object* attachmentPoint, int attachmentIndex, double timeToMergeBy, const osg::FrameStamp* framestamp, osg::ref_ptr<osg::Referenced>& imageRequest, const osg::Referenced* options) 
     322{ 
     323 
     324    osgDB::Options* readOptions = dynamic_cast<osgDB::Options*>(const_cast<osg::Referenced*>(options)); 
     325    if (!readOptions) 
     326    { 
     327       readOptions = Registry::instance()->getOptions(); 
     328    } 
     329 
     330    bool alreadyAssigned = dynamic_cast<ImageRequest*>(imageRequest.get()) && (imageRequest->referenceCount()>1); 
     331    if (alreadyAssigned) 
     332    { 
     333        // OSG_NOTICE<<"ImagePager::requestImageFile("<<fileName<<") alreadyAssigned"<<std::endl; 
     334        return; 
     335    } 
    320336 
    321337    osg::ref_ptr<ImageRequest> request = new ImageRequest; 
     
    325341    request->_attachmentIndex = attachmentIndex; 
    326342    request->_requestQueue = _readQueue.get(); 
     343    request->_readOptions = readOptions; 
     344 
     345    imageRequest = request; 
     346 
     347    // OSG_NOTICE<<"ImagePager::requestImageFile("<<fileName<<") new request."<<std::endl; 
    327348 
    328349    _readQueue->add(request.get()); 
  • OpenSceneGraph/trunk/src/osgDB/Registry.cpp

    r13156 r13191  
    13001300        useObjectCache=options ? (options->getObjectCacheHint()&cacheHint)!=0: false; 
    13011301    } 
     1302 
    13021303    if (useObjectCache) 
    13031304    { 
     
    13081309            if (oitr!=_objectCache.end()) 
    13091310            { 
    1310                 OSG_NOTIFY(INFO)<<"returning cached instanced of "<<file<<std::endl; 
     1311                OSG_INFO<<"returning cached instanced of "<<file<<std::endl; 
    13111312                if (readFunctor.isValid(oitr->second.first.get())) return ReaderWriter::ReadResult(oitr->second.first.get(), ReaderWriter::ReadResult::FILE_LOADED_FROM_CACHE); 
    13121313                else return ReaderWriter::ReadResult("Error file does not contain an osg::Object"); 
     
    13181319        { 
    13191320            // update cache with new entry. 
    1320             OSG_NOTIFY(INFO)<<"Adding to object cache "<<file<<std::endl; 
     1321            OSG_INFO<<"Adding to object cache "<<file<<std::endl; 
    13211322            addEntryToObjectCache(file,rr.getObject()); 
    13221323        } 
    13231324        else 
    13241325        { 
    1325             OSG_NOTIFY(INFO)<<"No valid object found for "<<file<<std::endl; 
     1326            OSG_INFO<<"No valid object found for "<<file<<std::endl; 
    13261327        } 
    13271328 
  • OpenSceneGraph/trunk/src/osgPlugins/ive/ImageSequence.cpp

    r13041 r13191  
    3838    out->writeDouble(getLength()); 
    3939 
    40     out->writeUInt(getFileNames().size()); 
    41     for(FileNames::iterator itr = getFileNames().begin(); 
    42         itr != getFileNames().end(); 
     40    out->writeUInt(getImageDataList().size()); 
     41    for(ImageDataList::iterator itr = getImageDataList().begin(); 
     42        itr != getImageDataList().end(); 
    4343        ++itr) 
    4444    { 
    45         out->writeString(*itr); 
     45        out->writeString(itr->_filename); 
    4646    } 
    4747 
    48     if (getFileNames().empty()) 
     48    if (getImageDataList().empty()) 
    4949    { 
    50         out->writeUInt(getImages().size()); 
    51         for(Images::iterator itr = getImages().begin(); 
    52             itr != getImages().end(); 
    53             ++itr) 
    54         { 
    55             out->writeImage(itr->get()); 
    56         } 
     50        out->writeUInt(0); 
    5751    } 
    5852 
  • OpenSceneGraph/trunk/src/osgPresentation/SlideShowConstructor.cpp

    r13179 r13191  
    10001000        } 
    10011001 
     1002#if 0 
     1003        if (imageSequence->getMode()==osg::ImageSequence::PAGE_AND_DISCARD_USED_IMAGES) 
     1004        { 
     1005 
     1006            if (_options.valid()) 
     1007            { 
     1008                OSG_NOTICE<<"Object cache usage _options "<<options->getObjectCacheHint()<<std::endl; 
     1009            } 
     1010            else 
     1011            { 
     1012                OSG_NOTICE<<"No Object _options assigned"<<std::endl; 
     1013            } 
     1014 
     1015             
     1016            osg::ref_ptr<osgDB::Options> options = _options.valid() ? _options->cloneOptions() : (new osgDB::Options); 
     1017            if (!imageData.options.empty()) 
     1018            { 
     1019                options->setOptionString(imageData.options); 
     1020            } 
     1021            OSG_NOTICE<<"Disabling object cache usage"<<std::endl; 
     1022            options->setObjectCacheHint(osgDB::Options::CACHE_NONE); 
     1023            imageSequence->setReadOptions(options); 
     1024        } 
     1025#endif 
    10021026        if (imageData.duration>0.0) 
    10031027        { 
     
    10061030        else 
    10071031        { 
    1008             unsigned int maxNum = osg::maximum(imageSequence->getFileNames().size(), 
    1009                                                imageSequence->getImages().size()); 
    1010  
     1032            unsigned int maxNum = imageSequence->getNumImageData(); 
    10111033            imageSequence->setLength(double(maxNum)*(1.0/imageData.fps)); 
    10121034        } 
  • OpenSceneGraph/trunk/src/osgWrappers/deprecated-dotosg/osg/ImageSequence.cpp

    r13041 r13191  
    108108    fw.indent()<<"Length "<<is.getLength()<<std::endl; 
    109109 
    110     if (!is.getFileNames().empty()) 
     110    if (is.getNumImageData()>0) 
    111111    { 
    112112        fw.indent()<<"FileNames {"<<std::endl; 
    113113        fw.moveIn(); 
    114114 
    115         const osg::ImageSequence::FileNames& names = is.getFileNames(); 
    116         for(osg::ImageSequence::FileNames::const_iterator itr = names.begin(); 
    117             itr != names.end(); 
     115        const osg::ImageSequence::ImageDataList& id = is.getImageDataList(); 
     116        for(osg::ImageSequence::ImageDataList::const_iterator itr = id.begin(); 
     117            itr != id.end(); 
    118118            ++itr) 
    119119        { 
    120             fw.indent()<<fw.wrapString(*itr)<<std::endl; 
    121         } 
    122  
    123         fw.moveOut(); 
    124         fw.indent()<<"}"<<std::endl; 
    125     } 
    126     else 
    127     { 
    128         fw.indent()<<"Images {"<<std::endl; 
    129         fw.moveIn(); 
    130  
    131         const osg::ImageSequence::Images& images = is.getImages(); 
    132         for(osg::ImageSequence::Images::const_iterator itr = images.begin(); 
    133             itr != images.end(); 
    134             ++itr) 
    135         { 
    136             if (!(*itr)->getFileName().empty()) fw.indent()<<fw.wrapString((*itr)->getFileName())<<std::endl; 
     120            fw.indent()<<fw.wrapString(itr->_filename)<<std::endl; 
    137121        } 
    138122 
  • OpenSceneGraph/trunk/src/osgWrappers/serializers/osg/ImageSequence.cpp

    r13058 r13191  
    77static bool checkFileNames( const osg::ImageSequence& image ) 
    88{ 
    9     return image.getNumImageFiles()>0; 
     9    return image.getNumImageData()>0; 
    1010} 
    1111 
     
    2424static bool writeFileNames( osgDB::OutputStream& os, const osg::ImageSequence& image ) 
    2525{ 
    26     const osg::ImageSequence::FileNames& files = image.getFileNames(); 
    27     os.writeSize(files.size()); os << os.BEGIN_BRACKET << std::endl; 
    28     for ( osg::ImageSequence::FileNames::const_iterator itr=files.begin(); 
    29           itr!=files.end(); ++itr ) 
     26    const osg::ImageSequence::ImageDataList& imageDataList = image.getImageDataList(); 
     27    os.writeSize(imageDataList.size()); os << os.BEGIN_BRACKET << std::endl; 
     28    for ( osg::ImageSequence::ImageDataList::const_iterator itr=imageDataList.begin(); 
     29          itr!=imageDataList.end(); 
     30          ++itr ) 
    3031    { 
    31         os.writeWrappedString( *itr ); 
     32        os.writeWrappedString( itr->_filename ); 
    3233        os << std::endl; 
    3334    } 
     
    3940static bool checkImages( const osg::ImageSequence& image ) 
    4041{ 
    41     return image.getNumImages()>0; 
     42    return false; 
    4243} 
    4344 
     
    5455} 
    5556 
    56 static bool writeImages( osgDB::OutputStream& os, const osg::ImageSequence& image ) 
     57static bool writeImages( osgDB::OutputStream& os, const osg::ImageSequence& image) 
    5758{ 
    58     const osg::ImageSequence::Images& images = image.getImages(); 
    59     os.writeSize(images.size()); os << os.BEGIN_BRACKET << std::endl; 
    60     for ( osg::ImageSequence::Images::const_iterator itr=images.begin(); 
    61           itr!=images.end(); ++itr ) 
     59    const osg::ImageSequence::ImageDataList& imageDataList = image.getImageDataList(); 
     60    os.writeSize(imageDataList.size()); os << os.BEGIN_BRACKET << std::endl; 
     61    for ( osg::ImageSequence::ImageDataList::const_iterator itr=imageDataList.begin(); 
     62          itr!=imageDataList.end(); 
     63          ++itr ) 
    6264    { 
    63         os.writeObject( (*itr).get() ); 
     65        os.writeObject( (*itr)._image.get() ); 
    6466    } 
    6567    os << os.END_BRACKET << std::endl;