summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rotord/src/rotor.h31
1 files changed, 23 insertions, 8 deletions
diff --git a/rotord/src/rotor.h b/rotord/src/rotor.h
index a4b3249..ee58484 100644
--- a/rotord/src/rotor.h
+++ b/rotord/src/rotor.h
@@ -388,6 +388,7 @@ namespace Rotor {
create_image_input("Image input","Image input");
create_signal_input("Selector","Selector input");
create_attribute("mode","Cycling mode {cut|mix}","Mode","cut",{"cut","mix"});
+ create_attribute("length_mode","Transition length mode","Length mode","seconds",{"seconds","fraction"});
//create_attribute("time_mode","Time mode {abs|rel}","time mode","abs",{"abs","rel","stretch"});
create_parameter("transition_length","number","transition length","Transition length",-1.0f,0.0f,0.0f);
title="Video cycler";
@@ -404,6 +405,9 @@ namespace Rotor {
if (attributes["mode"]->intVal==CYCLER_mix&&image_inputs.size()>1){
int im1=((int)inputs[0]->get((Time_spec)frame))%image_inputs.size();
int im2=(im1+1)%image_inputs.size();
+
+ //work out timing
+
float f=fmod(inputs[0]->get((Time_spec)frame),1.0f);
Image *in1=image_inputs[im1]->get(frame);
if (in1){
@@ -429,6 +433,10 @@ namespace Rotor {
return nullptr;
}
Video_cycler* clone(map<string,string> &_settings) { return new Video_cycler(_settings);};
+ private:
+ float segment_start;
+ int segment;
+ int lastframe;
};
#define VIDEOFRAMES_frame 1
#define VIDEOFRAMES_blend 2
@@ -588,8 +596,9 @@ namespace Rotor {
description="Loads a banks of video files";
clip_loaded=-1;
isLoaded=false;
- segment=-1;
+ segment=0;
segment_start=0.0f;
+ lastframe=0;
};
Video_bank(map<string,string> &settings): Video_bank() {
base_settings(settings);
@@ -642,14 +651,20 @@ namespace Rotor {
}
}
else {
- //find segment start
- Time_spec testframe=(Time_spec)frame.lastframe();
- while ((int)inputs[0]->get(testframe)==seg&&testframe.frame()>0){
- testframe=testframe.lastframe();
-
+ if (thisframe==0){
+ segment_start=0.0f;
+ segment=seg;
+ }
+ else {
+ //find segment start
+ Time_spec testframe=(Time_spec)frame.lastframe();
+ while ((int)inputs[0]->get(testframe)==seg&&testframe.frame()>0){
+ testframe=testframe.lastframe();
+
+ }
+ segment_start=testframe.time;
+ segment=seg;
}
- segment_start=testframe.time;
- segment=seg;
}
wanted=(((Time_spec)frame).time-segment_start)*clipspeed*frame.framerate;
lastframe=thisframe;