Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv
Commits
86885c5e
Commit
86885c5e
authored
6 years ago
by
Alexander Alekhin
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #11859 from alalek:fix_videoio_msmf_win7
parents
9be3f7d4
7a244867
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
20 additions
and
1 deletion
+20
-1
cap_msmf.cpp
modules/videoio/src/cap_msmf.cpp
+20
-1
No files found.
modules/videoio/src/cap_msmf.cpp
View file @
86885c5e
...
...
@@ -83,6 +83,21 @@
#pragma comment(lib, "Mfreadwrite")
#ifdef HAVE_DXVA
#pragma comment(lib, "d3d11")
// MFCreateDXGIDeviceManager() is available since Win8 only.
// To avoid OpenCV loading failure on Win7 use dynamic detection of this symbol.
// Details: https://github.com/opencv/opencv/issues/11858
typedef
HRESULT
(
*
FN_MFCreateDXGIDeviceManager
)(
UINT
*
resetToken
,
IMFDXGIDeviceManager
**
ppDeviceManager
);
static
bool
pMFCreateDXGIDeviceManager_initialized
=
false
;
static
FN_MFCreateDXGIDeviceManager
pMFCreateDXGIDeviceManager
=
NULL
;
static
void
init_MFCreateDXGIDeviceManager
()
{
HMODULE
h
=
LoadLibraryA
(
"mfplat.dll"
);
if
(
h
)
{
pMFCreateDXGIDeviceManager
=
(
FN_MFCreateDXGIDeviceManager
)
GetProcAddress
(
h
,
"MFCreateDXGIDeviceManager"
);
}
pMFCreateDXGIDeviceManager_initialized
=
true
;
}
#endif
#if (WINVER >= 0x0602) // Available since Win 8
#pragma comment(lib, "MinCore_Downlevel")
...
...
@@ -768,6 +783,10 @@ bool CvCapture_MSMF::configureHW(bool enable)
#ifdef HAVE_DXVA
if
((
enable
&&
D3DMgr
&&
D3DDev
)
||
(
!
enable
&&
!
D3DMgr
&&
!
D3DDev
))
return
true
;
if
(
!
pMFCreateDXGIDeviceManager_initialized
)
init_MFCreateDXGIDeviceManager
();
if
(
enable
&&
!
pMFCreateDXGIDeviceManager
)
return
false
;
bool
reopen
=
isOpen
;
int
prevcam
=
camid
;
...
...
@@ -788,7 +807,7 @@ bool CvCapture_MSMF::configureHW(bool enable)
{
D3DDevMT
->
SetMultithreadProtected
(
TRUE
);
D3DDevMT
.
Release
();
if
(
SUCCEEDED
(
MFCreateDXGIDeviceManager
(
&
mgrRToken
,
&
D3DMgr
)))
if
(
SUCCEEDED
(
p
MFCreateDXGIDeviceManager
(
&
mgrRToken
,
&
D3DMgr
)))
{
if
(
SUCCEEDED
(
D3DMgr
->
ResetDevice
(
D3DDev
.
Get
(),
mgrRToken
)))
{
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment