19 #ifndef AVFILTER_VSRC_GFXCAPTURE_WINRT_H
20 #define AVFILTER_VSRC_GFXCAPTURE_WINRT_H
26 #if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0A00
28 #define _WIN32_WINNT 0x0A00
31 #define WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION 0x130000
34 #define ____FIReference_1_boolean_INTERFACE_DEFINED__
40 #include <windows.foundation.h>
47 #if !HAVE_IDIRECT3DDXGIINTERFACEACCESS
49 MIDL_INTERFACE(
"A9B3D012-3DF2-4EE3-B8D1-8695F457D3C1")
50 IDirect3DDxgiInterfaceAccess :
public IUnknown
53 IFACEMETHOD(GetInterface)(REFIID iid, _COM_Outptr_
void**
p) = 0;
57 __CRT_UUID_DECL(Windows::Graphics::DirectX::Direct3D11::IDirect3DDxgiInterfaceAccess,
58 0xa9b3d012, 0x3df2, 0x4ee3, 0xb8, 0xd1, 0x86, 0x95, 0xf4, 0x57, 0xd3, 0xc1)
63 #if !HAVE___X_ABI_CWINDOWS_CGRAPHICS_CCAPTURE_CIGRAPHICSCAPTURESESSION5
64 namespace ABI::Windows ::Graphics::Capture {
65 MIDL_INTERFACE(
"67C0EA62-1F85-5061-925A-239BE0AC09CB")
66 IGraphicsCaptureSession5 :
public IInspectable
69 IFACEMETHOD(get_MinUpdateInterval)(ABI::Windows::Foundation::TimeSpan*
value) = 0;
74 __CRT_UUID_DECL(ABI::Windows ::Graphics::Capture::IGraphicsCaptureSession5,
75 0x67c0ea62, 0x1f85, 0x5061, 0x92, 0x5a, 0x23, 0x9b, 0xe0, 0xac, 0x09, 0xcb)
82 template<
typename... Interfaces>
87 HRESULT STDMETHODCALLTYPE
QueryInterface(REFIID riid,
void** ppvObject)
override
92 if (query_all<Interfaces...>(riid, ppvObject))
102 ULONG STDMETHODCALLTYPE
AddRef()
override
107 ULONG STDMETHODCALLTYPE
Release()
override
116 template <
typename Iface,
typename... IFaces>
117 bool query_all(REFIID riid,
void** ppvObject)
119 if (riid == __uuidof(Iface)) {
120 *ppvObject =
static_cast<Iface*
>(
this);
123 if constexpr (
sizeof...(IFaces)) {
124 return query_all<IFaces...>(riid, ppvObject);
125 }
else if (riid == __uuidof(IUnknown)) {
126 *ppvObject =
static_cast<IUnknown*
>(
static_cast<Iface*
>(
this));
138 template<
class Iface,
typename F,
typename... Args>
141 using Func = std::decay_t<F>;
145 std::invoke_result_t<
Func&, Args...> STDMETHODCALLTYPE
Invoke(Args... args)
override
147 if constexpr (std::is_same_v<std::invoke_result_t<Func&, Args...>, HRESULT>) {
148 return cb_func(std::forward<Args>(args)...);
150 cb_func(std::forward<Args>(args)...);
159 template<
class Iface,
typename... Args,
typename F>
162 return Microsoft::WRL::ComPtr<Iface>(
170 template <
typename Ret,
typename... Args>
172 std::function<Ret(Args...)>
fn;
173 static Ret CALLBACK
thunk(Args... args, LPARAM
lparam) {
175 return self->
fn(std::forward<Args>(args)...);
181 template <
typename Ret,
typename... Args>
184 auto res = std::make_unique<T>(
T{ std::forward<decltype(fn)>(
fn) });
185 res->
lparam =
reinterpret_cast<LPARAM
>(res.get());
188 #define make_win32_callback(...) make_win32_callback(std::function(__VA_ARGS__))
205 if (handle && handle != INVALID_HANDLE_VALUE)
211 #define HLSL(shader) #shader