Clarify "frames" (video, timecode) vs "samples" (audio)
authorRobin Gareus <robin@gareus.org>
Thu, 8 Dec 2016 11:26:41 +0000 (12:26 +0100)
committerRobin Gareus <robin@gareus.org>
Thu, 8 Dec 2016 11:45:44 +0000 (12:45 +0100)
12 files changed:
gtk2_ardour/editor.cc
gtk2_ardour/editor_rulers.cc
gtk2_ardour/option_editor.cc
libs/ardour/ardour/session.h
libs/ardour/ltc_slave.cc
libs/ardour/luabindings.cc
libs/ardour/mtc_slave.cc
libs/ardour/session.cc
libs/ardour/session_ltc.cc
libs/ardour/session_midi.cc
libs/ardour/session_time.cc
libs/timecode/src/time.cc

index ea71b5ba0d457986960aa055ad57d6cec5ab0da3..c7ad5b49c540748bdc9673abcd042df3fee12c5b 100644 (file)
@@ -2731,18 +2731,18 @@ Editor::snap_to (framepos_t& start, RoundMode direction, bool for_mark, bool ens
 void
 Editor::timecode_snap_to_internal (framepos_t& start, RoundMode direction, bool /*for_mark*/)
 {
-       const framepos_t one_timecode_second = (framepos_t)(rint(_session->timecode_frames_per_second()) * _session->frames_per_timecode_frame());
-       framepos_t one_timecode_minute = (framepos_t)(rint(_session->timecode_frames_per_second()) * _session->frames_per_timecode_frame() * 60);
+       const framepos_t one_timecode_second = (framepos_t)(rint(_session->timecode_frames_per_second()) * _session->samples_per_timecode_frame());
+       framepos_t one_timecode_minute = (framepos_t)(rint(_session->timecode_frames_per_second()) * _session->samples_per_timecode_frame() * 60);
 
        switch (_snap_type) {
        case SnapToTimecodeFrame:
                if ((direction == RoundUpMaybe || direction == RoundDownMaybe) &&
-                   fmod((double)start, (double)_session->frames_per_timecode_frame()) == 0) {
+                   fmod((double)start, (double)_session->samples_per_timecode_frame()) == 0) {
                        /* start is already on a whole timecode frame, do nothing */
-               } else if (((direction == 0) && (fmod((double)start, (double)_session->frames_per_timecode_frame()) > (_session->frames_per_timecode_frame() / 2))) || (direction > 0)) {
-                       start = (framepos_t) (ceil ((double) start / _session->frames_per_timecode_frame()) * _session->frames_per_timecode_frame());
+               } else if (((direction == 0) && (fmod((double)start, (double)_session->samples_per_timecode_frame()) > (_session->samples_per_timecode_frame() / 2))) || (direction > 0)) {
+                       start = (framepos_t) (ceil ((double) start / _session->samples_per_timecode_frame()) * _session->samples_per_timecode_frame());
                } else {
-                       start = (framepos_t) (floor ((double) start / _session->frames_per_timecode_frame()) *  _session->frames_per_timecode_frame());
+                       start = (framepos_t) (floor ((double) start / _session->samples_per_timecode_frame()) *  _session->samples_per_timecode_frame());
                }
                break;
 
index 4424546296e90b06ce8d23f6670bf7dfa22d5c57..bdffd6fd39d7ff6e029861fd015db11a72389533 100644 (file)
@@ -747,26 +747,26 @@ Editor::set_timecode_ruler_scale (framepos_t lower, framepos_t upper)
        upper = upper + spacer;
        framecnt_t const range = upper - lower;
 
-       if (range < (2 * _session->frames_per_timecode_frame())) { /* 0 - 2 frames */
+       if (range < (2 * _session->samples_per_timecode_frame())) { /* 0 - 2 frames */
                timecode_ruler_scale = timecode_show_bits;
                timecode_mark_modulo = 20;
                timecode_nmarks = 2 + (2 * _session->config.get_subframes_per_frame());
        } else if (range <= (fr / 4)) { /* 2 frames - 0.250 second */
                timecode_ruler_scale = timecode_show_frames;
                timecode_mark_modulo = 1;
-               timecode_nmarks = 2 + (range / (framepos_t)_session->frames_per_timecode_frame());
+               timecode_nmarks = 2 + (range / (framepos_t)_session->samples_per_timecode_frame());
        } else if (range <= (fr / 2)) { /* 0.25-0.5 second */
                timecode_ruler_scale = timecode_show_frames;
                timecode_mark_modulo = 2;
-               timecode_nmarks = 2 + (range / (framepos_t)_session->frames_per_timecode_frame());
+               timecode_nmarks = 2 + (range / (framepos_t)_session->samples_per_timecode_frame());
        } else if (range <= fr) { /* 0.5-1 second */
                timecode_ruler_scale = timecode_show_frames;
                timecode_mark_modulo = 5;
-               timecode_nmarks = 2 + (range / (framepos_t)_session->frames_per_timecode_frame());
+               timecode_nmarks = 2 + (range / (framepos_t)_session->samples_per_timecode_frame());
        } else if (range <= 2 * fr) { /* 1-2 seconds */
                timecode_ruler_scale = timecode_show_frames;
                timecode_mark_modulo = 10;
-               timecode_nmarks = 2 + (range / (framepos_t)_session->frames_per_timecode_frame());
+               timecode_nmarks = 2 + (range / (framepos_t)_session->samples_per_timecode_frame());
        } else if (range <= 8 * fr) { /* 2-8 seconds */
                timecode_ruler_scale = timecode_show_seconds;
                timecode_mark_modulo = 1;
index 995f12ab48dcf2faed49b4f908f1b09c0bf1136d..64c867970ee55d54fec67a2ffaa3f174049bf6dc 100644 (file)
@@ -428,7 +428,7 @@ ClockOption::set_state_from_config ()
        if (!Timecode::parse_timecode_format(_get(), TC)) {
                _clock.set (0, true);
        }
-       TC.rate = _session->frames_per_timecode_frame();
+       TC.rate = _session->samples_per_timecode_frame();
        TC.drop = _session->timecode_drop_frames();
        _session->timecode_to_sample(TC, when, false, false);
        if (TC.negative) { when=-when; }
index 3135e26333b225f8974ca5f021b734f38cab7a47..367c5bd29dcb027d3a3aa9144a9f8b96fd485164 100644 (file)
@@ -450,7 +450,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
        framecnt_t nominal_frame_rate () const { return _nominal_frame_rate; }
        framecnt_t frames_per_hour () const { return _frames_per_hour; }
 
-       double frames_per_timecode_frame() const { return _frames_per_timecode_frame; }
+       double samples_per_timecode_frame() const { return _samples_per_timecode_frame; }
        framecnt_t timecode_frames_per_hour() const { return _timecode_frames_per_hour; }
 
        MIDI::byte get_mtc_timecode_bits() const {
@@ -1604,7 +1604,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
        Timecode::Time transmitting_timecode_time;
        int next_quarter_frame_to_send;
 
-       double _frames_per_timecode_frame; /* has to be floating point because of drop frame */
+       double _samples_per_timecode_frame; /* has to be floating point because of drop frame */
        framecnt_t _frames_per_hour;
        framecnt_t _timecode_frames_per_hour;
 
index 6167c6bda226b55bef0803e276d50ada6e7d0806..2501378017d9de198aefcc5032240207dc5c20f5 100644 (file)
@@ -45,7 +45,7 @@ using namespace Timecode;
 LTC_Slave::LTC_Slave (Session& s)
        : session (s)
 {
-       frames_per_ltc_frame = session.frames_per_timecode_frame();
+       frames_per_ltc_frame = session.samples_per_timecode_frame();
        timecode.rate = session.timecode_frames_per_second();
        timecode.drop  = session.timecode_drop_frames();
 
@@ -365,13 +365,13 @@ LTC_Slave::process_ltc(framepos_t const /*now*/)
                        ltc_frame_increment(&frame.ltc, fps_i, tv_standard, 0);
                        ltc_frame_to_time(&stime, &frame.ltc, 0);
                        transport_direction = 1;
-                       frame.off_start -= ltc_frame_alignment(session.frames_per_timecode_frame(), tv_standard);
-                       frame.off_end -= ltc_frame_alignment(session.frames_per_timecode_frame(), tv_standard);
+                       frame.off_start -= ltc_frame_alignment(session.samples_per_timecode_frame(), tv_standard);
+                       frame.off_end -= ltc_frame_alignment(session.samples_per_timecode_frame(), tv_standard);
                } else {
                        ltc_frame_decrement(&frame.ltc, fps_i, tv_standard, 0);
                        int off = frame.off_end - frame.off_start;
-                       frame.off_start += off - ltc_frame_alignment(session.frames_per_timecode_frame(), tv_standard);
-                       frame.off_end += off - ltc_frame_alignment(session.frames_per_timecode_frame(), tv_standard);
+                       frame.off_start += off - ltc_frame_alignment(session.samples_per_timecode_frame(), tv_standard);
+                       frame.off_end += off - ltc_frame_alignment(session.samples_per_timecode_frame(), tv_standard);
                        transport_direction = -1;
                }
 
index 46e1d675515f6df792c4c945171bb073a9f56774..8c97c4966122e53050ce379589efad8ccc23c23a 100644 (file)
@@ -1769,7 +1769,7 @@ LuaBindings::common (lua_State* L)
                .addFunction ("transport_speed", &Session::transport_speed)
                .addFunction ("frame_rate", &Session::frame_rate)
                .addFunction ("nominal_frame_rate", &Session::nominal_frame_rate)
-               .addFunction ("frames_per_timecode_frame", &Session::frames_per_timecode_frame)
+               .addFunction ("samples_per_timecode_frame", &Session::samples_per_timecode_frame)
                .addFunction ("timecode_frames_per_hour", &Session::timecode_frames_per_hour)
                .addFunction ("timecode_frames_per_second", &Session::timecode_frames_per_second)
                .addFunction ("timecode_drop_frames", &Session::timecode_drop_frames)
index 102694e7ac7d9a9ab637871f2e085eede99bc400..5eda7e14a52c6ebe13c5e1550c799d479abfcf2c 100644 (file)
@@ -65,7 +65,7 @@ MTC_Slave::MTC_Slave (Session& s, MidiPort& p)
        busy_guard1 = busy_guard2 = 0;
 
        last_mtc_fps_byte = session.get_mtc_timecode_bits ();
-       quarter_frame_duration = (double(session.frames_per_timecode_frame()) / 4.0);
+       quarter_frame_duration = (double(session.samples_per_timecode_frame()) / 4.0);
 
        mtc_timecode = session.config.get_timecode_format();
        a3e_timecode = session.config.get_timecode_format();
@@ -448,7 +448,7 @@ MTC_Slave::update_mtc_time (const MIDI::byte *msg, bool was_full, framepos_t now
                long int mtc_off = (long) rint(7.0 * qtr);
 
                DEBUG_TRACE (DEBUG::MTC, string_compose ("new mtc_frame: %1 | MTC-FpT: %2 A3-FpT:%3\n",
-                                                        mtc_frame, (4.0*qtr), session.frames_per_timecode_frame()));
+                                                        mtc_frame, (4.0*qtr), session.samples_per_timecode_frame()));
 
                switch (port->self_parser().mtc_running()) {
                case MTC_Backward:
index 08ed54c5c7658d88923199d42d4c2c667fd27893..4bf070dc213af406e9565206c82dba43e269cab6 100644 (file)
@@ -257,7 +257,7 @@ Session::Session (AudioEngine &eng,
        , step_speed (0)
        , outbound_mtc_timecode_frame (0)
        , next_quarter_frame_to_send (-1)
-       , _frames_per_timecode_frame (0)
+       , _samples_per_timecode_frame (0)
        , _frames_per_hour (0)
        , _timecode_frames_per_hour (0)
        , last_timecode_valid (false)
index 0ce7d766fc4a28cd85941d374ce3df502fc07fef..51a39d0677c2f6169320aa84454e3b681baa8aaf 100644 (file)
@@ -275,7 +275,7 @@ Session::ltc_tx_send_time_code_for_cycle (framepos_t start_frame, framepos_t end
        /* LTC TV standard offset */
        if (current_speed != 0) {
                /* ditto - send "NOW" if not rolling */
-               cycle_start_frame -= ltc_frame_alignment(frames_per_timecode_frame(), TV_STANDARD(cur_timecode));
+               cycle_start_frame -= ltc_frame_alignment(samples_per_timecode_frame(), TV_STANDARD(cur_timecode));
        }
 
        /* cycle-start may become negative due to latency compensation */
@@ -448,7 +448,7 @@ Session::ltc_tx_send_time_code_for_cycle (framepos_t start_frame, framepos_t end
 
 
        // (4) check if alignment matches
-       const double fptcf = frames_per_timecode_frame();
+       const double fptcf = samples_per_timecode_frame();
 
        /* maximum difference of bit alignment in audio-samples.
         *
index 3a321e4ff64858d2103494297501923fb0a5ecb6..b0fb9460110effc126220db4244fcc1a2210689f 100644 (file)
@@ -426,13 +426,13 @@ Session::send_full_time_code (framepos_t const t, MIDI::pframes_t nframes)
        // or a new full timecode will be queued next cycle.
        while (outbound_mtc_timecode_frame < t) {
                Timecode::increment (transmitting_timecode_time, config.get_subframes_per_frame());
-               outbound_mtc_timecode_frame += _frames_per_timecode_frame;
+               outbound_mtc_timecode_frame += _samples_per_timecode_frame;
        }
 
-       double const quarter_frame_duration = ((framecnt_t) _frames_per_timecode_frame) / 4.0;
+       double const quarter_frame_duration = ((framecnt_t) _samples_per_timecode_frame) / 4.0;
        if (ceil((t - mtc_tc) / quarter_frame_duration) > 0) {
                Timecode::increment (transmitting_timecode_time, config.get_subframes_per_frame());
-               outbound_mtc_timecode_frame += _frames_per_timecode_frame;
+               outbound_mtc_timecode_frame += _samples_per_timecode_frame;
        }
 
        DEBUG_TRACE (DEBUG::MTC, string_compose ("Full MTC TC %1 (off %2)\n", outbound_mtc_timecode_frame, mtc_offset));
@@ -443,7 +443,7 @@ Session::send_full_time_code (framepos_t const t, MIDI::pframes_t nframes)
        if (((mtc_timecode_bits >> 5) != MIDI::MTC_25_FPS) && (transmitting_timecode_time.frames % 2)) {
                // start MTC quarter frame transmission on an even frame
                Timecode::increment (transmitting_timecode_time, config.get_subframes_per_frame());
-               outbound_mtc_timecode_frame += _frames_per_timecode_frame;
+               outbound_mtc_timecode_frame += _samples_per_timecode_frame;
        }
 
        next_quarter_frame_to_send = 0;
@@ -507,7 +507,7 @@ Session::send_midi_time_code_for_cycle (framepos_t start_frame, framepos_t end_f
        assert (next_quarter_frame_to_send <= 7);
 
        /* Duration of one quarter frame */
-       double const quarter_frame_duration = _frames_per_timecode_frame / 4.0;
+       double const quarter_frame_duration = _samples_per_timecode_frame / 4.0;
 
        DEBUG_TRACE (DEBUG::MTC, string_compose ("TF %1 SF %2 MT %3 QF %4 QD %5\n",
                                _transport_frame, start_frame, outbound_mtc_timecode_frame,
@@ -592,7 +592,7 @@ Session::send_midi_time_code_for_cycle (framepos_t start_frame, framepos_t end_f
                        Timecode::increment (transmitting_timecode_time, config.get_subframes_per_frame());
                        Timecode::increment (transmitting_timecode_time, config.get_subframes_per_frame());
                        // Increment timing of first quarter frame
-                       outbound_mtc_timecode_frame += 2.0 * _frames_per_timecode_frame;
+                       outbound_mtc_timecode_frame += 2.0 * _samples_per_timecode_frame;
                }
        }
 
index 8f080285e2c26a09e893644bc2e5bbe8ce47c501..3b3be8f3b224e60a2dabc3d052b537e5ef5c896d 100644 (file)
@@ -67,11 +67,11 @@ void
 Session::sync_time_vars ()
 {
        _current_frame_rate = (framecnt_t) round (_nominal_frame_rate * (1.0 + (config.get_video_pullup()/100.0)));
-       _frames_per_timecode_frame = (double) _current_frame_rate / (double) timecode_frames_per_second();
+       _samples_per_timecode_frame = (double) _current_frame_rate / (double) timecode_frames_per_second();
        if (timecode_drop_frames()) {
-         _frames_per_hour = (int32_t)(107892 * _frames_per_timecode_frame);
+         _frames_per_hour = (int32_t)(107892 * _samples_per_timecode_frame);
        } else {
-         _frames_per_hour = (int32_t)(3600 * rint(timecode_frames_per_second()) * _frames_per_timecode_frame);
+         _frames_per_hour = (int32_t)(3600 * rint(timecode_frames_per_second()) * _samples_per_timecode_frame);
        }
        _timecode_frames_per_hour = rint(timecode_frames_per_second() * 3600.0);
 
index 494e6e114558d3e04083d54fac56f2bbdb53189c..b833878255d5c4ec2b178f1fe6b422947fb342a6 100644 (file)
@@ -653,7 +653,7 @@ timecode_to_sample(
                bool offset_is_negative, int64_t offset_samples
                )
 {
-       const double frames_per_timecode_frame = (double) sample_frame_rate / (double) timecode.rate;
+       const double samples_per_timecode_frame = (double) sample_frame_rate / (double) timecode.rate;
 
        if (timecode.drop) {
                // The drop frame format was created to better approximate the 30000/1001 = 29.97002997002997....
@@ -711,7 +711,7 @@ timecode_to_sample(
        } else {
                /*
                   Non drop is easy.. just note the use of
-                  rint(timecode.rate) * frames_per_timecode_frame
+                  rint(timecode.rate) * samples_per_timecode_frame
                   (frames per Timecode second), which is larger than
                   frame_rate() in the non-integer Timecode rate case.
                */
@@ -720,14 +720,14 @@ timecode_to_sample(
                                (
                                 ((timecode.hours * 60 * 60) + (timecode.minutes * 60) + timecode.seconds)
                                 *
-                                (rint(timecode.rate) * frames_per_timecode_frame)
+                                (rint(timecode.rate) * samples_per_timecode_frame)
                                )
-                               + (timecode.frames * frames_per_timecode_frame)
+                               + (timecode.frames * samples_per_timecode_frame)
                        );
        }
 
        if (use_subframes) {
-               sample += (int64_t) rint(((double)timecode.subframes * frames_per_timecode_frame) / (double)subframes_per_frame);
+               sample += (int64_t) rint(((double)timecode.subframes * samples_per_timecode_frame) / (double)subframes_per_frame);
        }
 
        if (use_offset) {
@@ -812,14 +812,14 @@ sample_to_timecode (
                double timecode_frames_left_exact;
                double timecode_frames_fraction;
                int64_t timecode_frames_left;
-               const double frames_per_timecode_frame = sample_frame_rate / timecode_frames_per_second;
-               const int64_t frames_per_hour = (int64_t)(3600. * rint(timecode_frames_per_second) * frames_per_timecode_frame);
+               const double samples_per_timecode_frame = sample_frame_rate / timecode_frames_per_second;
+               const int64_t frames_per_hour = (int64_t)(3600. * rint(timecode_frames_per_second) * samples_per_timecode_frame);
 
                timecode.hours = offset_sample / frames_per_hour;
 
                // Extract whole hours. Do this to prevent rounding errors with
                // high sample numbers in the calculations that follow.
-               timecode_frames_left_exact = (double)(offset_sample % frames_per_hour) / frames_per_timecode_frame;
+               timecode_frames_left_exact = (double)(offset_sample % frames_per_hour) / samples_per_timecode_frame;
                timecode_frames_fraction = timecode_frames_left_exact - floor( timecode_frames_left_exact );
 
                timecode.subframes = (int32_t) rint(timecode_frames_fraction * subframes_per_frame);