gstreamer/sys/d3d11/meson.build
Nicolas Dufresne 00d04784d3 Move CODEC base classes into it's own library
This introduce a library which contains a set of base classes which
handles the parsing and the state tracking for the purpose of decoding
different CODECs. Currently H264, H265 and VP9 are supported. These
bases classes are used to decode with low level decoding API like DXVA,
NVDEC, VDPAU, VAAPI and V4L2 State Less decoders. The new library is
named gstreamer-codecs-1.0 / libgstcodecs.
2020-03-05 03:06:16 +00:00

182 lines
5 KiB
Meson

d3d11_sources = [
'gstd3d11bufferpool.c',
'gstd3d11device.c',
'gstd3d11memory.c',
'gstd3d11utils.c',
'gstd3d11videosink.c',
'gstd3d11window.cpp',
'plugin.c',
'gstd3d11format.c',
'gstd3d11basefilter.c',
'gstd3d11upload.c',
'gstd3d11download.c',
'gstd3d11colorconvert.c',
'gstd3d11videosinkbin.c',
'gstd3d11shader.c',
'gstd3d11colorconverter.c',
'gstd3d11overlaycompositor.c',
'gstd3d11videoprocessor.c',
]
d3d11_dec_sources = [
'gstd3d11decoder.c',
'gstd3d11h264dec.c',
'gstd3d11vp9dec.c',
'gstd3d11h265dec.c',
]
dxgi_headers = [
['dxgi1_6.h', 6],
['dxgi1_5.h', 5],
['dxgi1_4.h', 4],
['dxgi1_3.h', 3],
['dxgi1_2.h', 2],
['dxgi.h', 1]
]
d3d11_headers = [
['d3d11_4.h', 4],
['d3d11_3.h', 3],
['d3d11_2.h', 2],
['d3d11_1.h', 1],
['d3d11.h', 0]
]
have_d3d11 = false
extra_c_args = ['-DCOBJMACROS']
have_dxgi_header = false
have_d3d11_header = false
have_d3d11sdk_h = false
have_dxgidebug_h = false
winapi_desktop = false
winapi_app = false
extra_dep = []
d3d11_conf = configuration_data()
d3d11_option = get_option('d3d11')
if host_system != 'windows' or d3d11_option.disabled()
subdir_done()
endif
d3d11_lib = cc.find_library('d3d11', required : d3d11_option)
dxgi_lib = cc.find_library('dxgi', required : d3d11_option)
d3dcompiler_lib = cc.find_library('d3dcompiler', required: d3d11_option)
runtimeobject_lib = cc.find_library('runtimeobject', required : false)
foreach dxgi_h: dxgi_headers
if not have_dxgi_header and cc.has_header(dxgi_h[0])
d3d11_conf.set('DXGI_HEADER_VERSION', dxgi_h[1])
have_dxgi_header = true
endif
endforeach
foreach d3d11_h: d3d11_headers
if not have_d3d11_header and cc.has_header(d3d11_h[0])
d3d11_conf.set('D3D11_HEADER_VERSION', d3d11_h[1])
have_d3d11_header = true
endif
endforeach
have_d3d11 = d3d11_lib.found() and dxgi_lib.found() and have_d3d11_header and have_dxgi_header and cc.has_header('d3dcompiler.h')
if not have_d3d11
if d3d11_option.enabled()
error('The d3d11 plugin was enabled explicitly, but required dependencies were not found.')
endif
subdir_done()
endif
# for enabling debug layer
if get_option('buildtype').startswith('debug')
d3d11_debug_libs = [
['d3d11sdklayers.h', 'ID3D11Debug', 'ID3D11InfoQueue', 'have_d3d11sdk_h'],
['dxgidebug.h', 'IDXGIDebug', 'IDXGIInfoQueue', 'have_dxgidebug_h'],
]
foreach f : d3d11_debug_libs
header = f.get(0)
debug_obj = f.get(1)
info_obj = f.get(2)
compile_code = '''
#include <d3d11.h>
#include <dxgi.h>
#include <@0@>
int main(int arc, char ** argv) {
@1@ *debug = NULL;
@2@ *info_queue = NULL;
return 0;
}'''.format(header, debug_obj, info_obj)
if cc.compiles(compile_code, dependencies: [d3d11_lib, dxgi_lib], name: debug_obj)
set_variable(f.get(3), true)
endif
endforeach
if have_d3d11sdk_h or have_dxgidebug_h
extra_dep += [gmodule_dep]
endif
endif
d3d11_conf.set10('HAVE_D3D11SDKLAYERS_H', have_d3d11sdk_h)
d3d11_conf.set10('HAVE_DXGIDEBUG_H', have_dxgidebug_h)
# d3d11 video api uses dxva structure for decoding, and dxva.h needs d3d9 types
if cc.has_header('dxva.h') and cc.has_header('d3d9.h')
d3d11_conf.set('HAVE_DXVA_H', 1)
d3d11_sources += d3d11_dec_sources
extra_c_args += ['-DGST_USE_UNSTABLE_API']
extra_dep += [gstcodecs_dep]
endif
winapi_desktop = cxx.compiles('''#include <winapifamily.h>
#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
#error "not win32"
#endif''',
dependencies: [d3d11_lib, dxgi_lib],
name: 'checking if building for Win32')
if runtimeobject_lib.found()
winapi_app = cxx.compiles('''#include <winapifamily.h>
#include <windows.applicationmodel.core.h>
#include <wrl.h>
#include <wrl/wrappers/corewrappers.h>
#include <d3d11.h>
#include <dxgi1_2.h>
#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
#error "not winrt"
#endif''',
dependencies: [d3d11_lib, dxgi_lib, runtimeobject_lib],
name: 'checking if building for WinRT')
endif
if not winapi_desktop and not winapi_app
error('Neither Desktop partition nor App partition')
endif
winapi_app_only = winapi_app and not winapi_desktop
if winapi_app_only
d3d11_sources += ['gstd3d11window_corewindow.cpp',
'gstd3d11window_swapchainpanel.cpp']
extra_dep += [runtimeobject_lib]
else
d3d11_sources += ['gstd3d11window_win32.cpp']
endif
d3d11_conf.set10('GST_D3D11_WINAPI_ONLY_APP', winapi_app_only)
configure_file(
output: 'gstd3d11config.h',
configuration: d3d11_conf,
)
gstd3d11 = library('gstd3d11',
d3d11_sources,
c_args : gst_plugins_bad_args + extra_c_args,
cpp_args: gst_plugins_bad_args,
include_directories : [configinc],
dependencies : [gstbase_dep, gstvideo_dep, d3d11_lib, dxgi_lib, d3dcompiler_lib] + extra_dep,
install : true,
install_dir : plugins_install_dir,
)
pkgconfig.generate(gstd3d11, install_dir : plugins_pkgconfig_install_dir)
plugins += [gstd3d11]