• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1applemedia_sources = [
2    'plugin.m',
3    'vtutil.c',
4    'corevideomemory.c',
5    'corevideobuffer.c',
6    'coremediabuffer.c',
7    'videotexturecache.m',
8    'videotexturecache-gl.m',
9    'atdec.c',
10    'glcontexthelper.c'
11]
12
13applemedia_args = [
14    '-Dgst_core_media_buffer_new=gst_core_media_buffer_priv_new',
15    '-Dgst_core_media_buffer_get_type=gst_core_media_buffer_priv_get_type',
16    '-Dgst_core_media_buffer_get_pixel_buffer=gst_core_media_buffer_priv_get_pixel_buffer',
17    '-Dgst_core_video_buffer_new=gst_core_video_buffer_priv_new',
18    '-Dgst_core_video_buffer_get_type=gst_core_video_buffer_priv_get_type'
19]
20
21applemedia_objc_args = []
22applemedia_option = get_option('applemedia')
23if not ['darwin', 'ios'].contains(host_system) or applemedia_option.disabled()
24  subdir_done()
25endif
26
27if ['darwin', 'ios'].contains(host_system)
28  objc = meson.get_compiler('objc')
29  if not objc.has_argument('-fobjc-arc')
30    error('ARC is required for building')
31  endif
32
33  applemedia_objc_args += ['-fobjc-arc']
34
35  objcpp = meson.get_compiler('objcpp')
36endif
37
38applemedia_frameworks = []
39corefoundation_dep = dependency('CoreFoundation', required : applemedia_option)
40coremedia_dep = dependency('CoreMedia', required : applemedia_option)
41corevideo_dep = dependency('CoreVideo', required : applemedia_option)
42audiotoolbox_dep = dependency('AudioToolbox', required : applemedia_option)
43applemedia_frameworks += [corefoundation_dep, coremedia_dep, corevideo_dep, audiotoolbox_dep]
44
45avfoundation_dep = dependency('AVFoundation', required : applemedia_option)
46if avfoundation_dep.found()
47    applemedia_sources += [
48        'avfvideosrc.m',
49        'avfassetsrc.m',
50        'avsamplevideosink.m',
51        'avfdeviceprovider.m',
52    ]
53    applemedia_frameworks += [avfoundation_dep]
54endif
55
56videotoolbox_dep = dependency('VideoToolbox', required : applemedia_option)
57if videotoolbox_dep.found()
58    applemedia_sources += [
59        'vtenc.c',
60        'vtdec.c'
61    ]
62    applemedia_frameworks += [videotoolbox_dep]
63endif
64
65if host_system == 'ios'
66    applemedia_sources += [
67        'iosassetsrc.m',
68        'iosglmemory.c'
69    ]
70    applemedia_objc_args += ['-fobjc-abi-version=2', '-fobjc-legacy-dispatch']
71
72    ios_media_dep = dependency('appleframeworks', modules : ['Foundation', 'AssetsLibrary'], required : applemedia_option)
73    iosurface_dep = dependency('IOSurface', required : applemedia_option)
74    applemedia_frameworks += [ios_media_dep, iosurface_dep]
75else
76    applemedia_sources += [
77        'iosurfaceglmemory.c'
78    ]
79    cocoa_dep = dependency('Cocoa', required : applemedia_option)
80    iosurface_dep = dependency('IOSurface', required : applemedia_option)
81    applemedia_opengl_dep = dependency('appleframeworks', modules : ['OpenGL'], required : applemedia_option)
82    applemedia_frameworks += [cocoa_dep, applemedia_opengl_dep, iosurface_dep]
83endif
84
85applemedia_found_deps = true
86foreach framework : applemedia_frameworks
87    if not framework.found()
88        applemedia_found_deps = false
89    endif
90endforeach
91
92applemedia_objcpp_args = []
93if gstvulkan_dep.found() and have_objcpp
94  moltenvk_dep = cc.find_library('MoltenVK', required : false)
95  metal_dep = dependency('appleframeworks', modules : ['Metal'], required : false)
96  if metal_dep.found() and moltenvk_dep.found() and cc.has_header ('MoltenVK/vk_mvk_moltenvk.h')
97    applemedia_frameworks += [moltenvk_dep, gstvulkan_dep, metal_dep]
98    applemedia_sources += [
99      'videotexturecache-vulkan.mm',
100      'iosurfacevulkanmemory.c',
101    ]
102    applemedia_args += ['-DAPPLEMEDIA_MOLTENVK']
103    # override_options : ['cpp_std=c++11'] doesn't seem to work for objcpp
104    applemedia_objcpp_args += objcpp.get_supported_arguments([
105      '-std=c++11',
106    ])
107  endif
108endif
109
110if applemedia_found_deps
111    gstapplemedia = library('gstapplemedia',
112        applemedia_sources,
113        c_args : gst_plugins_bad_args + applemedia_args,
114        objc_args : gst_plugins_bad_args + applemedia_args + applemedia_objc_args,
115        objcpp_args : gst_plugins_bad_args + applemedia_args + applemedia_objc_args + applemedia_objcpp_args,
116        link_args : noseh_link_args,
117        include_directories : [configinc, libsinc],
118        dependencies : [gstvideo_dep, gstaudio_dep, gstpbutils_dep, gst_dep, gstbase_dep, gstgl_dep, gstglproto_dep] + applemedia_frameworks,
119        override_options : ['cpp_std=c++11'],
120        install : true,
121        install_dir : plugins_install_dir,
122    )
123    pkgconfig.generate(gstapplemedia, install_dir : plugins_pkgconfig_install_dir)
124    plugins += [gstapplemedia]
125endif
126