MediaCaptureWrapper::EnumrateFrameSourceGroup
(std::vector<GstWinRTMediaFrameSourceGroup> &group_list)
{
- HRESULT hr = S_OK;
-
- if (dispatcher_) {
- hr = runOnUIThread (INFINITE,
- [this, &group_list] {
- return enumrateFrameSourceGroup(group_list);
- });
-
- } else {
- hr = enumrateFrameSourceGroup(group_list);
- }
-
- return hr;
+ return enumrateFrameSourceGroup (group_list);
}
HRESULT
{
HRESULT hr = S_OK;
- hr = openMediaCapture();
+ hr = openMediaCapture ();
if (!gst_mf_result (hr))
return hr;
- if (dispatcher_) {
- hr = runOnUIThread (INFINITE,
- [this] {
- return startCapture();
- });
-
- } else {
- hr = startCapture();
- }
-
- return S_OK;
+ return startCapture ();
}
HRESULT
MediaCaptureWrapper::StopCapture()
{
- HRESULT hr = S_OK;
-
- if (dispatcher_) {
- hr = runOnUIThread (INFINITE,
- [this] {
- return stopCapture();
- });
-
- } else {
- hr = stopCapture();
- }
-
- return S_OK;
+ return stopCapture ();
}
HRESULT
HRESULT onCaptureFailed(IMediaCapture *capture,
IMediaCaptureFailedEventArgs *args);
static HRESULT enumrateFrameSourceGroup(std::vector<GstWinRTMediaFrameSourceGroup> &list);
-
- template <typename CB>
- HRESULT runOnUIThread(DWORD timeout, CB && cb)
- {
- ComPtr<IAsyncAction> asyncAction;
- HRESULT hr;
- HRESULT hr_callback;
- boolean can_now;
- DWORD wait_ret;
-
- if (!dispatcher_)
- return cb();
-
- hr = dispatcher_->get_HasThreadAccess (&can_now);
-
- if (FAILED (hr))
- return hr;
-
- if (can_now)
- return cb ();
-
- Event event (CreateEventEx (NULL, NULL, CREATE_EVENT_MANUAL_RESET,
- EVENT_ALL_ACCESS));
-
- if (!event.IsValid())
- return E_FAIL;
-
- auto handler =
- Callback<Implements<RuntimeClassFlags<ClassicCom>,
- IDispatchedHandler, FtmBase>>([&hr_callback, &cb, &event] {
- hr_callback = cb ();
- SetEvent (event.Get());
- return S_OK;
- });
-
- hr = dispatcher_->RunAsync(CoreDispatcherPriority_Normal,
- handler.Get(), &asyncAction);
-
- if (FAILED (hr))
- return hr;
-
- wait_ret = WaitForSingleObject(event.Get(), timeout);
- if (wait_ret != WAIT_OBJECT_0)
- return E_FAIL;
-
- return hr_callback;
- }
};
HRESULT