summaryrefslogtreecommitdiff
path: root/rotord/src/rotor.h
diff options
context:
space:
mode:
authorTim Redfern <tim@eclectronics.org>2013-12-18 13:05:59 +0000
committerTim Redfern <tim@eclectronics.org>2013-12-18 13:05:59 +0000
commit5b937b31f75b06488b59a09e5a0f844af782fbd0 (patch)
tree77341aadb517634439af6a6343cc07626e3fc562 /rotord/src/rotor.h
parent23868cb49212055fe55ab4da5ad630a9c94ea192 (diff)
video feedback mystery
Diffstat (limited to 'rotord/src/rotor.h')
-rw-r--r--rotord/src/rotor.h44
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 &image;
+ return &image; //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{