| Index: xfa/src/fxbarcode/qrcode/BC_QRAlignmentPatternFinder.cpp
|
| diff --git a/xfa/src/fxbarcode/qrcode/BC_QRAlignmentPatternFinder.cpp b/xfa/src/fxbarcode/qrcode/BC_QRAlignmentPatternFinder.cpp
|
| deleted file mode 100644
|
| index 2d1aa433a09ae0b924944078cfeb9c4ef5e591cf..0000000000000000000000000000000000000000
|
| --- a/xfa/src/fxbarcode/qrcode/BC_QRAlignmentPatternFinder.cpp
|
| +++ /dev/null
|
| @@ -1,200 +0,0 @@
|
| -// Copyright 2014 PDFium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
|
| -// Original code is licensed as follows:
|
| -/*
|
| - * 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.
|
| - */
|
| -
|
| -#include "xfa/src/fxbarcode/BC_ResultPoint.h"
|
| -#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h"
|
| -#include "xfa/src/fxbarcode/qrcode/BC_QRAlignmentPattern.h"
|
| -#include "xfa/src/fxbarcode/qrcode/BC_QRAlignmentPatternFinder.h"
|
| -
|
| -CBC_QRAlignmentPatternFinder::CBC_QRAlignmentPatternFinder(
|
| - CBC_CommonBitMatrix* image,
|
| - int32_t startX,
|
| - int32_t startY,
|
| - int32_t width,
|
| - int32_t height,
|
| - FX_FLOAT moduleSize)
|
| - : m_image(image),
|
| - m_startX(startX),
|
| - m_startY(startY),
|
| - m_width(width),
|
| - m_height(height),
|
| - m_moduleSize(moduleSize) {
|
| - m_crossCheckStateCount.SetSize(3);
|
| -}
|
| -CBC_QRAlignmentPatternFinder::~CBC_QRAlignmentPatternFinder() {
|
| - for (int32_t i = 0; i < m_possibleCenters.GetSize(); i++) {
|
| - delete (CBC_QRAlignmentPattern*)m_possibleCenters[i];
|
| - }
|
| - m_possibleCenters.RemoveAll();
|
| -}
|
| -CBC_QRAlignmentPattern* CBC_QRAlignmentPatternFinder::Find(int32_t& e) {
|
| - int32_t startX = m_startX;
|
| - int32_t height = m_height;
|
| - int32_t maxJ = startX + m_width;
|
| - int32_t middleI = m_startY + (height >> 1);
|
| - CFX_Int32Array stateCount;
|
| - stateCount.SetSize(3);
|
| - for (int32_t iGen = 0; iGen < height; iGen++) {
|
| - int32_t i =
|
| - middleI + ((iGen & 0x01) == 0 ? ((iGen + 1) >> 1) : -((iGen + 1) >> 1));
|
| - stateCount[0] = 0;
|
| - stateCount[1] = 0;
|
| - stateCount[2] = 0;
|
| - int32_t j = startX;
|
| - while (j < maxJ && !m_image->Get(j, i)) {
|
| - j++;
|
| - }
|
| - int32_t currentState = 0;
|
| - while (j < maxJ) {
|
| - if (m_image->Get(j, i)) {
|
| - if (currentState == 1) {
|
| - stateCount[currentState]++;
|
| - } else {
|
| - if (currentState == 2) {
|
| - if (FoundPatternCross(stateCount)) {
|
| - CBC_QRAlignmentPattern* confirmed =
|
| - HandlePossibleCenter(stateCount, i, j);
|
| - if (confirmed) {
|
| - return confirmed;
|
| - }
|
| - }
|
| - stateCount[0] = stateCount[2];
|
| - stateCount[1] = 1;
|
| - stateCount[2] = 0;
|
| - currentState = 1;
|
| - } else {
|
| - stateCount[++currentState]++;
|
| - }
|
| - }
|
| - } else {
|
| - if (currentState == 1) {
|
| - currentState++;
|
| - }
|
| - stateCount[currentState]++;
|
| - }
|
| - j++;
|
| - }
|
| - if (FoundPatternCross(stateCount)) {
|
| - CBC_QRAlignmentPattern* confirmed =
|
| - HandlePossibleCenter(stateCount, i, maxJ);
|
| - if (confirmed) {
|
| - return confirmed;
|
| - }
|
| - }
|
| - }
|
| - if (m_possibleCenters.GetSize() != 0) {
|
| - return ((CBC_QRAlignmentPattern*)(m_possibleCenters[0]))->Clone();
|
| - }
|
| - e = BCExceptionRead;
|
| - BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
|
| - return NULL;
|
| -}
|
| -FX_FLOAT CBC_QRAlignmentPatternFinder::CenterFromEnd(
|
| - const CFX_Int32Array& stateCount,
|
| - int32_t end) {
|
| - return (FX_FLOAT)(end - stateCount[2]) - stateCount[1] / 2.0f;
|
| -}
|
| -FX_BOOL CBC_QRAlignmentPatternFinder::FoundPatternCross(
|
| - const CFX_Int32Array& stateCount) {
|
| - FX_FLOAT moduleSize = m_moduleSize;
|
| - FX_FLOAT maxVariance = moduleSize / 2.0f;
|
| - for (int32_t i = 0; i < 3; i++) {
|
| - if (fabs(moduleSize - stateCount[i]) >= maxVariance) {
|
| - return false;
|
| - }
|
| - }
|
| - return TRUE;
|
| -}
|
| -FX_FLOAT CBC_QRAlignmentPatternFinder::CrossCheckVertical(
|
| - int32_t startI,
|
| - int32_t centerJ,
|
| - int32_t maxCount,
|
| - int32_t originalStateCountTotal) {
|
| - int32_t maxI = m_image->GetHeight();
|
| - CFX_Int32Array stateCount;
|
| - stateCount.Copy(m_crossCheckStateCount);
|
| - stateCount[0] = 0;
|
| - stateCount[1] = 0;
|
| - stateCount[2] = 0;
|
| - int32_t i = startI;
|
| - while (i >= 0 && m_image->Get(centerJ, i) && stateCount[1] <= maxCount) {
|
| - stateCount[1]++;
|
| - i--;
|
| - }
|
| - if (i < 0 || stateCount[1] > maxCount) {
|
| - return FXSYS_nan();
|
| - }
|
| - while (i >= 0 && !m_image->Get(centerJ, i) && stateCount[0] <= maxCount) {
|
| - stateCount[0]++;
|
| - i--;
|
| - }
|
| - if (stateCount[0] > maxCount) {
|
| - return FXSYS_nan();
|
| - }
|
| - i = startI + 1;
|
| - while (i < maxI && m_image->Get(centerJ, i) && stateCount[1] <= maxCount) {
|
| - stateCount[1]++;
|
| - i++;
|
| - }
|
| - if (i == maxI || stateCount[1] > maxCount) {
|
| - return FXSYS_nan();
|
| - }
|
| - while (i < maxI && !m_image->Get(centerJ, i) && stateCount[2] <= maxCount) {
|
| - stateCount[2]++;
|
| - i++;
|
| - }
|
| - if (stateCount[2] > maxCount) {
|
| - return FXSYS_nan();
|
| - }
|
| - int32_t stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2];
|
| - if (5 * abs(stateCountTotal - originalStateCountTotal) >=
|
| - originalStateCountTotal) {
|
| - return FXSYS_nan();
|
| - }
|
| - return FoundPatternCross(stateCount) ? CenterFromEnd(stateCount, i)
|
| - : FXSYS_nan();
|
| -}
|
| -CBC_QRAlignmentPattern* CBC_QRAlignmentPatternFinder::HandlePossibleCenter(
|
| - const CFX_Int32Array& stateCount,
|
| - int32_t i,
|
| - int32_t j) {
|
| - int32_t stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2];
|
| - FX_FLOAT centerJ = CenterFromEnd(stateCount, j);
|
| - FX_FLOAT centerI = CrossCheckVertical(i, (int32_t)centerJ, 2 * stateCount[1],
|
| - stateCountTotal);
|
| - if (!FXSYS_isnan(centerI)) {
|
| - FX_FLOAT estimatedModuleSize =
|
| - (FX_FLOAT)(stateCount[0] + stateCount[1] + stateCount[2]) / 3.0f;
|
| - int32_t max = m_possibleCenters.GetSize();
|
| - for (int32_t index = 0; index < max; index++) {
|
| - CBC_QRAlignmentPattern* center =
|
| - (CBC_QRAlignmentPattern*)(m_possibleCenters[index]);
|
| - if (center->AboutEquals(estimatedModuleSize, centerI, centerJ)) {
|
| - return new CBC_QRAlignmentPattern(centerJ, centerI,
|
| - estimatedModuleSize);
|
| - }
|
| - }
|
| - m_possibleCenters.Add(
|
| - new CBC_QRAlignmentPattern(centerJ, centerI, estimatedModuleSize));
|
| - }
|
| - return NULL;
|
| -}
|
|
|