r370: Heroine Virutal's official release 1.2.1
[cinelerra_cv/mob.git] / hvirtual / cinelerra / intautos.C
blobc251bb1b6e4b635d82fc6190c18f199c4b179650
1 #include "intauto.h"
2 #include "intautos.h"
4 IntAutos::IntAutos(EDL *edl, Track *track)
5  : Autos(edl, track)
9 IntAutos::~IntAutos()
14 Auto* IntAutos::new_auto()
16         return new IntAuto(edl, this);
19 int IntAutos::automation_is_constant(int64_t start, int64_t end)
21         Auto *current_auto, *before = 0, *after = 0;
22         int result;
24         result = 1;          // default to constant
25         if(!last && !first) return result; // no automation at all
27 // quickly get autos just outside range 
28         get_neighbors(start, end, &before, &after);
30 // autos before range
31         if(before) 
32                 current_auto = before;   // try first auto
33         else 
34                 current_auto = first;
36 // test autos in range  
37         for( ; result && 
38                 current_auto && 
39                 current_auto->next && 
40                 current_auto->position < end; 
41                 current_auto = current_auto->next)
42         {
43 // not constant
44                 if(((IntAuto*)current_auto->next)->value != ((IntAuto*)current_auto)->value) 
45                         result = 0;
46         }
48         return result;
51 double IntAutos::get_automation_constant(int64_t start, int64_t end)
53         Auto *current_auto, *before = 0, *after = 0;
54         
55 // quickly get autos just outside range 
56         get_neighbors(start, end, &before, &after);
58 // no auto before range so use first
59         if(before)
60                 current_auto = before;
61         else
62                 current_auto = first;
64 // no autos at all so use default value
65         if(!current_auto) current_auto = default_auto;
67         return ((IntAuto*)current_auto)->value;
71 void IntAutos::dump()
73         printf("        Default %p: position: %ld value: %d\n", default_auto, default_auto->position, ((IntAuto*)default_auto)->value);
74         for(Auto* current = first; current; current = NEXT)
75         {
76                 printf("        %p position: %ld value: %d\n", current, current->position, ((IntAuto*)current)->value);
77         }