- // FIXME: assumes tempo never changes after origin
- const Tempo& tempo = _tempo_map.tempo_at (_origin_b);
- const double frames_per_beat = tempo.frames_per_beat(
- _tempo_map.frame_rate(),
- _tempo_map.meter_at (_origin_b));
-
- return llrint (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;