mathieu@14
|
1 function [ sceneSchedule ] = manageOverlapping( sceneSchedule,minSpace )
|
mathieu@14
|
2
|
mathieu@14
|
3 % This program was written by Mathias Rossignol & Grégoire Lafay
|
mathieu@14
|
4 % is Copyright (C) 2015 IRCAM <http://www.ircam.fr>
|
mathieu@14
|
5 %
|
mathieu@14
|
6 % This program is free software: you can redistribute it and/or modify it
|
mathieu@14
|
7 % under the terms of the GNU General Public License as published by the Free
|
mathieu@14
|
8 % Software Foundation, either version 3 of the License, or (at your option)
|
mathieu@14
|
9 % any later version.
|
mathieu@14
|
10 %
|
mathieu@14
|
11 % This program is distributed in the hope that it will be useful, but
|
mathieu@14
|
12 % WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
mathieu@14
|
13 % or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
mathieu@14
|
14 % for more details.
|
mathieu@14
|
15 %
|
mathieu@14
|
16 % You should have received a copy of the GNU General Public License along
|
mathieu@14
|
17 % with this program. If not, see <http://www.gnu.org/licenses/>.
|
mathieu@14
|
18
|
mathieu@14
|
19 % get sceneSchedule index in order to have position in ascending order
|
mathieu@14
|
20
|
mathieu@14
|
21 positions= [sceneSchedule.position];
|
mathieu@14
|
22 isBackground= [sceneSchedule.isBackground];
|
mathieu@14
|
23 [~,index]=sort(positions(logical(~isBackground)));
|
mathieu@14
|
24 index=index+length(isBackground(isBackground==1));
|
mathieu@14
|
25 idFlag=zeros(length(unique([sceneSchedule.classId])),1);
|
mathieu@14
|
26
|
mathieu@14
|
27 endPos=0;
|
mathieu@14
|
28 index2remove=[];
|
mathieu@14
|
29 for jj = index
|
mathieu@14
|
30 if(sceneSchedule(jj).position > endPos)
|
mathieu@14
|
31 endPos= sceneSchedule(jj).position+sceneSchedule(jj).duration;
|
mathieu@14
|
32 idFlag(sceneSchedule(jj).classId)=1;
|
mathieu@14
|
33 elseif(2*sceneSchedule(jj).duration>endPos-(sceneSchedule(jj).position+sceneSchedule(jj).duration) || idFlag(sceneSchedule(jj).classId)==0)
|
mathieu@14
|
34 sceneSchedule(jj).position=endPos+minSpace;
|
mathieu@14
|
35 endPos= sceneSchedule(jj).position+sceneSchedule(jj).duration;
|
mathieu@14
|
36 idFlag(sceneSchedule(jj).classId)=1;
|
mathieu@14
|
37 else
|
mathieu@14
|
38 index2remove=[index2remove jj];
|
mathieu@14
|
39 end
|
mathieu@14
|
40 end
|
mathieu@14
|
41
|
mathieu@14
|
42 sceneSchedule(index2remove)=[]; |