コード例 #1
0
ファイル: config.cpp プロジェクト: steiner-/Equalizer
bool Config::init()
{
    if( !_animation.isValid( ))
        _animation.loadAnimation( _initData.getPathFilename( ));

    // init distributed objects
    if( !_initData.useColor( ))
        _frameData.setColorMode( COLOR_WHITE );

    _frameData.setRenderMode( _initData.getRenderMode( ));
    registerObject( &_frameData );
    _frameData.setAutoObsolete( getLatency( ));

    _initData.setFrameDataID( _frameData.getID( ));
    registerObject( &_initData );

    // init config
    if( !eq::Config::init( _initData.getID( )))
    {
        _deregisterData();
        return false;
    }

    _loadModels();
    _registerModels();

    const eq::Canvases& canvases = getCanvases();
    if( canvases.empty( ))
        _currentCanvas = 0;
    else
        _currentCanvas = canvases.front();

    _setMessage( "Welcome to eqPly\nPress F1 for help" );
    return true;
}
コード例 #2
0
ファイル: config.cpp プロジェクト: Eyescale/Equalizer
bool Config::init()
{
    // init distributed objects
    LBCHECK(registerObject(&_frameData));

    _frameData.setOrtho(_initData.getOrtho());
    _initData.setFrameDataID(_frameData.getID());

    _frameData.setAutoObsolete(getLatency());

    LBCHECK(registerObject(&_initData));

    // init config
    if (!eq::Config::init(_initData.getID()))
    {
        _deregisterData();
        return false;
    }

    const eq::Canvases& canvases = getCanvases();
    if (canvases.empty())
        _currentCanvas = 0;
    else
        _currentCanvas = canvases.front();

    _setMessage("Welcome to eVolve\nPress F1 for help");

    return true;
}
コード例 #3
0
ファイル: config.cpp プロジェクト: yarda/Equalizer
void Config::deregisterObject( co::Object* object )
{
    EQASSERT( object )
    EQASSERT( object->isMaster( ));

    if( !object->isAttached( )) // not registered
        return;

    const uint32_t latency = getLatency();
    ClientPtr client = getClient();
    if( latency == 0 || !_running || !object->isBuffered( )) // OPT
    {
        client->deregisterObject( object );
        return;
    }

    // Keep a distributed object latency frames.
    // Replaces the object with a dummy proxy object using the
    // existing master change manager.
    ConfigSwapObjectPacket packet;
    packet.requestID = getLocalNode()->registerRequest();
    packet.object = object;

    send( client, packet );
    client->waitRequest( packet.requestID );
}
コード例 #4
0
ファイル: config.cpp プロジェクト: yarda/Equalizer
bool Config::registerObject( co::Object* object )
{
    if( !getClient()->registerObject( object ))
        return false;
    object->setAutoObsolete( getLatency() + 1 );
    return true;
}
コード例 #5
0
ファイル: config.cpp プロジェクト: yarda/Equalizer
void Config::setLatency( const uint32_t latency )
{
    if( getLatency() == latency )
        return;

    Super::setLatency( latency );
    changeLatency( latency );
}
コード例 #6
0
ファイル: config.cpp プロジェクト: yarda/Equalizer
void Config::_frameStart()
{
    _frameTimes.push_back( _clock.getTime64( ));
    while( _frameTimes.size() > getLatency() )
    {
        const int64_t age = _frameTimes.back() - _frameTimes.front();
        getClient()->expireInstanceData( age );
        _frameTimes.pop_front();
    }
}
コード例 #7
0
ファイル: config.cpp プロジェクト: niujunpenghn/Equalizer
bool Config::init()
{
    if( !_animation.isValid( ))
        _animation.loadAnimation( _initData.getPathFilename( ));

    // init distributed objects
    if( !_initData.useColor( ))
        _frameData.setColorMode( COLOR_WHITE );

    _frameData.setRenderMode( _initData.getRenderMode( ));
    registerObject( &_frameData );
    _frameData.setAutoObsolete( getLatency( ));

    _initData.setFrameDataID( _frameData.getID( ));
    registerObject( &_initData );

    // init config
    if( !eq::Config::init( _initData.getID( )))
    {
        _deregisterData();
        return false;
    }

    _loadModels();
    _registerModels();

    // init tracker
    if( !_initData.getTrackerPort().empty( ))
    {
        if( !_tracker.init( _initData.getTrackerPort() ))
            LBWARN << "Failed to initialize tracker" << std::endl;
        else
        {
            // Set up position of tracking system wrt world space
            // Note: this depends on the physical installation.
            eq::Matrix4f m( eq::Matrix4f::IDENTITY );
            m.scale( 1.f, 1.f, -1.f );
            _tracker.setWorldToEmitter( m );

            m = eq::Matrix4f::IDENTITY;
            m.rotate_z( -M_PI_2 );
            _tracker.setSensorToObject( m );
            LBINFO << "Tracker initialized" << std::endl;
        }
    }

    const eq::Canvases& canvases = getCanvases();
    if( canvases.empty( ))
        _currentCanvas = 0;
    else
        _currentCanvas = canvases.front();

    _setMessage( "Welcome to eqPly\nPress F1 for help" );
    return true;
}
コード例 #8
0
ファイル: config.cpp プロジェクト: hernando/Equalizer
void Config::changeLatency( const uint32_t latency )
{
    if( getLatency() == latency )
        return;

    setLatency( latency );

    // update latency on all frames and barriers
    ChangeLatencyVisitor visitor( latency );
    accept( visitor );
}
コード例 #9
0
ファイル: config.cpp プロジェクト: yarda/Equalizer
uint32_t Config::finishFrame()
{
    ClientPtr client = getClient();
    const uint32_t latency = getLatency();
    const uint32_t frameToFinish = (_currentFrame >= latency) ? 
                                       _currentFrame - latency : 0;

    ConfigStatistics stat( Statistic::CONFIG_FINISH_FRAME, this );
    stat.event.data.statistic.frameNumber = frameToFinish;
    {
        ConfigStatistics waitStat( Statistic::CONFIG_WAIT_FINISH_FRAME, this );
        waitStat.event.data.statistic.frameNumber = frameToFinish;
        
        // local draw sync
        if( _needsLocalSync( ))
            while( _unlockedFrame < _currentFrame )
                client->processCommand();

        // local node finish (frame-latency) sync
        const Nodes& nodes = getNodes();
        if( !nodes.empty( ))
        {
            EQASSERT( nodes.size() == 1 );
            const Node* node = nodes.front();

            while( node->getFinishedFrame() < frameToFinish )
                client->processCommand();
        }

        // global sync
        const uint32_t timeout = getTimeout();
        co::base::Clock time;
        const int64_t pingTimeout = co::Global::getKeepaliveTimeout();

        while( !_finishedFrame.timedWaitGE( frameToFinish, pingTimeout ))
        {
            if( time.getTime64() >= timeout || !getLocalNode()->pingIdleNodes())
            {
                EQWARN << "Timeout waiting for nodes to finish frame " 
                       << frameToFinish << std::endl;
                break;
            }
        }
    }

    handleEvents();
    _updateStatistics( frameToFinish );
    _releaseObjects();

    EQLOG( co::base::LOG_ANY ) << "---- Finished Frame --- " << frameToFinish
                               << " (" << _currentFrame << ')' << std::endl;
    return frameToFinish;
}
コード例 #10
0
ファイル: config.cpp プロジェクト: hernando/Equalizer
void Config::_verifyFrameFinished( const uint32_t frameNumber )
{
    const Nodes& nodes = getNodes();
    for( Nodes::const_iterator i = nodes.begin(); i != nodes.end(); ++i )
    {
        Node* node = *i;
        if( node->isRunning() &&
            node->getFinishedFrame() + getLatency() < frameNumber )
        {
            NodeFailedVisitor nodeFailedVisitor;
            node->accept( nodeFailedVisitor );
        }
    }
}
コード例 #11
0
ファイル: Config.cpp プロジェクト: piotrekjanisz/ppr
bool Config::init()
{
    _frameData.setCameraTransformation(_cameraFrame.getTransform());
    registerObject(&_frameData);
    _frameData.setAutoObsolete(getLatency());

    _initData.setFrameDataId(_frameData.getID());
    registerObject(&_initData);

    if (!eq::Config::init(_initData.getID())) {
        return false;
    }
    return true;
}
コード例 #12
0
status_t AudioSystem::getOutputLatency(uint32_t* latency, audio_stream_type_t streamType)
{
    audio_io_handle_t output;

    if (streamType == AUDIO_STREAM_DEFAULT) {
        streamType = AUDIO_STREAM_MUSIC;
    }

    output = getOutput(streamType);
    if (output == 0) {
        return PERMISSION_DENIED;
    }

    return getLatency(output, streamType, latency);
}
コード例 #13
0
ファイル: config.cpp プロジェクト: yarda/Equalizer
bool Config::_cmdSwapObject( co::Command& command )
{
    const ConfigSwapObjectPacket* packet = 
        command.get<ConfigSwapObjectPacket>();
    EQVERB << "Cmd swap object " << packet << std::endl;

    co::Object* object = packet->object;
    LatencyObject* latencyObject = new LatencyObject( object->getChangeType(),
                                                     object->chooseCompressor(),
                                             _currentFrame + getLatency() + 1 );
    getLocalNode()->swapObject( object, latencyObject  );
    {
        co::base::ScopedFastWrite mutex( _latencyObjects );
        _latencyObjects->push_back( latencyObject );
    }
    EQASSERT( packet->requestID != EQ_UNDEFINED_UINT32 );
    getLocalNode()->serveRequest( packet->requestID );
    return true;
}
コード例 #14
0
 int getInputLatencyInSamples() override     { return getLatency (kAudioSessionProperty_CurrentHardwareInputLatency); }