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
787815fd
Commit
787815fd
authored
May 05, 2014
by
Alexander Alekhin
Committed by
OpenCV Buildbot
May 05, 2014
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #2619 from GregoryMorse:patch-3
parents
87210690
aa3c36f5
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
96 additions
and
88 deletions
+96
-88
cap_msmf.cpp
modules/highgui/src/cap_msmf.cpp
+25
-25
cap_msmf.hpp
modules/highgui/src/cap_msmf.hpp
+42
-41
ppltasks_winrt.h
modules/highgui/src/ppltasks_winrt.h
+29
-22
No files found.
modules/highgui/src/cap_msmf.cpp
View file @
787815fd
...
...
@@ -1075,12 +1075,12 @@ HRESULT ImageGrabberWinRT::initImageGrabber(MAKE_WRL_REF(_MediaCapture) pSource,
MAKE_WRL_OBJ
(
_VideoDeviceController
)
pDevCont
;
WRL_PROP_GET
(
pSource
,
VideoDeviceController
,
pDevCont
,
hr
)
if
(
FAILED
(
hr
))
return
hr
;
GET_WRL_
MEDIA_DEVICE_CONTROLLER
(
pDevCont
,
pMed
DevCont
,
hr
)
GET_WRL_
OBJ_FROM_OBJ
(
_MediaDeviceController
,
pMedDevCont
,
p
DevCont
,
hr
)
if
(
FAILED
(
hr
))
return
hr
;
MAKE_WRL_OBJ
(
_MediaEncodingProperties
)
pMedEncProps
;
WRL_METHOD
(
pMedDevCont
,
GetMediaStreamProperties
,
pMedEncProps
,
hr
,
_VideoPreview
)
WRL_METHOD
(
pMedDevCont
,
GetMediaStreamProperties
,
pMedEncProps
,
hr
,
WRL_ENUM_GET
(
_MediaStreamType
,
MediaStreamType
,
VideoPreview
)
)
if
(
FAILED
(
hr
))
return
hr
;
GET_WRL_
VIDEO_ENCODING_PROPERTIES
(
pMedEncProps
,
pVid
Props
,
hr
);
GET_WRL_
OBJ_FROM_OBJ
(
_VideoEncodingProperties
,
pVidProps
,
pMedEnc
Props
,
hr
);
if
(
FAILED
(
hr
))
return
hr
;
ComPtr
<
IMFMediaType
>
pType
=
NULL
;
hr
=
MediaSink
::
ConvertPropertiesToMediaType
(
DEREF_AS_NATIVE_WRL_OBJ
(
ABI
::
Windows
::
Media
::
MediaProperties
::
IMediaEncodingProperties
,
pMedEncProps
),
&
pType
);
...
...
@@ -1108,7 +1108,7 @@ HRESULT ImageGrabberWinRT::stopGrabbing(MAKE_WRL_REF(_AsyncAction)* action)
{
HRESULT
hr
=
S_OK
;
if
(
ig_pMedCapSource
!=
nullptr
)
{
GET_WRL_
VIDEO_PREVIEW
(
DEREF_AGILE_WRL_OBJ
(
ig_pMedCapSource
),
imedPrevCap
,
hr
);
GET_WRL_
OBJ_FROM_REF
(
_MediaCaptureVideoPreview
,
imedPrevCap
,
DEREF_AGILE_WRL_OBJ
(
ig_pMedCapSource
),
hr
)
if
(
FAILED
(
hr
))
return
hr
;
MAKE_WRL_REF
(
_AsyncAction
)
pAction
;
WRL_METHOD_BASE
(
imedPrevCap
,
StopPreviewAsync
,
pAction
,
hr
)
...
...
@@ -1128,17 +1128,17 @@ HRESULT ImageGrabberWinRT::stopGrabbing(MAKE_WRL_REF(_AsyncAction)* action)
HRESULT
ImageGrabberWinRT
::
startGrabbing
(
MAKE_WRL_REF
(
_AsyncAction
)
*
action
)
{
HRESULT
hr
=
S_OK
;
GET_WRL_
VIDEO_PREVIEW
(
DEREF_AGILE_WRL_OBJ
(
ig_pMedCapSource
),
imedPrevCap
,
hr
);
GET_WRL_
OBJ_FROM_REF
(
_MediaCaptureVideoPreview
,
imedPrevCap
,
DEREF_AGILE_WRL_OBJ
(
ig_pMedCapSource
),
hr
)
if
(
FAILED
(
hr
))
return
hr
;
ACTIVATE_OBJ
(
RuntimeClass_Windows_Foundation_Collections_PropertySet
,
MAKE_WRL_OBJ
(
_PropertySet
)
,
pSet
,
hr
)
ACTIVATE_OBJ
(
RuntimeClass_Windows_Foundation_Collections_PropertySet
,
_PropertySet
,
pSet
,
hr
)
if
(
FAILED
(
hr
))
return
hr
;
GET_WRL_
MAP
(
pSet
,
spSetting
,
hr
)
GET_WRL_
OBJ_FROM_OBJ
(
_Map
,
spSetting
,
pSet
,
hr
)
if
(
FAILED
(
hr
))
return
hr
;
ACTIVATE_STATIC_OBJ
(
RuntimeClass_Windows_Foundation_PropertyValue
,
MAKE_WRL_OBJ
(
_PropertyValueStatics
),
spPropVal
,
hr
)
if
(
FAILED
(
hr
))
return
hr
;
_ObjectObj
pVal
;
boolean
bReplaced
;
WRL_METHOD
(
spPropVal
,
CreateUInt32
,
pVal
,
hr
,
(
unsigned
int
)
_VideoPreview
)
WRL_METHOD
(
spPropVal
,
CreateUInt32
,
pVal
,
hr
,
(
unsigned
int
)
WRL_ENUM_GET
(
_MediaStreamType
,
MediaStreamType
,
VideoPreview
)
)
if
(
FAILED
(
hr
))
return
hr
;
WRL_METHOD
(
spSetting
,
Insert
,
bReplaced
,
hr
,
DEREF_WRL_OBJ
(
_StringReference
(
MF_PROP_VIDTYPE
)),
DEREF_WRL_OBJ
(
pVal
))
if
(
FAILED
(
hr
))
return
hr
;
...
...
@@ -1147,14 +1147,14 @@ HRESULT ImageGrabberWinRT::startGrabbing(MAKE_WRL_REF(_AsyncAction)* action)
MAKE_WRL_OBJ
(
_VideoDeviceController
)
pDevCont
;
WRL_PROP_GET
(
ig_pMedCapSource
,
VideoDeviceController
,
pDevCont
,
hr
)
if
(
FAILED
(
hr
))
return
hr
;
GET_WRL_
MEDIA_DEVICE_CONTROLLER
(
pDevCont
,
pMed
DevCont
,
hr
)
GET_WRL_
OBJ_FROM_OBJ
(
_MediaDeviceController
,
pMedDevCont
,
p
DevCont
,
hr
)
if
(
FAILED
(
hr
))
return
hr
;
MAKE_WRL_OBJ
(
_MediaEncodingProperties
)
pMedEncProps
;
WRL_METHOD
(
pMedDevCont
,
GetMediaStreamProperties
,
pMedEncProps
,
hr
,
_VideoPreview
)
WRL_METHOD
(
pMedDevCont
,
GetMediaStreamProperties
,
pMedEncProps
,
hr
,
WRL_ENUM_GET
(
_MediaStreamType
,
MediaStreamType
,
VideoPreview
)
)
if
(
FAILED
(
hr
))
return
hr
;
GET_WRL_
VIDEO_ENCODING_PROPERTIES
(
pMedEncProps
,
pVid
Props
,
hr
);
GET_WRL_
OBJ_FROM_OBJ
(
_VideoEncodingProperties
,
pVidProps
,
pMedEnc
Props
,
hr
);
if
(
FAILED
(
hr
))
return
hr
;
ACTIVATE_OBJ
(
RuntimeClass_Windows_Media_MediaProperties_MediaEncodingProfile
,
MAKE_WRL_OBJ
(
_MediaEncodingProfile
)
,
pEncProps
,
hr
)
ACTIVATE_OBJ
(
RuntimeClass_Windows_Media_MediaProperties_MediaEncodingProfile
,
_MediaEncodingProfile
,
pEncProps
,
hr
)
if
(
FAILED
(
hr
))
return
hr
;
WRL_PROP_PUT
(
pEncProps
,
Video
,
DEREF_WRL_OBJ
(
pVidProps
),
hr
)
if
(
FAILED
(
hr
))
return
hr
;
...
...
@@ -1718,7 +1718,7 @@ bool Media_Foundation::buildListOfDevices()
HRESULT
hr
=
S_OK
;
#ifdef HAVE_WINRT
videoDevices
*
vDs
=
&
videoDevices
::
getInstance
();
hr
=
vDs
->
initDevices
(
_VideoCapture
);
hr
=
vDs
->
initDevices
(
WRL_ENUM_GET
(
_DeviceClass
,
DeviceClass
,
VideoCapture
)
);
#else
ComPtr
<
IMFAttributes
>
pAttributes
=
NULL
;
CoInitialize
(
NULL
);
...
...
@@ -1907,9 +1907,9 @@ long videoDevice::resetDevice(IMFActivate *pActivate)
#ifdef HAVE_WINRT
if
(
pDevice
)
{
ACTIVATE_OBJ
(
RuntimeClass_Windows_Media_Capture_MediaCapture
,
MAKE_WRL_OBJ
(
_MediaCapture
)
,
pIMedCap
,
hr
)
ACTIVATE_OBJ
(
RuntimeClass_Windows_Media_Capture_MediaCapture
,
_MediaCapture
,
pIMedCap
,
hr
)
if
(
FAILED
(
hr
))
return
hr
;
ACTIVATE_OBJ
(
RuntimeClass_Windows_Media_Capture_MediaCaptureInitializationSettings
,
MAKE_WRL_OBJ
(
_MediaCaptureInitializationSettings
)
,
pCapInitSet
,
hr
)
ACTIVATE_OBJ
(
RuntimeClass_Windows_Media_Capture_MediaCaptureInitializationSettings
,
_MediaCaptureInitializationSettings
,
pCapInitSet
,
hr
)
if
(
FAILED
(
hr
))
return
hr
;
_StringObj
str
;
WRL_PROP_GET
(
pDevice
,
Name
,
*
REF_WRL_OBJ
(
str
),
hr
)
...
...
@@ -1922,7 +1922,7 @@ long videoDevice::resetDevice(IMFActivate *pActivate)
if
(
FAILED
(
hr
))
return
hr
;
WRL_PROP_PUT
(
pCapInitSet
,
VideoDeviceId
,
DEREF_WRL_OBJ
(
str
),
hr
)
if
(
FAILED
(
hr
))
return
hr
;
WRL_PROP_PUT
(
pCapInitSet
,
StreamingCaptureMode
,
_Video
,
hr
)
WRL_PROP_PUT
(
pCapInitSet
,
StreamingCaptureMode
,
WRL_ENUM_GET
(
_StreamingCaptureMode
,
StreamingCaptureMode
,
Video
)
,
hr
)
if
(
FAILED
(
hr
))
return
hr
;
MAKE_WRL_REF
(
_AsyncAction
)
pAction
;
WRL_METHOD
(
DEREF_WRL_OBJ
(
pIMedCap
),
_InitializeWithSettingsAsync
,
pAction
,
hr
,
DEREF_WRL_OBJ
(
pCapInitSet
))
...
...
@@ -2100,17 +2100,17 @@ long videoDevice::initDevice()
if
(
pOldAction
)
DO_ACTION_SYNCHRONOUSLY
(
hr
,
pOldAction
,
GET_CURRENT_CONTEXT
);
DEFINE_TASK
<
HRESULT
>
pTask
;
MAKE_WRL_OBJ
(
_IDeviceInformation
)
pDevInfo
;
hr
=
checkDevice
(
_VideoCapture
,
&
pTask
,
REF_WRL_OBJ
(
pDevInfo
));
hr
=
checkDevice
(
WRL_ENUM_GET
(
_DeviceClass
,
DeviceClass
,
VideoCapture
)
,
&
pTask
,
REF_WRL_OBJ
(
pDevInfo
));
if
(
SUCCEEDED
(
hr
))
hr
=
pTask
.
get
();
if
(
SUCCEEDED
(
hr
))
{
MAKE_WRL_REF
(
_AsyncAction
)
pAction
;
BEGIN_CALL_IN_CONTEXT
(
hr
,
context
,
pDevInfo
,
&
pAction
,
context
,
this
)
HRESULT
hr
;
ACTIVATE_OBJ
(
RuntimeClass_Windows_Media_Capture_MediaCapture
,
MAKE_WRL_OBJ
(
_MediaCapture
)
,
pIMedCap
,
hr
)
ACTIVATE_OBJ
(
RuntimeClass_Windows_Media_Capture_MediaCapture
,
_MediaCapture
,
pIMedCap
,
hr
)
if
(
SUCCEEDED
(
hr
))
{
RELEASE_WRL
(
vd_pMedCap
);
vd_pMedCap
=
PREPARE_TRANSFER_WRL_OBJ
(
pIMedCap
);
ACTIVATE_OBJ
(
RuntimeClass_Windows_Media_Capture_MediaCaptureInitializationSettings
,
MAKE_WRL_OBJ
(
_MediaCaptureInitializationSettings
)
,
pCapInitSet
,
hr
)
ACTIVATE_OBJ
(
RuntimeClass_Windows_Media_Capture_MediaCaptureInitializationSettings
,
_MediaCaptureInitializationSettings
,
pCapInitSet
,
hr
)
_StringObj
str
;
if
(
SUCCEEDED
(
hr
))
{
WRL_PROP_GET
(
pDevInfo
,
Id
,
*
REF_WRL_OBJ
(
str
),
hr
)
...
...
@@ -2119,7 +2119,7 @@ long videoDevice::initDevice()
}
}
if
(
SUCCEEDED
(
hr
))
WRL_PROP_PUT
(
pCapInitSet
,
StreamingCaptureMode
,
_Video
,
hr
)
WRL_PROP_PUT
(
pCapInitSet
,
StreamingCaptureMode
,
WRL_ENUM_GET
(
_StreamingCaptureMode
,
StreamingCaptureMode
,
Video
)
,
hr
)
if
(
SUCCEEDED
(
hr
))
{
vd_pMedCapFail
=
create_medcapfailedhandler
([
this
,
context
](){
HRESULT
hr
;
...
...
@@ -2332,15 +2332,15 @@ long videoDevice::setDeviceFormat(MAKE_WRL_REF(_MediaCapture) pSource, unsigned
MAKE_WRL_OBJ
(
_VideoDeviceController
)
pDevCont
;
WRL_PROP_GET
(
pSource
,
VideoDeviceController
,
pDevCont
,
hr
)
if
(
FAILED
(
hr
))
return
hr
;
GET_WRL_
MEDIA_DEVICE_CONTROLLER
(
pDevCont
,
pMed
DevCont
,
hr
)
GET_WRL_
OBJ_FROM_OBJ
(
_MediaDeviceController
,
pMedDevCont
,
p
DevCont
,
hr
)
if
(
FAILED
(
hr
))
return
hr
;
MAKE_WRL_OBJ
(
_VectorView
<
MAKE_WRL_REF
(
_MediaEncodingProperties
)
>
)
pVector
;
WRL_METHOD
(
pMedDevCont
,
GetAvailableMediaStreamProperties
,
pVector
,
hr
,
_VideoPreview
)
WRL_METHOD
(
pMedDevCont
,
GetAvailableMediaStreamProperties
,
pVector
,
hr
,
WRL_ENUM_GET
(
_MediaStreamType
,
MediaStreamType
,
VideoPreview
)
)
if
(
FAILED
(
hr
))
return
hr
;
MAKE_WRL_OBJ
(
_MediaEncodingProperties
)
pMedEncProps
;
WRL_METHOD
(
pVector
,
GetAt
,
pMedEncProps
,
hr
,
dwFormatIndex
)
if
(
FAILED
(
hr
))
return
hr
;
WRL_METHOD
(
pMedDevCont
,
SetMediaStreamPropertiesAsync
,
*
pAction
,
hr
,
_VideoPreview
,
DEREF_WRL_OBJ
(
pMedEncProps
))
WRL_METHOD
(
pMedDevCont
,
SetMediaStreamPropertiesAsync
,
*
pAction
,
hr
,
WRL_ENUM_GET
(
_MediaStreamType
,
MediaStreamType
,
VideoPreview
)
,
DEREF_WRL_OBJ
(
pMedEncProps
))
return
hr
;
}
#endif
...
...
@@ -2542,10 +2542,10 @@ HRESULT videoDevice::enumerateCaptureFormats(MAKE_WRL_REF(_MediaCapture) pSource
MAKE_WRL_OBJ
(
_VideoDeviceController
)
pDevCont
;
WRL_PROP_GET
(
pSource
,
VideoDeviceController
,
pDevCont
,
hr
)
if
(
FAILED
(
hr
))
return
hr
;
GET_WRL_
MEDIA_DEVICE_CONTROLLER
(
pDevCont
,
pMed
DevCont
,
hr
)
GET_WRL_
OBJ_FROM_OBJ
(
_MediaDeviceController
,
pMedDevCont
,
p
DevCont
,
hr
)
if
(
FAILED
(
hr
))
return
hr
;
MAKE_WRL_OBJ
(
_VectorView
<
MAKE_WRL_REF
(
_MediaEncodingProperties
)
>
)
pVector
;
WRL_METHOD
(
pMedDevCont
,
GetAvailableMediaStreamProperties
,
pVector
,
hr
,
_VideoPreview
)
WRL_METHOD
(
pMedDevCont
,
GetAvailableMediaStreamProperties
,
pVector
,
hr
,
WRL_ENUM_GET
(
_MediaStreamType
,
MediaStreamType
,
VideoPreview
)
)
if
(
FAILED
(
hr
))
return
hr
;
UINT32
count
;
WRL_PROP_GET
(
pVector
,
Size
,
count
,
hr
)
...
...
modules/highgui/src/cap_msmf.hpp
View file @
787815fd
...
...
@@ -186,20 +186,23 @@ MAKE_MAP(MFSTREAMSINK_MARKER_TYPE) StreamSinkMarkerTypeMap(StreamSinkMarkerTypeP
#define _StringReference ref new Platform::String
#define _DeviceInformationCollection Windows::Devices::Enumeration::DeviceInformationCollection
#define _MediaCapture Windows::Media::Capture::MediaCapture
#define _MediaCaptureVideoPreview Windows::Media::Capture::MediaCapture
#define _MediaCaptureInitializationSettings Windows::Media::Capture::MediaCaptureInitializationSettings
#define _VideoDeviceController Windows::Media::Devices::VideoDeviceController
#define _MediaDeviceController Windows::Media::Devices::VideoDeviceController
#define _MediaEncodingProperties Windows::Media::MediaProperties::IMediaEncodingProperties
#define _VideoPreview Windows::Media::Capture::MediaStreamType::VideoPreview
#define _VideoEncodingProperties Windows::Media::MediaProperties::VideoEncodingProperties
#define _MediaStreamType Windows::Media::Capture::MediaStreamType
#define _AsyncAction Windows::Foundation::IAsyncAction
#define _AsyncOperation Windows::Foundation::IAsyncOperation
#define _DeviceClass Windows::Devices::Enumeration::DeviceClass
#define _VideoCapture Windows::Devices::Enumeration::DeviceClass::VideoCapture
#define _IDeviceInformation Windows::Devices::Enumeration::DeviceInformation
#define _DeviceInformation Windows::Devices::Enumeration::DeviceInformation
#define _DeviceInformationStatics Windows::Devices::Enumeration::DeviceInformation
#define _MediaEncodingProfile Windows::Media::MediaProperties::MediaEncodingProfile
#define _
Video Windows::Media::Capture::StreamingCaptureMode::Video
#define _
StreamingCaptureMode Windows::Media::Capture::StreamingCaptureMode
#define _PropertySet Windows::Foundation::Collections::PropertySet
#define _Map Windows::Foundation::Collections::PropertySet
#define _PropertyValueStatics Windows::Foundation::PropertyValue
#define _VectorView Windows::Foundation::Collections::IVectorView
#define _StartPreviewToCustomSinkIdAsync StartPreviewToCustomSinkAsync
...
...
@@ -208,16 +211,16 @@ MAKE_MAP(MFSTREAMSINK_MARKER_TYPE) StreamSinkMarkerTypeMap(StreamSinkMarkerTypeP
#define _MediaExtension Windows::Media::IMediaExtension
#define _ContextCallback Concurrency::details::_ContextCallback
#define BEGIN_CALL_IN_CONTEXT(hr, var, ...) hr = S_OK;\
var._CallInContext([__VA_ARGS__]() {
var._CallInContext([__VA_ARGS__]() {
#define END_CALL_IN_CONTEXT(hr) if (FAILED(hr)) throw Platform::Exception::CreateException(hr);\
});
});
#define DO_ACTION_SYNCHRONOUSLY(hr, action, ctxt) hr = S_OK;\
CCompletionHandler::PerformActionSynchronously(reinterpret_cast<Windows::Foundation::IAsyncAction^>(action), ctxt)
CCompletionHandler::PerformActionSynchronously(reinterpret_cast<Windows::Foundation::IAsyncAction^>(action), ctxt)
#define DO_OPERATION_SYNCHRONOUSLY_VECTOR(hr, action, ctxt, pResult, vectortype, elementtype, _type) hr = S_OK;\
pResult = CCompletionHandler::PerformSynchronously<_type^>(reinterpret_cast<Windows::Foundation::IAsyncOperation<_type^>^>(action), ctxt)
pResult = CCompletionHandler::PerformSynchronously<_type^>(reinterpret_cast<Windows::Foundation::IAsyncOperation<_type^>^>(action), ctxt)
#define BEGIN_CREATE_ASYNC(...) reinterpret_cast<ABI::Windows::Foundation::IAsyncAction*>(Concurrency::create_async([__VA_ARGS__]() {
#define END_CREATE_ASYNC(hr) if (FAILED(hr)) throw Platform::Exception::CreateException(hr);\
}))
}))
#define DEFINE_TASK Concurrency::task
#define CREATE_TASK Concurrency::create_task
#define CREATE_OR_CONTINUE_TASK(_task, rettype, func) _task = (_task == Concurrency::task<rettype>()) ? Concurrency::create_task(func) : _task.then([func](rettype) -> rettype { return func(); });
...
...
@@ -226,53 +229,53 @@ MAKE_MAP(MFSTREAMSINK_MARKER_TYPE) StreamSinkMarkerTypeMap(StreamSinkMarkerTypeP
#define MAKE_WRL_AGILE_REF(x) Platform::Agile<x^>
#define RELEASE_AGILE_WRL(x) x = nullptr;
#define RELEASE_WRL(x) x = nullptr;
#define GET_WRL_VIDEO_PREVIEW(medCap, prevMedCap, hr) Windows::Media::Capture::MediaCapture^ prevMedCap = medCap;\
hr = S_OK;
#define GET_WRL_MEDIA_DEVICE_CONTROLLER(devCont, medDevCont, hr) Windows::Media::Devices::VideoDeviceController^ medDevCont = devCont;\
hr = S_OK;
#define GET_WRL_VIDEO_ENCODING_PROPERTIES(encProp, vidEncProp, hr) Windows::Media::MediaProperties::VideoEncodingProperties^ vidEncProp = safe_cast<Windows::Media::MediaProperties::VideoEncodingProperties^>(encProp);\
hr = S_OK;
#define GET_WRL_MAP(pSet, map, hr) Windows::Foundation::Collections::PropertySet^ map = pSet;\
hr = S_OK;
#define GET_WRL_OBJ_FROM_REF(objtype, obj, orig, hr) objtype^ obj = orig;\
hr = S_OK;
#define GET_WRL_OBJ_FROM_OBJ(objtype, obj, orig, hr) objtype^ obj = orig;\
hr = S_OK;
#define WRL_ENUM_GET(obj, prefix, prop) obj::##prop
#define WRL_PROP_GET(obj, prop, arg, hr) arg = obj->##prop;\
hr = S_OK;
hr = S_OK;
#define WRL_PROP_PUT(obj, prop, arg, hr) obj->##prop = arg;\
hr = S_OK;
hr = S_OK;
#define WRL_METHOD_BASE(obj, method, ret, hr) ret = obj->##method();\
hr = S_OK;
hr = S_OK;
#define WRL_METHOD(obj, method, ret, hr, ...) ret = obj->##method(__VA_ARGS__);\
hr = S_OK;
hr = S_OK;
#define REF_WRL_OBJ(obj) &obj
#define DEREF_WRL_OBJ(obj) obj
#define DEREF_AGILE_WRL_OBJ(obj) obj.Get()
#define DEREF_AS_NATIVE_WRL_OBJ(type, obj) reinterpret_cast<type*>(obj)
#define PREPARE_TRANSFER_WRL_OBJ(obj) obj
#define ACTIVATE_OBJ(rtclass, objtype, obj, hr)
objtype obj
;\
hr = S_OK;
#define ACTIVATE_OBJ(rtclass, objtype, obj, hr)
MAKE_WRL_OBJ(objtype) obj = ref new objtype()
;\
hr = S_OK;
#define ACTIVATE_STATIC_OBJ(rtclass, objtype, obj, hr) objtype obj;\
hr = S_OK;
hr = S_OK;
#else
#define _Object IInspectable*
#define _ObjectObj Microsoft::WRL::ComPtr<IInspectable>
#define _String HSTRING
#define _StringObj HString
#define _StringReference HStringReference
#define _StringObj
Microsoft::WRL::Wrappers::
HString
#define _StringReference
Microsoft::WRL::Wrappers::
HStringReference
#define _DeviceInformationCollection ABI::Windows::Devices::Enumeration::DeviceInformationCollection
#define _MediaCapture ABI::Windows::Media::Capture::IMediaCapture
#define _MediaCaptureVideoPreview ABI::Windows::Media::Capture::IMediaCaptureVideoPreview
#define _MediaCaptureInitializationSettings ABI::Windows::Media::Capture::IMediaCaptureInitializationSettings
#define _VideoDeviceController ABI::Windows::Media::Devices::IVideoDeviceController
#define _MediaDeviceController ABI::Windows::Media::Devices::IMediaDeviceController
#define _MediaEncodingProperties ABI::Windows::Media::MediaProperties::IMediaEncodingProperties
#define _VideoPreview ABI::Windows::Media::Capture::MediaStreamType::MediaStreamType_VideoPreview
#define _VideoEncodingProperties ABI::Windows::Media::MediaProperties::IVideoEncodingProperties
#define _MediaStreamType ABI::Windows::Media::Capture::MediaStreamType
#define _AsyncAction ABI::Windows::Foundation::IAsyncAction
#define _AsyncOperation ABI::Windows::Foundation::IAsyncOperation
#define _DeviceClass ABI::Windows::Devices::Enumeration::DeviceClass
#define _VideoCapture ABI::Windows::Devices::Enumeration::DeviceClass::DeviceClass_VideoCapture
#define _IDeviceInformation ABI::Windows::Devices::Enumeration::IDeviceInformation
#define _DeviceInformation ABI::Windows::Devices::Enumeration::DeviceInformation
#define _DeviceInformationStatics ABI::Windows::Devices::Enumeration::IDeviceInformationStatics
#define _MediaEncodingProfile ABI::Windows::Media::MediaProperties::IMediaEncodingProfile
#define _
Video ABI::Windows::Media::Capture::StreamingCaptureMode::StreamingCaptureMode_Video
#define _
StreamingCaptureMode ABI::Windows::Media::Capture::StreamingCaptureMode
#define _PropertySet ABI::Windows::Foundation::Collections::IPropertySet
#define _Map ABI::Windows::Foundation::Collections::IMap<HSTRING, IInspectable *>
#define _PropertyValueStatics ABI::Windows::Foundation::IPropertyValueStatics
#define _VectorView ABI::Windows::Foundation::Collections::IVectorView
#define _StartPreviewToCustomSinkIdAsync StartPreviewToCustomSinkIdAsync
...
...
@@ -282,12 +285,12 @@ MAKE_MAP(MFSTREAMSINK_MARKER_TYPE) StreamSinkMarkerTypeMap(StreamSinkMarkerTypeP
#define _ContextCallback Concurrency_winrt::details::_ContextCallback
#define BEGIN_CALL_IN_CONTEXT(hr, var, ...) hr = var._CallInContext([__VA_ARGS__]() -> HRESULT {
#define END_CALL_IN_CONTEXT(hr) return hr;\
});
});
#define DO_ACTION_SYNCHRONOUSLY(hr, action, ctxt) hr = CCompletionHandler<ABI::Windows::Foundation::IAsyncActionCompletedHandler, ABI::Windows::Foundation::IAsyncAction>::PerformActionSynchronously(action, ctxt)
#define DO_OPERATION_SYNCHRONOUSLY_VECTOR(hr, action, ctxt, pResult, vectortype, elementtype, _type) hr = CCompletionHandler<ABI::Windows::Foundation::IAsyncOperationCompletedHandler<_type*>, ABI::Windows::Foundation::IAsyncOperation<_type*>>::PerformSynchronously<vectortype<elementtype*>*>(action, ctxt, pResult.GetAddressOf())
#define BEGIN_CREATE_ASYNC(...) Concurrency_winrt::create_async([__VA_ARGS__]() -> HRESULT {
#define END_CREATE_ASYNC(hr) return hr;\
})
})
#define DEFINE_TASK Concurrency_winrt::task
#define CREATE_TASK Concurrency_winrt::create_task
#define CREATE_OR_CONTINUE_TASK(_task, rettype, func) _task = (_task == Concurrency_winrt::task<rettype>()) ? Concurrency_winrt::create_task(func) : _task.then([func](rettype) -> rettype { return func(); });
...
...
@@ -296,14 +299,11 @@ MAKE_MAP(MFSTREAMSINK_MARKER_TYPE) StreamSinkMarkerTypeMap(StreamSinkMarkerTypeP
#define MAKE_WRL_AGILE_REF(x) x*
#define RELEASE_AGILE_WRL(x) if (x) { (x)->Release(); x = nullptr; }
#define RELEASE_WRL(x) if (x) { (x)->Release(); x = nullptr; }
#define GET_WRL_VIDEO_PREVIEW(medCap, prevMedCap, hr) Microsoft::WRL::ComPtr<ABI::Windows::Media::Capture::IMediaCaptureVideoPreview> prevMedCap;\
hr = medCap->QueryInterface(__uuidof(ABI::Windows::Media::Capture::IMediaCaptureVideoPreview), &prevMedCap);
#define GET_WRL_MEDIA_DEVICE_CONTROLLER(devCont, medDevCont, hr) Microsoft::WRL::ComPtr<ABI::Windows::Media::Devices::IMediaDeviceController> medDevCont;\
hr = devCont.As(&medDevCont);
#define GET_WRL_VIDEO_ENCODING_PROPERTIES(encProp, vidEncProp, hr) Microsoft::WRL::ComPtr<ABI::Windows::Media::MediaProperties::IVideoEncodingProperties> vidEncProp;\
hr = encProp.As(&vidEncProp);
#define GET_WRL_MAP(pSet, map, hr) Microsoft::WRL::ComPtr<ABI::Windows::Foundation::Collections::IMap<HSTRING, IInspectable *>> map;\
hr = pSet.As(&map);
#define GET_WRL_OBJ_FROM_REF(objtype, obj, orig, hr) Microsoft::WRL::ComPtr<objtype> obj;\
hr = orig->QueryInterface(__uuidof(objtype), &obj);
#define GET_WRL_OBJ_FROM_OBJ(objtype, obj, orig, hr) Microsoft::WRL::ComPtr<objtype> obj;\
hr = orig.As(&obj);
#define WRL_ENUM_GET(obj, prefix, prop) obj::prefix##_##prop
#define WRL_PROP_GET(obj, prop, arg, hr) hr = obj->get_##prop(&arg);
#define WRL_PROP_PUT(obj, prop, arg, hr) hr = obj->put_##prop(arg);
#define WRL_METHOD_BASE(obj, method, ret, hr) hr = obj->##method(&ret);
...
...
@@ -313,10 +313,10 @@ MAKE_MAP(MFSTREAMSINK_MARKER_TYPE) StreamSinkMarkerTypeMap(StreamSinkMarkerTypeP
#define DEREF_AGILE_WRL_OBJ(obj) obj
#define DEREF_AS_NATIVE_WRL_OBJ(type, obj) obj.Get()
#define PREPARE_TRANSFER_WRL_OBJ(obj) obj.Detach()
#define ACTIVATE_OBJ(rtclass, objtype, obj, hr)
objtype
obj;\
#define ACTIVATE_OBJ(rtclass, objtype, obj, hr)
MAKE_WRL_OBJ(objtype)
obj;\
{\
Microsoft::WRL::ComPtr<IActivationFactory> objFactory;\
hr = Windows::Foundation::GetActivationFactory(HStringReference(rtclass).Get(), objFactory.ReleaseAndGetAddressOf());\
hr = Windows::Foundation::GetActivationFactory(
Microsoft::WRL::Wrappers::
HStringReference(rtclass).Get(), objFactory.ReleaseAndGetAddressOf());\
if (SUCCEEDED(hr)) {\
Microsoft::WRL::ComPtr<IInspectable> pInsp;\
hr = objFactory->ActivateInstance(pInsp.GetAddressOf());\
...
...
@@ -326,7 +326,7 @@ MAKE_MAP(MFSTREAMSINK_MARKER_TYPE) StreamSinkMarkerTypeMap(StreamSinkMarkerTypeP
#define ACTIVATE_STATIC_OBJ(rtclass, objtype, obj, hr) objtype obj;\
{\
Microsoft::WRL::ComPtr<IActivationFactory> objFactory;\
hr = Windows::Foundation::GetActivationFactory(HStringReference(rtclass).Get(), objFactory.ReleaseAndGetAddressOf());\
hr = Windows::Foundation::GetActivationFactory(
Microsoft::WRL::Wrappers::
HStringReference(rtclass).Get(), objFactory.ReleaseAndGetAddressOf());\
if (SUCCEEDED(hr)) {\
if (SUCCEEDED(hr)) hr = objFactory.As(&obj);\
}\
...
...
@@ -346,6 +346,7 @@ class CCompletionHandler
TCompletionHandler
,
IAgileObject
,
FtmBase
>
#endif
{
MixInHelper
()
#ifndef __cplusplus_winrt
public
:
CCompletionHandler
()
{}
...
...
modules/highgui/src/ppltasks_winrt.h
View file @
787815fd
...
...
@@ -31,7 +31,6 @@
#include <wrl\async.h>
#include <windows.foundation.h>
#include <ctxtcall.h>
#include <comdef.h>
#ifndef _UITHREADCTXT_SUPPORT
...
...
@@ -1213,21 +1212,20 @@ namespace details
{
}
explicit
_ExceptionHolder
(
const
_com_error
&
_E
,
void
*
_SourceAddressHint
)
:
_M_exceptionObserved
(
0
),
_M_disassembleMe
(
_SourceAddressHint
)
explicit
_ExceptionHolder
(
IRestrictedErrorInfo
*
&
_E
,
void
*
_SourceAddressHint
)
:
_M_exceptionObserved
(
0
),
_M_disassembleMe
(
_SourceAddressHint
)
,
_M_winRTException
(
_E
)
{
_M_winRTException
=
std
::
unique_ptr
<
_com_error
>
(
new
_com_error
(
_E
));
}
__declspec
(
noinline
)
~
_ExceptionHolder
()
{
if
(
_M_exceptionObserved
==
0
)
{
// Disassemble at this->_M_disassembleMe to get to the source location right after either the creation of the task (constructor
// or then method) that encountered this exception, or the set_exception call for a task_completion_event.
Concurrency
::
details
::
_ReportUnobservedException
();
}
if
(
_M_exceptionObserved
==
0
)
{
// Disassemble at this->_M_disassembleMe to get to the source location right after either the creation of the task (constructor
// or then method) that encountered this exception, or the set_exception call for a task_completion_event.
Concurrency
::
details
::
_ReportUnobservedException
();
}
}
void
_RethrowUserException
()
{
...
...
@@ -1238,7 +1236,7 @@ namespace details
if
(
_M_winRTException
!=
nullptr
)
{
throw
_M_winRTException
.
g
et
();
throw
_M_winRTException
.
G
et
();
}
std
::
rethrow_exception
(
_M_stdException
);
}
...
...
@@ -1249,7 +1247,7 @@ namespace details
// Either _M_stdException or _M_winRTException is populated based on the type of exception encountered.
std
::
exception_ptr
_M_stdException
;
std
::
unique_ptr
<
_com_error
>
_M_winRTException
;
Microsoft
::
WRL
::
ComPtr
<
IRestrictedErrorInfo
>
_M_winRTException
;
// Disassembling this value will point to a source instruction right after a call instruction. If the call is to create_task,
// a task constructor or the then method, the task created by that method is the one that encountered this exception. If the call
...
...
@@ -1262,6 +1260,7 @@ namespace details
struct
_AsyncInfoCompletionHandler
:
public
Microsoft
::
WRL
::
RuntimeClass
<
Microsoft
::
WRL
::
RuntimeClassFlags
<
Microsoft
::
WRL
::
RuntimeClassType
::
ClassicCom
>
,
_CompletionHandlerType
>
{
MixInHelper
()
public
:
_AsyncInfoCompletionHandler
(
_Function
func
)
:
_M_function
(
func
)
{}
STDMETHODIMP
Invoke
(
_AsyncOperationType
*
asyncInfo
,
ABI
::
Windows
::
Foundation
::
AsyncStatus
status
)
...
...
@@ -1603,7 +1602,7 @@ namespace details
_M_pTask
->
_Cancel
(
true
);
throw
;
}
catch
(
const
_com_error
&
_E
)
catch
(
IRestrictedErrorInfo
*
&
_E
)
{
_M_pTask
->
_CancelWithException
(
_E
);
throw
;
...
...
@@ -1742,7 +1741,7 @@ namespace details
// the exception and canceled the task. Swallow the exception here.
_CONCRT_ASSERT
(
_IsCanceled
());
}
catch
(
const
_com_error
&
_E
)
catch
(
IRestrictedErrorInfo
*
&
_E
)
{
// Its possible the task body hasn't seen the exception, if so we need to cancel with exception here.
if
(
!
_HasUserException
())
...
...
@@ -1818,7 +1817,7 @@ namespace details
return
_CancelAndRunContinuations
(
true
,
true
,
_PropagatedFromAncestor
,
_ExHolder
);
}
bool
_CancelWithException
(
const
_com_error
&
_Exception
)
bool
_CancelWithException
(
IRestrictedErrorInfo
*
&
_Exception
)
{
// This task was canceled because the task body encountered an exception.
_CONCRT_ASSERT
(
!
_HasUserException
());
...
...
@@ -1879,7 +1878,7 @@ namespace details
bool
_HasUserException
()
{
return
_M_exceptionHolder
;
return
_M_exceptionHolder
!=
nullptr
;
}
void
_SetScheduledEvent
()
...
...
@@ -2042,7 +2041,7 @@ namespace details
return
S_OK
;
});
}
catch
(
const
_com_error
&
_E
)
catch
(
IRestrictedErrorInfo
*
&
_E
)
{
_TaskImplPtr
->
_CancelWithException
(
_E
);
}
...
...
@@ -2489,7 +2488,7 @@ namespace details
bool
_HasUserException
()
{
return
_M_exceptionHolder
;
return
_M_exceptionHolder
!=
nullptr
;
}
~
_Task_completion_event_impl
()
...
...
@@ -3524,7 +3523,7 @@ private:
}
//
// Overload 1: returns IAsyncOperation<_InternalReturnType>^ (only uder /ZW)
// Overload 1: returns IAsyncOperation<_InternalReturnType>^ (only u
n
der /ZW)
// or
// returns task<_InternalReturnType>
//
...
...
@@ -4485,7 +4484,7 @@ namespace details
template
<
typename
_Ty
>
_Ty
_GetUnwrappedType
(
task
<
_Ty
>
);
// Unwrap all support
t
ed types
// Unwrap all supported types
template
<
typename
_Ty
>
auto
_GetUnwrappedReturnType
(
_Ty
_Arg
,
int
)
->
decltype
(
_GetUnwrappedType
(
_Arg
));
// fallback
...
...
@@ -5627,7 +5626,11 @@ namespace details
_M_CompleteDelegateAssigned
(
0
),
_M_CallbackMade
(
0
)
{
#if _MSC_VER < 1800
_M_id
=
Concurrency
::
details
::
_GetNextAsyncId
();
#else
_M_id
=
Concurrency
::
details
::
platform
::
GetNextAsyncId
();
#endif
}
virtual
STDMETHODIMP
GetResults
(
typename
_Attributes
::
_ReturnType
*
results
)
...
...
@@ -6113,9 +6116,13 @@ namespace details
{
_TryTransitionToCancelled
();
}
catch
(
const
_com_error
&
_Ex
)
catch
(
IRestrictedErrorInfo
*
&
_Ex
)
{
_TryTransitionToError
(
_Ex
->
HResult
);
HRESULT
hr
;
HRESULT
_hr
;
hr
=
_Ex
->
GetErrorDetails
(
NULL
,
&
_hr
,
NULL
,
NULL
);
if
(
SUCCEEDED
(
hr
))
hr
=
_hr
;
_TryTransitionToError
(
hr
);
}
catch
(...)
{
...
...
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