class ProcessFrame extends Thread { int[] img; ProcessFrame(int[] img) { this.img = img; } public void run() { // update sum for(int i = 0; i < len; i++){ // saves 15 ms from using red() etc. sum[i][0] += ((img[i] >> 16) & 0xff) - ((prev[pos][i] >> 16) & 0xff); // red sum[i][1] += ((img[i] >> 8) & 0xff) - ((prev[pos][i] >> 8) & 0xff); // green sum[i][2] += (img[i] & 0xff) - (prev[pos][i] & 0xff); // blue prev[pos][i] = img[i]; } pos = (pos + 1) % avgLength; // update recording if(frameCount % speedUp == 0) { int[] out = new int[len]; for(int i = 0; i < len; i++) { out[i] = 0xff000000 | ((sum[i][0] >> avgBits) << 16) | ((sum[i][1] >> avgBits) << 8) | (sum[i][2] >> avgBits); } movie.addFrame(out, width, height); //println(frameRate); loadPixels(); arraycopy(out, pixels); updatePixels(); } } }