From 17b3ae2a27de4fe5d0f565efc83a38bd8ca81b26 Mon Sep 17 00:00:00 2001 From: Tim Redfern Date: Thu, 7 Nov 2013 15:22:10 +0000 Subject: video bank 1 tiny issue --- rotord/src/rotor.h | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) (limited to 'rotord/src') 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 &_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 &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; -- cgit v1.2.3