[ardour-dev] [PATCH] correct update of _transport_position

Karsten Wiese annabellesgarden at yahoo.de
Sat Oct 22 11:12:16 PDT 2005


Hi

this not that critical, as the only buggy update appears under
this comment:
	/* something isn't right, but we should move with the master
	   for now.
	*/
here the patch changes
	jack_nframes_t frames_moved
where jack_nframes_t is unsigned, into
	long frames_moved
so that the following
	if (frames_moved < 0)
behaves like in the other 2 occurrences of this construct.
Without patch, decrement_transport_position ()
wont ever be called here.

The patch creates the new function
	void Session::update_transport_position (uint32_t val)
and replaces the 3 occurrences of
	if (frames_moved < 0) {
		decrement_transport_position (-frames_moved);
	} else {
		increment_transport_position (frames_moved);
	}
with calls to it.

This might be unsafe in
	Session::process_without_events (jack_nframes_t nframes),
where the original code is:
	frames_moved = (long) floor (_transport_speed * nframes);

	if (process_routes (nframes, 0)) {
		no_roll (nframes, 0);
		return;
	}

	commit_diskstreams (nframes, session_needs_butler);

	if (frames_moved < 0) {
		decrement_transport_position (-frames_moved);
	} else {
		increment_transport_position (frames_moved);
	}
Patch is only correct here, if _transport_speed isn't updated under
process_routes() or commit_diskstreams ().


      Karsten
-------------- next part --------------
A non-text attachment was scrubbed...
Name: update_transport_position.patch
Type: text/x-diff
Size: 2610 bytes
Desc: not available
URL: <http://lists.ardour.org/pipermail/ardour-dev-ardour.org/attachments/20051022/8b9c3379/attachment.patch>


More information about the Ardour-Dev mailing list