Merge pull request #2619 from GregoryMorse:patch-3
This commit is contained in:
commit
787815fd00
@ -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, pMedDevCont, hr)
|
||||
GET_WRL_OBJ_FROM_OBJ(_MediaDeviceController, pMedDevCont, pDevCont, 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, pVidProps, hr);
|
||||
GET_WRL_OBJ_FROM_OBJ(_VideoEncodingProperties, pVidProps, pMedEncProps, 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, pMedDevCont, hr)
|
||||
GET_WRL_OBJ_FROM_OBJ(_MediaDeviceController, pMedDevCont, pDevCont, 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, pVidProps, hr);
|
||||
GET_WRL_OBJ_FROM_OBJ(_VideoEncodingProperties, pVidProps, pMedEncProps, 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, pMedDevCont, hr)
|
||||
GET_WRL_OBJ_FROM_OBJ(_MediaDeviceController, pMedDevCont, pDevCont, 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, pMedDevCont, hr)
|
||||
GET_WRL_OBJ_FROM_OBJ(_MediaDeviceController, pMedDevCont, pDevCont, 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)
|
||||
|
@ -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() {}
|
||||
|
@ -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.get();
|
||||
throw _M_winRTException.Get();
|
||||
}
|
||||
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 under /ZW)
|
||||
// or
|
||||
// returns task<_InternalReturnType>
|
||||
//
|
||||
@ -4485,7 +4484,7 @@ namespace details
|
||||
template<typename _Ty>
|
||||
_Ty _GetUnwrappedType(task<_Ty>);
|
||||
|
||||
// Unwrap all supportted 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 (...)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user