Show
Ignore:
Timestamp:
04/24/14 12:49:57 (3 hours ago)
Author:
robert
Message:

From Mattias Helsing, "Seems I was only half right given what you asked for. CMP0017 only
says that modules that are found and ran from cmake modules dir should
prefer cmake-provided modules. find_package() and include() still look
in CMAKE_MODULE_PATH first.

After some investigating I've come up with a proposal examplified in
the attached FindGDAL.cmake script. It simply calls the cmake provided
FindGDAL.cmake if it exists and returns if it succeeds in finding GDAL
using that, otherwise continue with our local cmake code.
Pro: Wont clutter our root CMakeLists.txt
Con: If we begin to write more advanced Findxxx modules (using
COMPONENTS, REQUIRED etc.) we may have to revise this scheme.
"

Files:
1 modified

Legend:

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

    r13085 r13143  
    3030#include <osgDB/ReadFile> 
    3131#include <osgDB/WriteFile> 
     32#include <osgDB/FileNameUtils> 
     33#include <osgDB/FileUtils> 
     34 
    3235 
    3336#include <osgViewer/Viewer> 
     
    3740 
    3841 
     42static osgDB::DirectoryContents getSuitableFiles(osg::ArgumentParser& arguments) 
     43{ 
     44    osgDB::DirectoryContents files; 
     45    for(int i=1; i<arguments.argc(); ++i) 
     46    { 
     47        if (osgDB::fileType(arguments[i]) == osgDB::DIRECTORY) 
     48        { 
     49            const std::string& directory = arguments[i]; 
     50            osgDB::DirectoryContents dc = osgDB::getSortedDirectoryContents(directory); 
     51             
     52            for(osgDB::DirectoryContents::iterator itr = dc.begin(); itr != dc.end(); ++itr) 
     53            { 
     54                std::string full_file_name = directory + "/" + (*itr); 
     55                std::string ext = osgDB::getLowerCaseFileExtension(full_file_name); 
     56                if ((ext == "jpg") || (ext == "png") || (ext == "gif") ||  (ext == "rgb") || (ext == "dds") ) 
     57                { 
     58                    files.push_back(full_file_name); 
     59                } 
     60            } 
     61        } 
     62        else { 
     63            files.push_back(arguments[i]); 
     64        } 
     65    } 
     66    return files; 
     67} 
    3968 
    4069 
     
    73102    while (arguments.read("--fps",fps)) {} 
    74103 
    75     if (arguments.argc()>1) 
    76     { 
    77         for(int i=1; i<arguments.argc(); ++i) 
    78         { 
     104    osgDB::DirectoryContents files = getSuitableFiles(arguments); 
     105    if (!files.empty()) 
     106    { 
     107        for(osgDB::DirectoryContents::iterator itr = files.begin(); 
     108            itr != files.end(); 
     109            ++itr) 
     110        { 
     111            const std::string& filename = *itr; 
    79112            if (preLoad) 
    80113            { 
    81                 osg::ref_ptr<osg::Image> image = osgDB::readImageFile(arguments[i]); 
     114                osg::ref_ptr<osg::Image> image = osgDB::readImageFile(filename); 
    82115                if (image.valid()) 
    83116                { 
     
    87120            else 
    88121            { 
    89                 imageSequence->addImageFile(arguments[i]); 
    90             } 
    91         } 
    92  
     122                imageSequence->addImageFile(filename); 
     123            } 
     124 
     125        } 
    93126         
    94127        if (length>0.0) 
     
    181214 
    182215    typedef std::vector< osg::observer_ptr<osg::ImageStream> > ImageStreamList; 
     216     
     217    struct ImageStreamPlaybackSpeedData { 
     218        double fps; 
     219        unsigned char* lastData; 
     220        double timeStamp, lastOutput; 
     221         
     222        ImageStreamPlaybackSpeedData() : fps(0), lastData(NULL), timeStamp(0), lastOutput(0) {} 
     223         
     224    }; 
     225     
     226    typedef std::vector< ImageStreamPlaybackSpeedData > ImageStreamPlayBackSpeedList; 
    183227 
    184228protected: 
     
    245289    bool            _trackMouse; 
    246290    ImageStreamList _imageStreamList; 
     291    ImageStreamPlayBackSpeedList _imageStreamPlayBackSpeedList; 
    247292     
    248293}; 
     
    258303        node->accept(fisv); 
    259304    } 
     305    _imageStreamPlayBackSpeedList.resize(_imageStreamList.size()); 
    260306} 
    261307 
     
    265311    switch(ea.getEventType()) 
    266312    { 
     313        case(osgGA::GUIEventAdapter::FRAME): 
     314            { 
     315                double t = ea.getTime(); 
     316                bool printed(false); 
     317                 
     318                ImageStreamPlayBackSpeedList::iterator fps_itr = _imageStreamPlayBackSpeedList.begin(); 
     319                for(ImageStreamList::iterator itr=_imageStreamList.begin(); 
     320                    itr!=_imageStreamList.end(); 
     321                    ++itr, ++fps_itr) 
     322                { 
     323                    if (((*itr)->getStatus()==osg::ImageStream::PLAYING) && ((*itr)->data() != (*fps_itr).lastData)) 
     324                    { 
     325                        ImageStreamPlaybackSpeedData& data(*fps_itr); 
     326                        double dt = (data.timeStamp > 0) ? t - data.timeStamp : 1/60.0; 
     327                        data.lastData = (*itr)->data(); 
     328                        data.fps = (*fps_itr).fps * 0.8 + 0.2 * (1/dt); 
     329                        data.timeStamp = t; 
     330                         
     331                        if (t-data.lastOutput > 1) 
     332                        { 
     333                            std::cout << data.fps << " "; 
     334                            data.lastOutput = t; 
     335                            printed = true; 
     336                        } 
     337                         
     338                    } 
     339                } 
     340                if (printed)  
     341                    std::cout << std::endl; 
     342            } 
     343            break; 
     344        case(osgGA::GUIEventAdapter::MOVE): 
     345            { 
     346                if (_trackMouse) 
     347                { 
     348                    for(ImageStreamList::iterator itr=_imageStreamList.begin(); 
     349                        itr!=_imageStreamList.end(); 
     350                        ++itr) 
     351                    { 
     352                        double dt = (*itr)->getLength() * ((1.0+ea.getXnormalized()) / 2.0); 
     353                        (*itr)->seek(dt); 
     354                        std::cout << "seeking to " << dt << " length: " <<(*itr)->getLength() << std::endl; 
     355                    } 
     356                } 
     357                return false; 
     358            } 
     359             
    267360        case(osgGA::GUIEventAdapter::KEYDOWN): 
    268361        { 
     
    318411                return true; 
    319412            } 
     413            else if (ea.getKey() == 'i')  
     414            { 
     415                _trackMouse = !_trackMouse; 
     416                std::cout << "tracking mouse: " << (_trackMouse ? "ON" : "OFF") << std::endl; 
     417                 
     418                for(ImageStreamList::iterator itr=_imageStreamList.begin(); 
     419                    itr!=_imageStreamList.end(); 
     420                    ++itr) 
     421                { 
     422                    if ((*itr)->getStatus()==osg::ImageStream::PLAYING) 
     423                    { 
     424                        (*itr)->pause(); 
     425                    } 
     426                    else 
     427                    { 
     428                        (*itr)->play(); 
     429                    } 
     430                } 
     431                 
     432                 
     433            } 
    320434            return false; 
    321435        } 
     
    324438            return false; 
    325439    } 
     440 
     441    return false; 
    326442} 
    327443 
    328444void MovieEventHandler::getUsage(osg::ApplicationUsage& usage) const 
    329445{ 
     446    usage.addKeyboardMouseBinding("i","toggle interactive mode, scrub via mouse-move"); 
    330447    usage.addKeyboardMouseBinding("p","Play/Pause movie"); 
    331448    usage.addKeyboardMouseBinding("r","Restart movie");