So I’m new with OF and C++ in general. I seem to have some serious ram management issues with something that seems fairly simple to me. I’m loading frames from a video into a texture, and frames from a camera feed into another texture and meshing them pixel for pixel of each frame into a third texture that i’m drawing to the screen. It all works fine for the first few seconds but then starts to eat an incredible amount of ram and I’m not sure what i’m doing wrong here:
.h
#pragma once
#include "ofMain.h"
class testApp : public ofBaseApp{
public:
void setup();
void update();
void draw();
void keyPressed (int key);
void keyReleased(int key);
void mouseMoved(int x, int y );
void mouseDragged(int x, int y, int button);
void mousePressed(int x, int y, int button);
void mouseReleased(int x, int y, int button);
void windowResized(int w, int h);
void dragEvent(ofDragInfo dragInfo);
void gotMessage(ofMessage msg);
int w;
int h;
int totalPixels;
ofVideoGrabber videoCam;
ofVideoPlayer vidPlayer;
unsigned char * pixels;
ofTexture otherTex;
};
.cpp
#include "testApp.h"
//--------------------------------------------------------------
void testApp::setup(){
w = 1280;
h = 800;
totalPixels = w *h * 3;
videoCam.initGrabber(w,h);
vidPlayer.loadMovie("screen.mov");
vidPlayer.play();
// vidTex.allocate(w, h, GL_RGB);
otherTex.allocate(w, h, GL_RGB);
// vidCamTex.allocate(w, h, GL_RGB);
}
//--------------------------------------------------------------
void testApp::update(){
vidPlayer.update();
videoCam.grabFrame();
pixels = new unsigned char[totalPixels];
//cout<< &pixels;
int counter = 0;
for (int i = 0; i<totalPixels; i+=3) {
if(counter % 2 == 0){
pixels[i] = videoCam.getPixels()[i];
pixels[i+1] = videoCam.getPixels()[i+1];
pixels[i+2] = videoCam.getPixels()[i+2];
}
else{
pixels[i] = vidPlayer.getPixels()[i];
pixels[i+1] = vidPlayer.getPixels()[i+1];
pixels[i+2] = vidPlayer.getPixels()[i+2];
}
counter++;
}
otherTex.loadData(pixels, w,h, GL_RGB);
}
void testApp::draw(){
otherTex.draw(0, 0);
}