4 Commits

Author SHA1 Message Date
Jamie Allen daec77d2be some memory leak fixes in RelaxRate
still have problem with image.allocation not letting go of memory
properly... and image.load(image.jpg);
2012-03-02 11:37:24 +00:00
Jamie Allen 6d0f6422bf mar 2nd trying to fix memory leaks 2012-03-02 10:27:45 +00:00
Jamie Allen 1728a128e4 trying to fix memory probs - blobs / images clearings 2012-03-02 01:31:21 +00:00
Jamie Allen e43b78cc5a Revert 884e55abd48d4efa0c6bfe06469e7b1abea51c14^..HEAD 2012-03-02 01:01:53 +00:00
6 changed files with 66 additions and 56 deletions
+2
View File
@@ -22,9 +22,11 @@ void AbstractAnalysis::do_synthesize() {
if(_state == STATE_STOP) goto exit;
_state = STATE_DISPLAY_RESULTS;
displayresults();
cleanup();
}
exit:
cleanup();
ofNotifyEvent(_synthesize_cb, _name);
}
+4
View File
@@ -48,6 +48,10 @@ protected:
// display the results from disk
virtual void displayresults() = 0;
// display the results from disk
virtual void cleanup() {;}
public:
string _name;
+4
View File
@@ -184,7 +184,11 @@ void IResponseAnalysis::synthesise()
cvConvertorImage.setFromGrayscalePlanarImages(cvGrayDiff1,cvGrayDiff1,cvGrayDiff1);
saveImageSynthesis(file_name, &cvConvertorImage, OF_IMAGE_GRAYSCALE);
_synth_save_cnt++;
}
}
}
+46 -36
View File
@@ -55,49 +55,18 @@ void RelaxRateAnalysis::setup(int camWidth, int camHeight)
_image_shown = false;
image1.clear();
image2.clear();
image3.clear();
image4.clear();
image5.clear();
// images use for drawing the synthesized files to the screen ///
image1.setUseTexture(false); // the non texture image that is needed to first load the image
image2.setUseTexture(true); // the image that needs to get written to the screen which takes the content of image1
// images used for re-loading and saving out the synthesized files ///
image3.setUseTexture(false);
image4.setUseTexture(false);
image5.setUseTexture(false);
image1.allocate(RefractiveIndex::_vid_w,RefractiveIndex::_vid_h, OF_IMAGE_COLOR);
image2.allocate(RefractiveIndex::_vid_w,RefractiveIndex::_vid_h, OF_IMAGE_COLOR);
image3.allocate(RefractiveIndex::_vid_w,RefractiveIndex::_vid_h, OF_IMAGE_COLOR);
image4.allocate(RefractiveIndex::_vid_w,RefractiveIndex::_vid_h, OF_IMAGE_COLOR);
image5.allocate(RefractiveIndex::_vid_w,RefractiveIndex::_vid_h, OF_IMAGE_COLOR);
//cout << "RefractiveIndex::_vid_w " << RefractiveIndex::_vid_w << endl;
//cout << "RefractiveIndex::_vid_h " << RefractiveIndex::_vid_h << endl;
// clear() apparently fixes the "OF_WARNING: in allocate, reallocating a ofxCvImage"
// that we're getting in OSX/Windows and is maybe crashing Windows
// http://forum.openframeworks.cc/index.php?topic=1867.0
cvColorImage1.clear();
cvGrayImage1.clear();
cvGrayDiff1.clear();
cvColorImage2.clear();
cvGrayImage2.clear();
cvGrayDiff2.clear();
cvColorImage1.allocate(RefractiveIndex::_vid_w,RefractiveIndex::_vid_h);
cvGrayImage1.allocate(RefractiveIndex::_vid_w,RefractiveIndex::_vid_h);
cvGrayDiff1.allocate(RefractiveIndex::_vid_w,RefractiveIndex::_vid_h);
cvColorImage2.allocate(RefractiveIndex::_vid_w,RefractiveIndex::_vid_h);
cvGrayImage2.allocate(RefractiveIndex::_vid_w,RefractiveIndex::_vid_h);
cvGrayDiff2.allocate(RefractiveIndex::_vid_w,RefractiveIndex::_vid_h);
}
@@ -133,7 +102,8 @@ void RelaxRateAnalysis::synthesise()
//cout << "IResponseAnalysis::saving synthesis...\n";
if(_state == STATE_STOP) return;
cvContourFinderVect.clear();
cvContourFinderVect.clear();
for(float i=1;i<_saved_filenames_analysis.size();i++){
@@ -166,11 +136,16 @@ void RelaxRateAnalysis::synthesise()
void RelaxRateAnalysis::displayresults()
{
cvContourFinderVectDisplay.clear();
//cvContourFinderVectDisplay.clear();
clearcfindervectdisplay();
for(int i=1;i<cvContourFinderVect.size();i++){
if(_state == STATE_STOP) return;
if(_state == STATE_STOP){
clearcfindervectdisplay();
clearcfindervect();
return;
}
//cout << "_saved_filenames_analysis[i] - " << _saved_filenames_synthesis[i] << endl;
@@ -187,6 +162,14 @@ void RelaxRateAnalysis::displayresults()
}
clearcfindervectdisplay();
clearcfindervect();
//cvContourFinderVectDisplay.clear();
//cvContourFinderVect.clear();
}
@@ -197,7 +180,8 @@ void RelaxRateAnalysis::draw()
switch (_state) {
case STATE_ACQUIRING:
{
if (_frame_cnt < _frame_cnt_max)
{
@@ -227,6 +211,7 @@ void RelaxRateAnalysis::draw()
case STATE_SYNTHESISING:
{
// display animation of something while the synthesis in on-going...
//cout << "RelaxRateAnalysis = STATE_SYNTHESISING...\n";
@@ -356,3 +341,28 @@ void RelaxRateAnalysis::save_cb(Timer& timer)
}
void RelaxRateAnalysis::cleanup()
{
}
void RelaxRateAnalysis::clearcfindervect()
{
for(int i = 0; i < cvContourFinderVect.size(); i++) {
rfiCvContourFinder* f = cvContourFinderVect[i];
// maybe it's erase here? http://forum.openframeworks.cc/index.php/topic,3016.0.html
// cvContourFinderVect.erase(i);
delete f;
}
cvContourFinderVect.clear();
}
void RelaxRateAnalysis::clearcfindervectdisplay()
{
cvContourFinderVectDisplay.clear();
}
+6 -19
View File
@@ -23,6 +23,7 @@ public:
void acquire();
void synthesise();
void displayresults();
void cleanup();
void draw();
@@ -30,6 +31,9 @@ public:
protected:
void clearcfindervect();
void clearcfindervectdisplay();
bool _RUN_DONE;
float _flip, _level;
int _run_cnt, _save_cnt, _synth_save_cnt, _anim_cnt;
@@ -39,27 +43,10 @@ protected:
int _maxblobs;
bool _show_image, _image_shown;
ofImage image1;
ofImage image2;
ofImage image3;
ofImage image4;
ofImage image5;
ofImage image6;
ofxCvColorImage cvColorImage1;
ofxCvColorImage cvColorImage2;
ofxCvColorImage cvColorImage3;
ofxCvColorImage cvColorImage4;
ofxCvColorImage cvColorImage5;
ofxCvColorImage cvColorImage6;
ofImage image1;
ofxCvColorImage cvColorImage1;
ofxCvGrayscaleImage cvGrayDiff1;
ofxCvGrayscaleImage cvGrayDiff2;
ofxCvGrayscaleImage cvGrayImage1;
ofxCvGrayscaleImage cvGrayImage2;
ofxCvGrayscaleImage cvGrayImage3;
ofxCvGrayscaleImage cvGrayImage4;
vector<rfiCvContourFinder*> cvContourFinderVect;
vector<rfiCvContourFinder*> cvContourFinderVectDisplay;
+4 -1
View File
@@ -56,7 +56,7 @@ void ShadowScapesAnalysis::setup(int camWidth, int camHeight)
image3.clear();
image4.clear();
image5.clear();
// images use for drawing the synthesized files to the screen ///
image1.setUseTexture(false); // the non texture image that is needed to first load the image
image2.setUseTexture(true); // the image that needs to get written to the screen which takes the content of image1
@@ -439,6 +439,9 @@ void ShadowScapesAnalysis::draw()
// display results of the synthesis
_RUN_DONE = true;
// clear allocated memory...?
break;
}