Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
74e997f1
O
Opencv
项目概览
Greenplum
/
Opencv
大约 1 年 前同步成功
通知
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,发现更多精彩内容 >>
提交
74e997f1
编写于
8月 11, 2016
作者:
A
Alexander Alekhin
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #7062 from kurenai:return_if_camera_disconnected
上级
cf30c582
c61f4e88
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
35 addition
and
1 deletion
+35
-1
modules/videoio/src/cap_dshow.cpp
modules/videoio/src/cap_dshow.cpp
+35
-1
未找到文件。
modules/videoio/src/cap_dshow.cpp
浏览文件 @
74e997f1
...
...
@@ -204,6 +204,7 @@ DEFINE_GUID(IID_ICreateDevEnum,0x29840822,0x5b84,0x11d0,0xbd,0x3b,0x00,0xa0,0xc9
DEFINE_GUID
(
IID_IGraphBuilder
,
0x56a868a9
,
0x0ad4
,
0x11ce
,
0xb0
,
0x3a
,
0x00
,
0x20
,
0xaf
,
0x0b
,
0xa7
,
0x70
);
DEFINE_GUID
(
IID_IMPEG2PIDMap
,
0xafb6c2a1
,
0x2c41
,
0x11d3
,
0x8a
,
0x60
,
0x00
,
0x00
,
0xf8
,
0x1e
,
0x0e
,
0x4a
);
DEFINE_GUID
(
IID_IMediaControl
,
0x56a868b1
,
0x0ad4
,
0x11ce
,
0xb0
,
0x3a
,
0x00
,
0x20
,
0xaf
,
0x0b
,
0xa7
,
0x70
);
DEFINE_GUID
(
IID_IMediaEventEx
,
0x56a868c0
,
0x0ad4
,
0x11ce
,
0xb0
,
0x3a
,
0x00
,
0x20
,
0xaf
,
0x0b
,
0xa7
,
0x70
);
DEFINE_GUID
(
IID_IMediaFilter
,
0x56a86899
,
0x0ad4
,
0x11ce
,
0xb0
,
0x3a
,
0x00
,
0x20
,
0xaf
,
0x0b
,
0xa7
,
0x70
);
DEFINE_GUID
(
IID_ISampleGrabber
,
0x6b652fff
,
0x11fe
,
0x4fce
,
0x92
,
0xad
,
0x02
,
0x66
,
0xb5
,
0xd7
,
0xc7
,
0x8f
);
DEFINE_GUID
(
LOOK_UPSTREAM_ONLY
,
0xac798be0
,
0x98e3
,
0x11d1
,
0xb3
,
0xf1
,
0x00
,
0xaa
,
0x00
,
0x37
,
0x61
,
0xc5
);
...
...
@@ -573,6 +574,8 @@ class videoInput{
int
getVideoPropertyFromCV
(
int
cv_property
);
int
getCameraPropertyFromCV
(
int
cv_property
);
bool
isDeviceDisconnected
(
int
deviceID
);
private:
void
setPhyCon
(
int
deviceID
,
int
conn
);
void
setAttemptCaptureSize
(
int
deviceID
,
int
w
,
int
h
,
GUID
mediaType
=
MEDIASUBTYPE_RGB24
);
...
...
@@ -2309,6 +2312,27 @@ int videoInput::getCameraPropertyFromCV(int cv_property){
return
-
1
;
}
bool
videoInput
::
isDeviceDisconnected
(
int
deviceNumber
)
{
if
(
!
isDeviceSetup
(
deviceNumber
))
return
true
;
long
evCode
;
LONG_PTR
param1
,
param2
;
bool
disconnected
=
false
;
while
(
S_OK
==
VDList
[
deviceNumber
]
->
pMediaEvent
->
GetEvent
(
&
evCode
,
&
param1
,
&
param2
,
0
))
{
DebugPrintOut
(
"Event: Code: %#04x Params: %d, %d
\n
"
,
evCode
,
param1
,
param2
);
VDList
[
deviceNumber
]
->
pMediaEvent
->
FreeEventParams
(
evCode
,
param1
,
param2
);
if
(
evCode
==
EC_DEVICE_LOST
)
{
DebugPrintOut
(
"ERROR: Device disconnected
\n
"
);
disconnected
=
true
;
}
}
return
disconnected
;
}
void
videoInput
::
getCameraPropertyAsString
(
int
prop
,
char
*
propertyAsString
){
char
tmpStr
[
16
];
...
...
@@ -2511,6 +2535,16 @@ int videoInput::start(int deviceID, videoDevice *VD){
return
hr
;
}
//MEDIA EVENT//
//Used to obtain event when capture device is disconnected
hr
=
VD
->
pGraph
->
QueryInterface
(
IID_IMediaEventEx
,
(
void
**
)
&
VD
->
pMediaEvent
);
if
(
FAILED
(
hr
))
{
DebugPrintOut
(
"ERROR - Could not create media event object
\n
"
);
stopDevice
(
deviceID
);
return
hr
;
}
//SET THE FILTERGRAPH//
hr
=
VD
->
pCaptureGraph
->
SetFiltergraph
(
VD
->
pGraph
);
if
(
FAILED
(
hr
))
...
...
@@ -3309,7 +3343,7 @@ bool VideoCapture_DShow::setProperty(int propIdx, double propVal)
bool
VideoCapture_DShow
::
grabFrame
()
{
return
true
;
return
!
g_VI
.
isDeviceDisconnected
(
m_index
)
;
}
bool
VideoCapture_DShow
::
retrieveFrame
(
int
,
OutputArray
frame
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录