Changeset 884

Show
Ignore:
Timestamp:
03/11/09 00:12:25 (4 years ago)
Author:
gabriel@…
Message:

Add a new_position member to TransportPosition?.

This may be premature optimization... but sequencer input objects may want to
keep a "cursor" for keeping track of how far they've progressed in the sequence
(i.e. for lookahead logic). Instead of making each of them detect relocations,
it made more sense to have it managed by the transport.

Location:
branches/transport_redesign/libs/hydrogen
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • branches/transport_redesign/libs/hydrogen/include/hydrogen/TransportPosition.h

    r883 r884  
    3636    { 
    3737        enum { STOPPED, ROLLING } state; /// The current transport state. 
     38        bool new_position;        /// True if this position is not a continuation 
     39                                  /// of the last one (i.e. we've relocated) 
    3840        uint32_t frame;           /// The current frame of the transport.  When 
    3941                                  /// sequencing, this is just FYI.  All 
  • branches/transport_redesign/libs/hydrogen/src/transport/JackTransportMaster.cpp

    r866 r884  
    3838public: 
    3939    jack_client_t* client; 
     40    uint32_t next_frame; 
    4041}; 
    4142 
     
    4344{ 
    4445    d = new JackTransportMasterPrivate; 
     46    d.client = 0; 
     47    d.next_frame = (uint32_t)-1; 
    4548} 
    4649 
     
    8588        hpos->state = TransportPosition::STOPPED; 
    8689    } 
     90    hpos->new_position = ( jpos.frame != d->next_frame ) 
    8791    hpos->frame = jpos.frame; 
    8892    hpos->frame_rate = jpos.frame_rate; 
     
    99103} 
    100104 
    101 void JackTransportMaster::processed_frames(uint32_t /*nFrames*/) 
     105void JackTransportMaster::processed_frames(uint32_t nFrames) 
    102106{ 
    103     // Handled by JACK server. 
     107    jack_transport_state_t state; 
     108    jack_position_t jpos; 
     109 
     110    state = jack_transport_query(d->client, &jpos); 
     111    if( state == TransportPosition::ROLLING ) { 
     112        d->next_frame = jpos.frame + nFrames; 
     113    } else { 
     114        d->next_frame = jpos.frame; 
     115    } 
    104116} 
    105117 
  • branches/transport_redesign/libs/hydrogen/src/transport/SimpleTransportMaster.cpp

    r866 r884  
    7676    d->pos.tick = (abs_tick - d->pos.bar_start_tick) % d->pos.ticks_per_beat; 
    7777    d->pos.frame = frame; 
     78    d->pos.new_position = true; 
    7879    return 0; 
    7980} 
     
    115116        / d->pos.beats_per_minute; 
    116117 
     118    d->pos.new_position = true; 
    117119 
    118120    return 0; 
     
    156158 
    157159    d->pos.frame += nFrames; 
     160    d->pos.new_position = false; 
    158161 
    159162    d->pos.bbt_offset += nFrames;