Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenCV
opencv
提交
7d332100
O
opencv
项目概览
OpenCV
/
opencv
上一次同步 9 个月
通知
993
Star
71100
Fork
55581
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
7d332100
编写于
2月 20, 2018
作者:
A
Alexander Alekhin
提交者:
GitHub
2月 20, 2018
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #10901 from alalek:backport_imgcodecs_fixes
(2.4) backport imgcodecs fixes
上级
8f9c4d23
56072c44
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
62 addition
and
22 deletion
+62
-22
modules/highgui/src/bitstrm.cpp
modules/highgui/src/bitstrm.cpp
+14
-8
modules/highgui/src/grfmt_bmp.cpp
modules/highgui/src/grfmt_bmp.cpp
+1
-0
modules/highgui/src/grfmt_jpeg2000.cpp
modules/highgui/src/grfmt_jpeg2000.cpp
+40
-7
modules/highgui/src/grfmt_pxm.cpp
modules/highgui/src/grfmt_pxm.cpp
+1
-1
modules/highgui/src/grfmt_sunras.cpp
modules/highgui/src/grfmt_sunras.cpp
+4
-4
modules/highgui/src/precomp.hpp
modules/highgui/src/precomp.hpp
+1
-1
modules/highgui/src/utils.cpp
modules/highgui/src/utils.cpp
+1
-1
未找到文件。
modules/highgui/src/bitstrm.cpp
浏览文件 @
7d332100
...
...
@@ -42,6 +42,7 @@
#include "precomp.hpp"
#include "bitstrm.hpp"
#include "utils.hpp"
namespace
cv
{
...
...
@@ -164,7 +165,7 @@ void RBaseStream::release()
void
RBaseStream
::
setPos
(
int
pos
)
{
assert
(
isOpened
()
&&
pos
>=
0
);
CV_Assert
(
isOpened
()
&&
pos
>=
0
);
if
(
!
m_file
)
{
...
...
@@ -181,14 +182,19 @@ void RBaseStream::setPos( int pos )
int
RBaseStream
::
getPos
()
{
assert
(
isOpened
()
);
return
m_block_pos
+
(
int
)(
m_current
-
m_start
);
CV_Assert
(
isOpened
());
int
pos
=
validateToInt
((
m_current
-
m_start
)
+
m_block_pos
);
CV_Assert
(
pos
>=
m_block_pos
);
// overflow check
CV_Assert
(
pos
>=
0
);
// overflow check
return
pos
;
}
void
RBaseStream
::
skip
(
int
bytes
)
{
assert
(
bytes
>=
0
);
CV_Assert
(
bytes
>=
0
);
uchar
*
old
=
m_current
;
m_current
+=
bytes
;
CV_Assert
(
m_current
>=
old
);
// overflow check
}
///////////////////////// RLByteStream ////////////////////////////
...
...
@@ -220,7 +226,7 @@ int RLByteStream::getBytes( void* buffer, int count )
{
uchar
*
data
=
(
uchar
*
)
buffer
;
int
readed
=
0
;
assert
(
count
>=
0
);
CV_Assert
(
count
>=
0
);
while
(
count
>
0
)
{
...
...
@@ -371,7 +377,7 @@ void WBaseStream::writeBlock()
{
int
size
=
(
int
)(
m_current
-
m_start
);
assert
(
isOpened
()
);
CV_Assert
(
isOpened
()
);
if
(
size
==
0
)
return
;
...
...
@@ -442,7 +448,7 @@ void WBaseStream::release()
int
WBaseStream
::
getPos
()
{
assert
(
isOpened
()
);
CV_Assert
(
isOpened
()
);
return
m_block_pos
+
(
int
)(
m_current
-
m_start
);
}
...
...
@@ -465,7 +471,7 @@ void WLByteStream::putBytes( const void* buffer, int count )
{
uchar
*
data
=
(
uchar
*
)
buffer
;
assert
(
data
&&
m_current
&&
count
>=
0
);
CV_Assert
(
data
&&
m_current
&&
count
>=
0
);
while
(
count
)
{
...
...
modules/highgui/src/grfmt_bmp.cpp
浏览文件 @
7d332100
...
...
@@ -92,6 +92,7 @@ bool BmpDecoder::readHeader()
m_offset
=
m_strm
.
getDWord
();
int
size
=
m_strm
.
getDWord
();
CV_Assert
(
size
>
0
);
// overflow, 2Gb limit
if
(
size
>=
36
)
{
...
...
modules/highgui/src/grfmt_jpeg2000.cpp
浏览文件 @
7d332100
...
...
@@ -77,7 +77,8 @@ static JasperInitializer initialize_jasper;
Jpeg2KDecoder
::
Jpeg2KDecoder
()
{
m_signature
=
'\0'
+
string
()
+
'\0'
+
string
()
+
'\0'
+
string
(
"
\x0c
jP
\r\n\x87\n
"
);
static
const
unsigned
char
signature_
[
12
]
=
{
0
,
0
,
0
,
0x0c
,
'j'
,
'P'
,
' '
,
' '
,
13
,
10
,
0x87
,
10
};
m_signature
=
string
((
const
char
*
)
signature_
,
(
const
char
*
)
signature_
+
sizeof
(
signature_
));
m_stream
=
0
;
m_image
=
0
;
}
...
...
@@ -121,6 +122,8 @@ bool Jpeg2KDecoder::readHeader()
jas_image_t
*
image
=
jas_image_decode
(
stream
,
-
1
,
0
);
m_image
=
image
;
if
(
image
)
{
CV_Assert
(
0
==
(
jas_image_tlx
(
image
))
&&
"not supported"
);
CV_Assert
(
0
==
(
jas_image_tly
(
image
))
&&
"not supported"
);
m_width
=
jas_image_width
(
image
);
m_height
=
jas_image_height
(
image
);
...
...
@@ -130,14 +133,31 @@ bool Jpeg2KDecoder::readHeader()
for
(
int
i
=
0
;
i
<
numcmpts
;
i
++
)
{
int
depth_i
=
jas_image_cmptprec
(
image
,
i
);
CV_Assert
(
depth
==
0
||
depth
==
depth_i
);
// component data type mismatch
depth
=
MAX
(
depth
,
depth_i
);
if
(
jas_image_cmpttype
(
image
,
i
)
>
2
)
continue
;
int
sgnd
=
jas_image_cmptsgnd
(
image
,
i
);
int
xstart
=
jas_image_cmpttlx
(
image
,
i
);
int
xend
=
jas_image_cmptbrx
(
image
,
i
);
int
xstep
=
jas_image_cmpthstep
(
image
,
i
);
int
ystart
=
jas_image_cmpttly
(
image
,
i
);
int
yend
=
jas_image_cmptbry
(
image
,
i
);
int
ystep
=
jas_image_cmptvstep
(
image
,
i
);
CV_Assert
(
sgnd
==
0
&&
"not supported"
);
CV_Assert
(
xstart
==
0
&&
"not supported"
);
CV_Assert
(
ystart
==
0
&&
"not supported"
);
CV_Assert
(
xstep
==
1
&&
"not supported"
);
CV_Assert
(
ystep
==
1
&&
"not supported"
);
CV_Assert
(
xend
==
m_width
);
CV_Assert
(
yend
==
m_height
);
cntcmpts
++
;
}
if
(
cntcmpts
)
{
CV_Assert
(
depth
==
8
||
depth
==
16
);
CV_Assert
(
cntcmpts
==
1
||
cntcmpts
==
3
);
m_type
=
CV_MAKETYPE
(
depth
<=
8
?
CV_8U
:
CV_16U
,
cntcmpts
>
1
?
3
:
1
);
result
=
true
;
}
...
...
@@ -150,9 +170,15 @@ bool Jpeg2KDecoder::readHeader()
return
result
;
}
static
void
Jpeg2KDecoder_close
(
Jpeg2KDecoder
*
ptr
)
{
ptr
->
close
();
}
template
<
>
void
Ptr
<
Jpeg2KDecoder
>::
delete_obj
()
{
Jpeg2KDecoder_close
(
obj
);
}
bool
Jpeg2KDecoder
::
readData
(
Mat
&
img
)
{
Ptr
<
Jpeg2KDecoder
>
close_this
(
this
);
// auto cleanup: Jpeg2KDecoder_close
bool
result
=
false
;
int
color
=
img
.
channels
()
>
1
;
uchar
*
data
=
img
.
data
;
...
...
@@ -204,11 +230,16 @@ bool Jpeg2KDecoder::readData( Mat& img )
result
=
true
;
}
else
fprintf
(
stderr
,
"JPEG 2000 LOADER ERROR: cannot convert colorspace
\n
"
);
{
jas_cmprof_destroy
(
clrprof
);
CV_Error
(
CV_StsError
,
"JPEG 2000 LOADER ERROR: cannot convert colorspace"
);
}
jas_cmprof_destroy
(
clrprof
);
}
else
fprintf
(
stderr
,
"JPEG 2000 LOADER ERROR: unable to create colorspace
\n
"
);
{
CV_Error
(
CV_StsError
,
"JPEG 2000 LOADER ERROR: unable to create colorspace"
);
}
}
else
result
=
true
;
...
...
@@ -257,8 +288,8 @@ bool Jpeg2KDecoder::readData( Mat& img )
result
=
readComponent16u
(
((
unsigned
short
*
)
data
)
+
i
,
buffer
,
validateToInt
(
step
/
2
),
cmptlut
[
i
],
maxval
,
offset
,
ncmpts
);
if
(
!
result
)
{
i
=
ncmpts
;
result
=
false
;
jas_matrix_destroy
(
buffer
)
;
CV_Error
(
CV_StsError
,
"JPEG2000 LOADER ERROR: failed to read component"
)
;
}
}
jas_matrix_destroy
(
buffer
);
...
...
@@ -267,10 +298,12 @@ bool Jpeg2KDecoder::readData( Mat& img )
}
}
else
fprintf
(
stderr
,
"JPEG2000 LOADER ERROR: colorspace conversion failed
\n
"
);
{
CV_Error
(
CV_StsError
,
"JPEG2000 LOADER ERROR: colorspace conversion failed"
);
}
}
close
(
);
CV_Assert
(
result
==
true
);
#ifndef WIN32
if
(
!
clr
.
empty
())
...
...
modules/highgui/src/grfmt_pxm.cpp
浏览文件 @
7d332100
...
...
@@ -331,7 +331,7 @@ bool PxMDecoder::readData( Mat& img )
}
}
else
memcpy
(
data
,
src
,
m_width
*
(
bit_depth
/
8
)
);
memcpy
(
data
,
src
,
img
.
elemSize1
()
*
m_width
);
}
else
{
...
...
modules/highgui/src/grfmt_sunras.cpp
浏览文件 @
7d332100
...
...
@@ -120,7 +120,7 @@ bool SunRasterDecoder::readHeader()
m_type
=
IsColorPalette
(
m_palette
,
m_bpp
)
?
CV_8UC3
:
CV_8UC1
;
m_offset
=
m_strm
.
getPos
();
assert
(
m_offset
==
32
+
m_maplength
);
CV_Assert
(
m_offset
==
32
+
m_maplength
);
result
=
true
;
}
}
...
...
@@ -133,7 +133,7 @@ bool SunRasterDecoder::readHeader()
m_offset
=
m_strm
.
getPos
();
assert
(
m_offset
==
32
+
m_maplength
);
CV_Assert
(
m_offset
==
32
+
m_maplength
);
result
=
true
;
}
}
...
...
@@ -226,7 +226,7 @@ bool SunRasterDecoder::readData( Mat& img )
code
=
m_strm
.
getByte
();
if
(
len
>
line_end
-
tsrc
)
{
assert
(
0
);
CV_Error
(
CV_StsInternal
,
""
);
goto
bad_decoding_1bpp
;
}
...
...
@@ -367,7 +367,7 @@ bad_decoding_end:
result
=
true
;
break
;
default:
assert
(
0
);
CV_Error
(
CV_StsInternal
,
""
);
}
}
catch
(
...
)
...
...
modules/highgui/src/precomp.hpp
浏览文件 @
7d332100
...
...
@@ -54,7 +54,7 @@
#include <string.h>
#include <limits.h>
#include <ctype.h>
#include <assert.h>
#include <assert.h>
// FIX IT: remove this
#if defined WIN32 || defined WINCE
#if !defined _WIN32_WINNT
...
...
modules/highgui/src/utils.cpp
浏览文件 @
7d332100
...
...
@@ -670,7 +670,7 @@ cvConvertImage( const CvArr* srcarr, CvArr* dstarr, int flags )
icvCvt_BGR2Gray_8u_C3C1R
(
s
,
s_step
,
d
,
d_step
,
size
,
swap_rb
);
break
;
case
33
:
assert
(
swap_rb
);
CV_Assert
(
swap_rb
);
icvCvt_RGB2BGR_8u_C3R
(
s
,
s_step
,
d
,
d_step
,
size
);
break
;
case
41
:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录