diff options
| author | Tim Redfern <tim@eclectronics.org> | 2013-12-18 13:05:59 +0000 |
|---|---|---|
| committer | Tim Redfern <tim@eclectronics.org> | 2013-12-18 13:05:59 +0000 |
| commit | 5b937b31f75b06488b59a09e5a0f844af782fbd0 (patch) | |
| tree | 77341aadb517634439af6a6343cc07626e3fc562 | |
| parent | 23868cb49212055fe55ab4da5ad630a9c94ea192 (diff) | |
video feedback mystery
| -rw-r--r-- | rotord/src/rotor.h | 44 |
1 files changed, 35 insertions, 9 deletions
diff --git a/rotord/src/rotor.h b/rotord/src/rotor.h index f256f66..dc7d737 100644 --- a/rotord/src/rotor.h +++ b/rotord/src/rotor.h @@ -119,6 +119,7 @@ inputs: [ #include <unordered_map> #include <deque> +#include <list> #include <math.h> #include <memory> #include <sys/time.h> @@ -1134,27 +1135,52 @@ namespace Rotor { Video_feedback(){ title="Video feedback"; description="Repeats output of the last frame"; - feedback=nullptr; + feedbackptr=nullptr; + create_parameter("delay","number","number of frames delay","Delay",1.0,0.0,0.0); NODEID="78edfa28-2d0a-11e3-86c7-9f266fabb10c"; }; Video_feedback(map<string,string> &settings):Video_feedback() { base_settings(settings); }; - ~Video_feedback(){ }; + ~Video_feedback(){}; void set_feedback(Image *iptr){ - feedback=iptr; + feedbackptr=iptr; } + void init(){ + feedback.clear(); + feedbacknums.clear(); + image.clear(); + }; Image *output(const Frame_spec &frame){ - if (feedback->RGBdata){ - return feedback; + if (feedbackptr->RGBdata){ + feedback.push_back(*feedbackptr); + feedbacknums.push_back(frame.frame()); + cerr<<"video feedback: added, "<<feedback.size()<<" images in cache"<<endl; + list<Image>::iterator it1=feedback.begin(); + list<int>::iterator iit1=feedbacknums.begin(); + if (feedback.size()>((int)parameters["delay"]->value)){ + if (feedback.size()>((int)parameters["delay"]->value+1)){ + list<Image>::iterator it2=feedback.begin(); + list<int>::iterator iit2=feedbacknums.begin(); + advance(it2,feedback.size()-(((int)parameters["delay"]->value)+1)); + advance(iit2,feedback.size()-(((int)parameters["delay"]->value)+1)); + feedback.erase(it1,it2); + feedbacknums.erase(iit1,iit2); + cerr<<"video feedback: removed, "<<feedback.size()<<" images remain in cache"<<endl; + it1=feedback.begin(); + iit1=feedbacknums.begin(); + } + cerr<<"frame "<<(frame.frame())<<", feedback "<<(*iit1)<<endl; + return &(*it1); + } } - image.setup(frame.w,frame.h); - image.clear(); - return ℑ + return ℑ //will always be black }; Video_feedback* clone(map<string,string> &_settings) { return new Video_feedback(_settings);}; private: - Image *feedback; + list<Image> feedback; + list<int> feedbacknums; + Image *feedbackptr; }; //------------------------------------------------------------------- class Node_factory{ |
