diff options
| author | Julie Lala <jules@okfoc.us> | 2014-01-29 09:31:53 -0500 |
|---|---|---|
| committer | Julie Lala <jules@okfoc.us> | 2014-01-29 09:31:53 -0500 |
| commit | 219aad8ea57538868c6735860dbcc0873f62dcd8 (patch) | |
| tree | 2cc691da2fe6a0c5c6ae75ad80920fc74d66f809 /js/worker/worker.js | |
| parent | 0aa06bbe84961b9393029f904bc7a49e79b513f4 (diff) | |
grunt build process for worker
Diffstat (limited to 'js/worker/worker.js')
| -rw-r--r-- | js/worker/worker.js | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/js/worker/worker.js b/js/worker/worker.js new file mode 100644 index 0000000..2a69592 --- /dev/null +++ b/js/worker/worker.js @@ -0,0 +1,94 @@ +importScripts('LZWEncoder.js', 'NeuQuant.js', 'GIFEncoder.js'); + +self.onmessage = function(event) { + var data = event.data; + var task = data['task']; + switch (task) { + case 'encode': + encode (data); + break; + case 'quantize': + quantize(data); + break; + case 'close': + self.close(); + break; + } +} + +function log(msg) { + self.postMessage({ + task: 'message', + message: msg + }); +} + +function quantize (data) { + var imageData = data["imageData"]; + var pixels = discardAlphaChannel( imageData.data ); + + var nq = new NeuQuant (pixels, pixels.length, 1); + var colortab = nq.process(); + + self.postMessage({ + task: 'quantize', + neuquant: nq.save(), + colortab: colortab + }); +} + +function discardAlphaChannel( imageData ) { + var pixels = []; + + for ( var i = 0, b = 0, _len = imageData.length; i < _len; b += 4 ) { + pixels[i++] = imageData[b]; + pixels[i++] = imageData[b+1]; + pixels[i++] = imageData[b+2]; + } + return pixels; +} + +function encode (data) { + var frame_index = data["frame_index"]; + var frame_length = data["frame_length"]; + var height = data["height"]; + var width = data["width"]; + var imageData = data["imageData"]; + var delay = data["delay"]; + var neuquant = data["neuquant"]; + var colortab = data["colortab"]; + + // Create a new GIFEncoder for every new worker + var encoder = new GIFEncoder(); + encoder.setRepeat(0); // loop forever + encoder.setQuality(1); + encoder.setSize(width, height); + encoder.setDelay(delay); + + if (frame_index == 0) { + encoder.start(); + } + else { + encoder.cont(); + encoder.setProperties(true, false); //started, firstFrame + } + + // Load the neural net here because the color table gets clobbered by encoder.start(); + encoder.setNeuquant(neuquant, colortab); + encoder.addFrame(imageData, true); + + if(frame_length == frame_index) { + encoder.finish(); + } + + self.postMessage({ + task: 'encode', + frame_index: frame_index, + frame_data: encoder.stream().getData() + }); + // on the page, search for the GIF89a to see the frame_index + + delete encoder; + delete data; +}; + |
