- // FIXME: assumes tempo never changes after origin
- const Tempo& tempo = _session.tempo_map().tempo_at(_origin);
- const double frames_per_beat = tempo.frames_per_beat(
- _session.engine().frame_rate(),
- _session.tempo_map().meter_at(_origin));
-
- return lrint(beats * frames_per_beat);
+ if (beats < 0) {
+ std::cerr << "negative beats passed to BFC: " << beats << std::endl;
+ PBD::stacktrace (std::cerr, 30);
+ }
+ assert (beats >= 0);
+ framecnt_t r = _tempo_map.framepos_plus_beats (_origin_b, beats) - _origin_b;
+ return r;