summaryrefslogtreecommitdiff
path: root/rotord/src
diff options
context:
space:
mode:
Diffstat (limited to 'rotord/src')
-rw-r--r--rotord/src/cvimage.h10
-rw-r--r--rotord/src/rotor.h24
2 files changed, 25 insertions, 9 deletions
diff --git a/rotord/src/cvimage.h b/rotord/src/cvimage.h
index 0a91715..2374e5b 100644
--- a/rotord/src/cvimage.h
+++ b/rotord/src/cvimage.h
@@ -90,6 +90,15 @@ namespace Rotor {
zero();
setup(_w,_h);
};
+ Image(const Image &mom) {
+ // copy constructor
+ zero();
+ rgb=mom.rgb.clone();
+ w=mom.w;
+ h=mom.h;
+ RGBdata=rgb.data; //can move to use the bare pointer eventually
+ ownsRGBdata=false; //always just deallocate cv::Mat from stack
+ }
~Image() {
free();
};
@@ -193,6 +202,7 @@ namespace Rotor {
h=rgb.cols;
return true;
}
+ //leaks
Image* clone(){
Image *t=new Image();
t->rgb=rgb.clone();
diff --git a/rotord/src/rotor.h b/rotord/src/rotor.h
index dc7d737..fe85b4d 100644
--- a/rotord/src/rotor.h
+++ b/rotord/src/rotor.h
@@ -416,7 +416,7 @@ namespace Rotor {
};
void reset(){
time_taken=0.0;
- int();
+ init();
}
void time_frame(){
struct timeval end_time;
@@ -1153,24 +1153,30 @@ namespace Rotor {
};
Image *output(const Frame_spec &frame){
if (feedbackptr->RGBdata){
+ //feedback.push_back((*(*feedbackptr).clone()));
feedback.push_back(*feedbackptr);
- feedbacknums.push_back(frame.frame());
- cerr<<"video feedback: added, "<<feedback.size()<<" images in cache"<<endl;
+ feedbacknums.push_back(frame.lastframe().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)){
+ if (feedback.size()>((int)parameters["delay"]->value)-1){
+ if (feedback.size()>((int)parameters["delay"]->value)){
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));
+ advance(it2,feedback.size()-(((int)parameters["delay"]->value)));
+ advance(iit2,feedback.size()-(((int)parameters["delay"]->value)));
feedback.erase(it1,it2);
feedbacknums.erase(iit1,iit2);
- cerr<<"video feedback: removed, "<<feedback.size()<<" images remain in cache"<<endl;
+ //cerr<<"video feedback: removed, "<<feedback.size()<<" images remain in cache"<<endl;
it1=feedback.begin();
iit1=feedbacknums.begin();
}
- cerr<<"frame "<<(frame.frame())<<", feedback "<<(*iit1)<<endl;
+ /*
+ string l="[";
+ for (auto f:feedbacknums) l=l+toString(f)+",";
+ l+="]";
+ cerr<<"frame "<<(frame.frame())<<", feedback "<<(*iit1)<<" of "<<l<<endl;
+ */
return &(*it1);
}
}