From c76df92fd466be0c9a08c20f54ca360a2933ea6c Mon Sep 17 00:00:00 2001 From: Gusts Kaksis Date: Fri, 4 Dec 2015 10:35:19 +0200 Subject: [PATCH] Moved packer processing options to Packer class. Use zlib deflate options in PackerSync. --- lib/packer-async.js | 24 +++--------------------- lib/packer-sync.js | 16 +--------------- lib/packer.js | 30 +++++++++++++++++++++++++++++- 3 files changed, 33 insertions(+), 37 deletions(-) diff --git a/lib/packer-async.js b/lib/packer-async.js index 89324ca..92294c8 100644 --- a/lib/packer-async.js +++ b/lib/packer-async.js @@ -2,34 +2,16 @@ var util = require('util'); var Stream = require('stream'); -var zlib = require('zlib'); var constants = require('./constants'); var Packer = require('./packer'); -var PackerAsync = module.exports = function(options) { +var PackerAsync = module.exports = function(opt) { Stream.call(this); - options.deflateChunkSize = options.deflateChunkSize || 32 * 1024; - options.deflateLevel = options.deflateLevel != null ? options.deflateLevel : 9; - options.deflateStrategy = options.deflateStrategy != null ? options.deflateStrategy : 3; - options.inputHasAlpha = options.inputHasAlpha != null ? options.inputHasAlpha : true; - options.deflateFactory = options.deflateFactory || zlib.createDeflate; - options.bitDepth = options.bitDepth || 8; - options.colorType = (typeof options.colorType === 'number') ? options.colorType : constants.COLORTYPE_COLOR_ALPHA; - - if (options.colorType !== constants.COLORTYPE_COLOR && options.colorType !== constants.COLORTYPE_COLOR_ALPHA) { - throw new Error('option color type:' + options.colorType + ' is not supported at present'); - } - if (options.bitDepth !== 8) { - throw new Error('option bit depth:' + options.bitDepth + ' is not supported at present'); - } + var options = opt || {}; this._packer = new Packer(options); - this._deflate = options.deflateFactory({ - chunkSize: options.deflateChunkSize, - level: options.deflateLevel, - strategy: options.deflateStrategy - }); + this._deflate = this._packer.createDeflate(); this.readable = true; }; diff --git a/lib/packer-sync.js b/lib/packer-sync.js index b7672bf..09e8a7a 100644 --- a/lib/packer-sync.js +++ b/lib/packer-sync.js @@ -6,20 +6,6 @@ var Packer = require('./packer'); module.exports = function(metaData, opt) { var options = opt || {}; - options.deflateChunkSize = options.deflateChunkSize || 32 * 1024; - options.deflateLevel = options.deflateLevel != null ? options.deflateLevel : 9; - options.deflateStrategy = options.deflateStrategy != null ? options.deflateStrategy : 3; - options.inputHasAlpha = options.inputHasAlpha != null ? options.inputHasAlpha : true; - options.deflateFactory = options.deflateFactory || zlib.createDeflate; - options.bitDepth = options.bitDepth || 8; - options.colorType = (typeof options.colorType === 'number') ? options.colorType : constants.COLORTYPE_COLOR_ALPHA; - - if (options.colorType !== constants.COLORTYPE_COLOR && options.colorType !== constants.COLORTYPE_COLOR_ALPHA) { - throw new Error('option color type:' + options.colorType + ' is not supported at present'); - } - if (options.bitDepth !== 8) { - throw new Error('option bit depth:' + options.bitDepth + ' is not supported at present'); - } var packer = new Packer(options); @@ -38,7 +24,7 @@ module.exports = function(metaData, opt) { var filteredData = packer.filterData(metaData.data, metaData.width, metaData.height); // compress it - var compressedData = zlib.deflateSync(filteredData); + var compressedData = zlib.deflateSync(filteredData, packer.getDeflateOptions()); filteredData = null; if (!compressedData || !compressedData.length) { diff --git a/lib/packer.js b/lib/packer.js index c8a27f2..1343738 100644 --- a/lib/packer.js +++ b/lib/packer.js @@ -4,12 +4,40 @@ var constants = require('./constants'); var CrcStream = require('./crc'); var bitPacker = require('./bitpacker'); var filter = require('./filter-pack'); +var zlib = require('zlib'); var Packer = module.exports = function(options) { this._options = options; + + options.deflateChunkSize = options.deflateChunkSize || 32 * 1024; + options.deflateLevel = options.deflateLevel != null ? options.deflateLevel : 9; + options.deflateStrategy = options.deflateStrategy != null ? options.deflateStrategy : 3; + options.inputHasAlpha = options.inputHasAlpha != null ? options.inputHasAlpha : true; + options.deflateFactory = options.deflateFactory || zlib.createDeflate; + options.bitDepth = options.bitDepth || 8; + options.colorType = (typeof options.colorType === 'number') ? options.colorType : constants.COLORTYPE_COLOR_ALPHA; + + if (options.colorType !== constants.COLORTYPE_COLOR && options.colorType !== constants.COLORTYPE_COLOR_ALPHA) { + throw new Error('option color type:' + options.colorType + ' is not supported at present'); + } + if (options.bitDepth !== 8) { + throw new Error('option bit depth:' + options.bitDepth + ' is not supported at present'); + } }; -Packer.prototype.filterData = function(data, width, height){ +Packer.prototype.getDeflateOptions = function() { + return { + chunkSize: this._options.deflateChunkSize, + level: this._options.deflateLevel, + strategy: this._options.deflateStrategy + }; +}; + +Packer.prototype.createDeflate = function() { + return this._options.deflateFactory(this.getDeflateOptions()); +}; + +Packer.prototype.filterData = function(data, width, height) { // convert to correct format for filtering (e.g. right bpp and bit depth) var packedData = bitPacker(data, width, height, this._options);