- // cout << "smpte = " << transmitting_smpte_time.hours << ":" << transmitting_smpte_time.minutes << ":" << transmitting_smpte_time.seconds << ":" << transmitting_smpte_time.frames << ", qfm = " << next_quarter_frame_to_send << endl;
-
- // Increment quarter frame counter
- next_quarter_frame_to_send++;
-
- if (next_quarter_frame_to_send >= 8) {
- // Wrap quarter frame counter
- next_quarter_frame_to_send = 0;
- // Increment smpte time twice
- SMPTE::increment( transmitting_smpte_time );
- SMPTE::increment( transmitting_smpte_time );
- // Re-calculate timing of first quarter frame
- smpte_to_sample( transmitting_smpte_time, outbound_mtc_smpte_frame, true /* use_offset */, false );
- // Compensate for audio latency
- outbound_mtc_smpte_frame += _worst_output_latency;
- }
+ const nframes_t msg_time = (outbound_mtc_timecode_frame
+ + (quarter_frame_duration * next_quarter_frame_to_send));
+
+ // This message must fall within this block or something is broken
+ assert(msg_time >= _transport_frame);
+ assert(msg_time < _transport_frame + nframes);
+
+ nframes_t out_stamp = msg_time - _transport_frame;
+ assert(out_stamp < nframes);
+
+ if (_mtc_port->midimsg (mtc_msg, 2, out_stamp)) {
+ error << string_compose(_("Session: cannot send quarter-frame MTC message (%1)"), strerror (errno))
+ << endmsg;
+ return -1;
+ }
+
+ DEBUG_STR_SET(foo,"sending ");
+ DEBUG_STR(foo) << transmitting_timecode_time;
+ DEBUG_TRACE (DEBUG::MTC, string_compose ("%1 qfm = %2, stamp = %3\n", DEBUG_STR(foo).str(), next_quarter_frame_to_send,
+ out_stamp));
+
+ // Increment quarter frame counter
+ next_quarter_frame_to_send++;
+
+ if (next_quarter_frame_to_send >= 8) {
+ // Wrap quarter frame counter
+ next_quarter_frame_to_send = 0;
+ // Increment timecode time twice
+ Timecode::increment( transmitting_timecode_time, config.get_subframes_per_frame() );
+ Timecode::increment( transmitting_timecode_time, config.get_subframes_per_frame() );
+ // Re-calculate timing of first quarter frame
+ //timecode_to_sample( transmitting_timecode_time, outbound_mtc_timecode_frame, true /* use_offset */, false );
+ outbound_mtc_timecode_frame += 8 * quarter_frame_duration;
+ // Compensate for audio latency
+ outbound_mtc_timecode_frame += _worst_output_latency;