| 42 | } |
| 43 | |
| 44 | void Decoder::correctErrors(ArrayRef<char> codewordBytes, int numDataCodewords) { |
| 45 | int numCodewords = codewordBytes->size(); |
| 46 | ArrayRef<int> codewordInts(numCodewords); |
| 47 | for (int i = 0; i < numCodewords; i++) { |
| 48 | codewordInts[i] = codewordBytes[i] & 0xff; |
| 49 | } |
| 50 | int numECCodewords = numCodewords - numDataCodewords; |
| 51 | |
| 52 | try { |
| 53 | rsDecoder_.decode(codewordInts, numECCodewords); |
| 54 | } catch (ReedSolomonException const& ignored) { |
| 55 | (void)ignored; |
| 56 | throw ChecksumException(); |
| 57 | } |
| 58 | |
| 59 | for (int i = 0; i < numDataCodewords; i++) { |
| 60 | codewordBytes[i] = (char)codewordInts[i]; |
| 61 | } |
| 62 | } |
| 63 | |
| 64 | Ref<DecoderResult> Decoder::decode(Ref<BitMatrix> bits) { |
| 65 | // Construct a parser and read version, error-correction level |
nothing calls this directly
no test coverage detected