//--------------------------------------------------------------
void testApp::setup(){
	ofSetWindowShape(1280, 480);
	ofSetLogLevel(OF_LOG_NOTICE);

	video.initGrabber(640, 480, true);
	imitate(mapped, video);
	mapped.update();
	mapped.getPixelsRef().set(2,0);
	//take a video input image, and remap a central 
	//set of pixels to fill the whole image

	for (int j=0; j<640; j++)
		for (int i=0; i<480; i++) {
			source.push_back(ofVec2f(i, j));
			target.push_back(ofVec2f(i, j));
		}
	ready = false;
}
//-----------
ModuleImageAnalyzer::ModuleImageAnalyzer() : Learn() {
    setGuiInputsVisible(false);
    
    width = 320;
    height = 240;
    
    stepSize = 32;
    numBins = 30;
    vLerpRate = 0.2;
    
    
    if (mode == 0) {
        cam.initGrabber(width, height);
        imitate(previous, cam);
        imitate(diff, cam);
        frameDiffCol.resize(cam.getWidth());
        ySteps = cam.getHeight() / stepSize;
        xSteps = cam.getWidth() / stepSize;
    }
    else if (mode == 1) {
        player.loadMovie("/Users/Gene/Desktop/german_train_320x240.mp4");
        player.setLoopState(OF_LOOP_NORMAL);
        player.play();
        imitate(previous, player);
        imitate(diff, player);
        frameDiffCol.resize(player.getWidth());
        ySteps = cam.getHeight() / stepSize;
        xSteps = cam.getWidth() / stepSize;
    }
    else if (mode == 2) {
        ofImage img;
        img.loadImage("/Users/Gene/Code/openFrameworks/examples/graphics/imageLoaderExample/bin/data/images/bikers.jpg");
        img.resize(width, height);
        image.setFromPixels(img.getPixels(), width, height);
        imitate(previous, image);
        imitate(diff, image);
        frameDiffCol.resize(image.getWidth());
        ySteps = cam.getHeight() / stepSize;
        xSteps = cam.getWidth() / stepSize;
    }
    
    
    
    control.setName("ImageAnalyzer");
    control.addParameter("velocity lerp", &vLerpRate, 0.0f, 1.0f);
    control.addParameter("bins", &numBins, 6, 64);
    
    
    
    // set up materials
    mesh.clear();
    mesh.setMode(OF_PRIMITIVE_TRIANGLES);
	for(int y = 0; y < ySteps; y++) {
		for(int x = 0; x < xSteps; x++) {
			mesh.addVertex(ofVec2f(x * stepSize, y * stepSize));
			mesh.addTexCoord(ofVec2f(x * stepSize, y    * stepSize));
		}
	}
	for(int y = 0; y + 1 < ySteps; y++) {
		for(int x = 0; x + 1 < xSteps; x++) {
			int nw = y * xSteps + x;
			int ne = nw + 1;
			int sw = nw + xSteps;
			int se = sw + 1;
			mesh.addIndex(nw);
			mesh.addIndex(ne);
			mesh.addIndex(se);
			mesh.addIndex(nw);
			mesh.addIndex(se);
			mesh.addIndex(sw);
		}
	}

    // setup histograms
    rgb.allocate(width, height);
    hsv.allocate(width, height);
    r.allocate(width, height);
    g.allocate(width, height);
    b.allocate(width, height);
    h.allocate(width, height);
    s.allocate(width, height);
    v.allocate(width, height);
    
    
    
    addInput("frameDiffTotal", &frameDiffTotal, 0.0f, 8000.0f);
    addInput("frameDiffTotalRed", &frameDiffTotalRed, 0.0f, 3000.0f);
    addInput("frameDiffTotalGreen", &frameDiffTotalGreen, 0.0f, 3000.0f);
    addInput("frameDiffTotalBlue", &frameDiffTotalBlue, 0.0f, 3000.0f);
    
    

    
}