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     Microsoft::WRL::ComPtr<Iface> res;
 
  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