mirror of
https://github.com/opencv/opencv.git
synced 2025-06-07 09:25:45 +08:00
qr encoder: fix memory and unused variables issues
This commit is contained in:
parent
5da69c0b9a
commit
37b1876807
@ -308,18 +308,7 @@ int QRCodeEncoderImpl::versionAuto(const std::string& input_str)
|
||||
for(size_t i = 0; i < possible_version.size(); i++)
|
||||
{
|
||||
int version_range_index = possible_version[i];
|
||||
if (version_range_index == 1)
|
||||
{
|
||||
tmp_version = 1;
|
||||
}
|
||||
else if (version_range_index == 2)
|
||||
{
|
||||
tmp_version = 10;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp_version = 27;
|
||||
}
|
||||
|
||||
encodeAuto(input_str, payload_tmp);
|
||||
tmp_version = findVersionCapacity((int)payload_tmp.size(), ecc_level,
|
||||
version_range[version_range_index], version_range[version_range_index + 1]);
|
||||
@ -351,10 +340,11 @@ void QRCodeEncoderImpl::generateQR(const std::string &input)
|
||||
int segment_begin = i * segment_len;
|
||||
int segemnt_end = min((i + 1) * segment_len, (int) input.length()) - 1;
|
||||
std::string input_info = input.substr(segment_begin, segemnt_end - segment_begin + 1);
|
||||
int v = versionAuto(input_info);
|
||||
int detected_version = versionAuto(input_info);
|
||||
CV_Assert(detected_version != -1);
|
||||
if (version_level == 0)
|
||||
version_level = v;
|
||||
else if (version_level < v)
|
||||
version_level = detected_version;
|
||||
else if (version_level < detected_version)
|
||||
CV_Error(Error::StsBadArg, "The given version is not suitable for the given input string length ");
|
||||
|
||||
payload.clear();
|
||||
@ -752,12 +742,14 @@ void QRCodeEncoderImpl::eccGenerate(vector<vector<uint8_t> > &data_blocks, vecto
|
||||
void QRCodeEncoderImpl::rearrangeBlocks(const vector<vector<uint8_t> > &data_blocks, const vector<vector<uint8_t> > &ecc_blocks)
|
||||
{
|
||||
rearranged_data.clear();
|
||||
rearranged_data.reserve(MAX_PAYLOAD_LEN);
|
||||
int blocks = cur_ecc_params->num_blocks_in_G2 + cur_ecc_params->num_blocks_in_G1;
|
||||
int col_border = max(cur_ecc_params->data_codewords_in_G2, cur_ecc_params->data_codewords_in_G1);
|
||||
int total_codeword_num = version_info->total_codewords;
|
||||
int is_not_equal = cur_ecc_params->data_codewords_in_G2 - cur_ecc_params->data_codewords_in_G1;
|
||||
for (int i = 0; i < total_codeword_num; i++)
|
||||
int add_steps = cur_ecc_params->data_codewords_in_G2 > cur_ecc_params->data_codewords_in_G1 ?
|
||||
(cur_ecc_params->data_codewords_in_G2 - cur_ecc_params->data_codewords_in_G1) * cur_ecc_params->num_blocks_in_G1 : 0;
|
||||
rearranged_data.reserve(total_codeword_num + add_steps);
|
||||
for (int i = 0; i < total_codeword_num + add_steps; i++)
|
||||
{
|
||||
int cur_col = i / blocks;
|
||||
int cur_row = i % blocks;
|
||||
@ -783,16 +775,6 @@ void QRCodeEncoderImpl::rearrangeBlocks(const vector<vector<uint8_t> > &data_blo
|
||||
}
|
||||
rearranged_data.push_back(tmp);
|
||||
}
|
||||
const int remainder_len []= {0,
|
||||
0, 7, 7, 7, 7, 7, 0, 0, 0, 0,
|
||||
0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
|
||||
4, 4, 4, 4, 4, 4, 4, 3, 3, 3,
|
||||
3, 3, 3, 3, 0, 0, 0, 0, 0, 0};
|
||||
int cur_remainder_len = remainder_len[version_level];
|
||||
if (cur_remainder_len != 0)
|
||||
{
|
||||
rearranged_data.push_back(0);
|
||||
}
|
||||
}
|
||||
|
||||
void QRCodeEncoderImpl::findAutoMaskType()
|
||||
@ -1078,6 +1060,8 @@ void QRCodeEncoderImpl::writeData()
|
||||
int dir = -1;
|
||||
int count = 0;
|
||||
int codeword_value = rearranged_data[0];
|
||||
const int limit_bits = (int)rearranged_data.size() * 8;
|
||||
bool limit_reached = false;
|
||||
while (x > 0)
|
||||
{
|
||||
if (x == 6)
|
||||
@ -1093,11 +1077,20 @@ void QRCodeEncoderImpl::writeData()
|
||||
continue;
|
||||
}
|
||||
count++;
|
||||
if (count == limit_bits)
|
||||
{
|
||||
limit_reached = true;
|
||||
break;
|
||||
}
|
||||
if (count % 8 == 0)
|
||||
{
|
||||
codeword_value = rearranged_data[count / 8];
|
||||
}
|
||||
}
|
||||
if (limit_reached)
|
||||
{
|
||||
break;
|
||||
}
|
||||
y += dir;
|
||||
if (y < 0 || y >= version_size)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user