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