|
|
- /*
- Ported to JavaScript by Lazar Laszlo 2011
-
- lazarsoft@gmail.com, www.lazarsoft.info
-
- */
-
- /*
- *
- * Copyright 2007 ZXing authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
- var Decoder={};
- Decoder.rsDecoder = new ReedSolomonDecoder(GF256.QR_CODE_FIELD);
-
- Decoder.correctErrors=function( codewordBytes, numDataCodewords)
- {
- var numCodewords = codewordBytes.length;
- // First read into an array of ints
- var codewordsInts = new Array(numCodewords);
- for (var i = 0; i < numCodewords; i++)
- {
- codewordsInts[i] = codewordBytes[i] & 0xFF;
- }
- var numECCodewords = codewordBytes.length - numDataCodewords;
- try
- {
- Decoder.rsDecoder.decode(codewordsInts, numECCodewords);
- //var corrector = new ReedSolomon(codewordsInts, numECCodewords);
- //corrector.correct();
- }
- catch ( rse)
- {
- throw rse;
- }
- // Copy back into array of bytes -- only need to worry about the bytes that were data
- // We don't care about errors in the error-correction codewords
- for (var i = 0; i < numDataCodewords; i++)
- {
- codewordBytes[i] = codewordsInts[i];
- }
- }
-
- Decoder.decode=function(bits)
- {
- var parser = new BitMatrixParser(bits);
- var version = parser.readVersion();
- var ecLevel = parser.readFormatInformation().ErrorCorrectionLevel;
-
- // Read codewords
- var codewords = parser.readCodewords();
-
- // Separate into data blocks
- var dataBlocks = DataBlock.getDataBlocks(codewords, version, ecLevel);
-
- // Count total number of data bytes
- var totalBytes = 0;
- for (var i = 0; i < dataBlocks.length; i++)
- {
- totalBytes += dataBlocks[i].NumDataCodewords;
- }
- var resultBytes = new Array(totalBytes);
- var resultOffset = 0;
-
- // Error-correct and copy data blocks together into a stream of bytes
- for (var j = 0; j < dataBlocks.length; j++)
- {
- var dataBlock = dataBlocks[j];
- var codewordBytes = dataBlock.Codewords;
- var numDataCodewords = dataBlock.NumDataCodewords;
- Decoder.correctErrors(codewordBytes, numDataCodewords);
- for (var i = 0; i < numDataCodewords; i++)
- {
- resultBytes[resultOffset++] = codewordBytes[i];
- }
- }
-
- // Decode the contents of that stream of bytes
- var reader = new QRCodeDataBlockReader(resultBytes, version.VersionNumber, ecLevel.Bits);
- return reader;
- //return DecodedBitStreamParser.decode(resultBytes, version, ecLevel);
- }
|