function tracks = pad(obj, tracks)
	% pad trimmed tracks up to length of entire video
	% trimmed data is replaced with NaN values
	% see also: trim

	n_tracks = length(tracks);
	fields   = fieldnames(tracks);
	n_fields = length(fields);

	for n = 1 : n_tracks
		%% get range of data to pad
		trk		= tracks(n);
		assert(all(ismember(trk.t, obj.t_axis)), 'track contains time instants which outside the video sequence');
		t0		= trk.t(1);
		t1		= trk.t(end);
		n_pre	= nnz(obj.t_axis < t0);
		n_post  = nnz(obj.t_axis > t1);

		%% trim flags
		trk.t	= obj.t_axis;
		trk.ext = [ true(1,n_pre), trk.ext,  true(1,n_post)];
		trk.oob = [false(1,n_pre), trk.oob, false(1,n_post)];

		%% pad additional fields
		for f = 1 : n_fields
			field = fields{f};
			if startsWith(field, 're_') || startsWith(field, 'im_') || startsWith(field, 'fl_')
				sz			= size(trk.(field), [1 2]);
				nan_pre		= nan([sz n_pre]);
				nan_post	= nan([sz n_post]);
				trk.(field) = cat(3, nan_pre, trk.(field), nan_post);
			end
		end

		%% save
		tracks(n) = trk;
	end
end