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
64namespace 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)
82template<
typename... Interfaces>
87 HRESULT STDMETHODCALLTYPE
QueryInterface(REFIID riid,
void** ppvObject)
override
102 ULONG STDMETHODCALLTYPE
AddRef()
override
116 template <
typename Iface,
typename... IFaces>
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));
138template<
class Iface,
typename F,
typename... Args>
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)...);
159template<
class Iface,
typename... Args,
typename F>
162 Microsoft::WRL::ComPtr<Iface> res;
170template <
typename Ret,
typename... Args>
172 std::function<Ret(Args...)>
fn;
175 return self->
fn(std::forward<Args>(args)...);
181template <
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
static int forward(AudioFWTDNContext *s, const double *in, int in_length, double **out, int *out_length, int ch, uint64_t sn)
IFACEMETHOD put_MinUpdateInterval(ABI::Windows::Foundation::TimeSpan value)=0
IDirect3DDxgiInterfaceAccess _COM_Outptr_ void ** p
bool query_all(REFIID riid, void **ppvObject)
ULONG STDMETHODCALLTYPE AddRef() override
ULONG STDMETHODCALLTYPE Release() override
virtual ~FFComObject()=default
std::atomic< ULONG > ref_count
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject) override
std::invoke_result_t< Func &, Args... > STDMETHODCALLTYPE Invoke(Args... args) override
void operator()(HANDLE handle) const
void operator()(HMODULE handle) const
static Ret CALLBACK thunk(Args... args, LPARAM lparam)
std::function< Ret(Args...)> fn
decltype(&Win32Callback::thunk) proc
std::unique_ptr< HMODULE, HMODULEDeleter > hmodule_ptr_t
static Microsoft::WRL::ComPtr< Iface > create_cb_handler(F &&cb_func)
std::unique_ptr< HANDLE, HANDLEDeleter > handle_ptr_t
#define make_win32_callback(...)