Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
37b18768
O
Opencv
项目概览
Greenplum
/
Opencv
11 个月 前同步成功
通知
7
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
Opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
37b18768
编写于
12月 02, 2021
作者:
A
APrigarina
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
qr encoder: fix memory and unused variables issues
上级
5da69c0b
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
20 addition
and
27 deletion
+20
-27
modules/objdetect/src/qrcode_encoder.cpp
modules/objdetect/src/qrcode_encoder.cpp
+20
-27
未找到文件。
modules/objdetect/src/qrcode_encoder.cpp
浏览文件 @
37b18768
...
...
@@ -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
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录