[SignalingServer] Optimize dependent modules
[platform/framework/web/wrtjs.git] / signaling_server / service / node_modules / pngjs / lib / parser-sync.js
1 'use strict';
2
3 var hasSyncZlib = true;
4 var zlib = require('zlib');
5 var inflateSync = require('./sync-inflate');
6 if (!zlib.deflateSync) {
7   hasSyncZlib = false;
8 }
9 var SyncReader = require('./sync-reader');
10 var FilterSync = require('./filter-parse-sync');
11 var Parser = require('./parser');
12 var bitmapper = require('./bitmapper');
13 var formatNormaliser = require('./format-normaliser');
14
15
16 module.exports = function(buffer, options) {
17
18   if (!hasSyncZlib) {
19     throw new Error('To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0');
20   }
21
22   var err;
23   function handleError(_err_) {
24     err = _err_;
25   }
26
27   var metaData;
28   function handleMetaData(_metaData_) {
29     metaData = _metaData_;
30   }
31
32   function handleTransColor(transColor) {
33     metaData.transColor = transColor;
34   }
35
36   function handlePalette(palette) {
37     metaData.palette = palette;
38   }
39
40   function handleSimpleTransparency() {
41     metaData.alpha = true;
42   }
43
44   var gamma;
45   function handleGamma(_gamma_) {
46     gamma = _gamma_;
47   }
48
49   var inflateDataList = [];
50   function handleInflateData(inflatedData) {
51     inflateDataList.push(inflatedData);
52   }
53
54   var reader = new SyncReader(buffer);
55
56   var parser = new Parser(options, {
57     read: reader.read.bind(reader),
58     error: handleError,
59     metadata: handleMetaData,
60     gamma: handleGamma,
61     palette: handlePalette,
62     transColor: handleTransColor,
63     inflateData: handleInflateData,
64     simpleTransparency: handleSimpleTransparency
65   });
66
67   parser.start();
68   reader.process();
69
70   if (err) {
71     throw err;
72   }
73
74   //join together the inflate datas
75   var inflateData = Buffer.concat(inflateDataList);
76   inflateDataList.length = 0;
77
78   var inflatedData;
79   if (metaData.interlace) {
80     inflatedData = zlib.inflateSync(inflateData);
81   }
82   else {
83     var rowSize = ((metaData.width * metaData.bpp * metaData.depth + 7) >> 3) + 1;
84     var imageSize = rowSize * metaData.height;
85     inflatedData = inflateSync(inflateData, { chunkSize: imageSize, maxLength: imageSize });
86   }
87   inflateData = null;
88
89   if (!inflatedData || !inflatedData.length) {
90     throw new Error('bad png - invalid inflate data response');
91   }
92
93   var unfilteredData = FilterSync.process(inflatedData, metaData);
94   inflateData = null;
95
96   var bitmapData = bitmapper.dataToBitMap(unfilteredData, metaData);
97   unfilteredData = null;
98
99   var normalisedBitmapData = formatNormaliser(bitmapData, metaData);
100
101   metaData.data = normalisedBitmapData;
102   metaData.gamma = gamma || 0;
103
104   return metaData;
105 };