This reverts commit 23f60ebe015cdefd017639d3eb826bf058cae141. Reason for revert: breaks downstream: create_direct3d_device.h(14,10): fatal error: 'windows.graphics.capture.interop.h' file not found Original change's description: > Add ability to load CreateDirect3DDeviceFromDXGIDevice from d3d11.dll > > Creating a Direct3D11Device from a DXGIDevice is necessary for the new > WGC based window capturer. However, the > CreateDirect3DDeviceFromDXGIDevice API is not available on all > versions of Windows, which means we have to load this function from > d3d11.dll at runtime. > > You can see how this function will be used in this CL: > 196624: Finish implementing WGC Window Capturer and add unit tests. | > https://webrtc-review.googlesource.com/c/src/+/196624 > > I also ensure we don't leak HSTRINGs in GetActivationFactory and fix > up some includes in ScopedComInitializer. > > Bug: webrtc:9273 > Change-Id: Ida240b2c0f637d70ec405de7d8f59f0c12aee1f1 > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/196622 > Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> > Commit-Queue: Austin Orion <auorion@microsoft.com> > Cr-Commit-Position: refs/heads/master@{#32984} TBR=mbonadei@webrtc.org,tommi@webrtc.org,sergeyu@chromium.org,auorion@microsoft.com Change-Id: If48172db15ff09a10bd32e762ee2c952dc9d9337 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: webrtc:9273 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/202023 Reviewed-by: Alex Loiko <aleloi@google.com> Commit-Queue: Alex Loiko <aleloi@google.com> Cr-Commit-Position: refs/heads/master@{#32992}
55 lines
2.0 KiB
C++
55 lines
2.0 KiB
C++
/*
|
|
* Copyright (c) 2020 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#include "rtc_base/win/scoped_com_initializer.h"
|
|
|
|
namespace webrtc {
|
|
|
|
ScopedCOMInitializer::ScopedCOMInitializer() {
|
|
RTC_DLOG(INFO) << "Single-Threaded Apartment (STA) COM thread";
|
|
Initialize(COINIT_APARTMENTTHREADED);
|
|
}
|
|
|
|
// Constructor for MTA initialization.
|
|
ScopedCOMInitializer::ScopedCOMInitializer(SelectMTA mta) {
|
|
RTC_DLOG(INFO) << "Multi-Threaded Apartment (MTA) COM thread";
|
|
Initialize(COINIT_MULTITHREADED);
|
|
}
|
|
|
|
ScopedCOMInitializer::~ScopedCOMInitializer() {
|
|
if (Succeeded()) {
|
|
CoUninitialize();
|
|
}
|
|
}
|
|
|
|
void ScopedCOMInitializer::Initialize(COINIT init) {
|
|
// Initializes the COM library for use by the calling thread, sets the
|
|
// thread's concurrency model, and creates a new apartment for the thread
|
|
// if one is required. CoInitializeEx must be called at least once, and is
|
|
// usually called only once, for each thread that uses the COM library.
|
|
hr_ = CoInitializeEx(NULL, init);
|
|
RTC_CHECK_NE(RPC_E_CHANGED_MODE, hr_)
|
|
<< "Invalid COM thread model change (MTA->STA)";
|
|
// Multiple calls to CoInitializeEx by the same thread are allowed as long
|
|
// as they pass the same concurrency flag, but subsequent valid calls
|
|
// return S_FALSE. To close the COM library gracefully on a thread, each
|
|
// successful call to CoInitializeEx, including any call that returns
|
|
// S_FALSE, must be balanced by a corresponding call to CoUninitialize.
|
|
if (hr_ == S_OK) {
|
|
RTC_DLOG(INFO)
|
|
<< "The COM library was initialized successfully on this thread";
|
|
} else if (hr_ == S_FALSE) {
|
|
RTC_DLOG(WARNING)
|
|
<< "The COM library is already initialized on this thread";
|
|
}
|
|
}
|
|
|
|
} // namespace webrtc
|