1*4882a593SmuzhiyunSUMMARY = "Multimedia processing server for Linux" 2*4882a593SmuzhiyunDESCRIPTION = "Linux server for handling and routing audio and video streams between applications and multimedia I/O devices" 3*4882a593SmuzhiyunHOMEPAGE = "https://pipewire.org/" 4*4882a593SmuzhiyunBUGTRACKER = "https://gitlab.freedesktop.org/pipewire/pipewire/issues" 5*4882a593SmuzhiyunAUTHOR = "Wim Taymans <wtaymans@redhat.com>" 6*4882a593SmuzhiyunSECTION = "multimedia" 7*4882a593Smuzhiyun 8*4882a593SmuzhiyunLICENSE = "MIT & LGPL-2.1-or-later & GPL-2.0-only" 9*4882a593SmuzhiyunLIC_FILES_CHKSUM = " \ 10*4882a593Smuzhiyun file://LICENSE;md5=2158739e172e58dc9ab1bdd2d6ec9c72 \ 11*4882a593Smuzhiyun file://COPYING;md5=97be96ca4fab23e9657ffa590b931c1a \ 12*4882a593Smuzhiyun" 13*4882a593Smuzhiyun 14*4882a593SmuzhiyunDEPENDS = "dbus ncurses" 15*4882a593Smuzhiyun 16*4882a593SmuzhiyunSRCREV = "64cf5e80e6240284e6b757907b900507fe56f1b5" 17*4882a593SmuzhiyunSRC_URI = "git://gitlab.freedesktop.org/pipewire/pipewire.git;branch=master;protocol=https" 18*4882a593Smuzhiyun 19*4882a593SmuzhiyunS = "${WORKDIR}/git" 20*4882a593Smuzhiyun 21*4882a593Smuzhiyuninherit meson pkgconfig systemd gettext useradd 22*4882a593Smuzhiyun 23*4882a593SmuzhiyunUSERADD_PACKAGES = "${PN}" 24*4882a593Smuzhiyun 25*4882a593SmuzhiyunGROUPADD_PARAM:${PN} = "--system pipewire" 26*4882a593Smuzhiyun 27*4882a593SmuzhiyunUSERADD_PARAM:${PN} = "--system --home / --no-create-home \ 28*4882a593Smuzhiyun --comment 'PipeWire multimedia daemon' \ 29*4882a593Smuzhiyun --gid pipewire --groups audio,video \ 30*4882a593Smuzhiyun pipewire" 31*4882a593Smuzhiyun 32*4882a593SmuzhiyunSYSTEMD_PACKAGES = "${PN}" 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun# For "EVL", look up https://evlproject.org/ . It involves 35*4882a593Smuzhiyun# a specially prepared kernel, and is currently unavailable 36*4882a593Smuzhiyun# in Yocto. 37*4882a593Smuzhiyun# 38*4882a593Smuzhiyun# Vulkan support is currently (as of version 0.3.44) not functional. 39*4882a593Smuzhiyun# 40*4882a593Smuzhiyun# manpage generation requires xmltoman, which is not available. 41*4882a593Smuzhiyun# 42*4882a593Smuzhiyun# The session-managers list specifies which session managers Meson 43*4882a593Smuzhiyun# shall download (via git clone) and build as subprojects. In OE, 44*4882a593Smuzhiyun# this is not how a session manager should be built. Instead, they 45*4882a593Smuzhiyun# should be integrated as separate OE recipes. To prevent PipeWire 46*4882a593Smuzhiyun# from using this Meson feature, set an empty list. 47*4882a593Smuzhiyun# This does not disable support or the need for session managers, 48*4882a593Smuzhiyun# it just prevents this subproject feature. 49*4882a593Smuzhiyun# 50*4882a593Smuzhiyun# AptX and LDAC are not available in OE. Currently, neither 51*4882a593Smuzhiyun# are lv2 and ROC. 52*4882a593Smuzhiyun# 53*4882a593Smuzhiyun# The RTKit module is deprecated in favor of the newer RT module. 54*4882a593Smuzhiyun# It still exists for legacy setups that still include it in 55*4882a593Smuzhiyun# their PipeWire configuration files. 56*4882a593SmuzhiyunEXTRA_OEMESON += " \ 57*4882a593Smuzhiyun -Devl=disabled \ 58*4882a593Smuzhiyun -Dtests=disabled \ 59*4882a593Smuzhiyun -Dudevrulesdir=${nonarch_base_libdir}/udev/rules.d/ \ 60*4882a593Smuzhiyun -Dsystemd-system-unit-dir=${systemd_system_unitdir} \ 61*4882a593Smuzhiyun -Dsystemd-user-unit-dir=${systemd_user_unitdir} \ 62*4882a593Smuzhiyun -Dvulkan=disabled \ 63*4882a593Smuzhiyun -Dman=disabled \ 64*4882a593Smuzhiyun -Dsession-managers='[]' \ 65*4882a593Smuzhiyun -Dlv2=disabled \ 66*4882a593Smuzhiyun -Droc=disabled \ 67*4882a593Smuzhiyun -Dbluez5-codec-aptx=disabled \ 68*4882a593Smuzhiyun -Dbluez5-codec-ldac=disabled \ 69*4882a593Smuzhiyun -Dlegacy-rtkit=false \ 70*4882a593Smuzhiyun" 71*4882a593Smuzhiyun 72*4882a593SmuzhiyunPACKAGECONFIG ??= "\ 73*4882a593Smuzhiyun ${@bb.utils.contains('DISTRO_FEATURES', 'zeroconf', 'avahi', '', d)} \ 74*4882a593Smuzhiyun ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez', '', d)} \ 75*4882a593Smuzhiyun ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd systemd-system-service', '', d)} \ 76*4882a593Smuzhiyun ${@bb.utils.filter('DISTRO_FEATURES', 'alsa', d)} \ 77*4882a593Smuzhiyun gstreamer jack libusb pw-cat raop sndfile v4l2 \ 78*4882a593Smuzhiyun" 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun# "jack" and "pipewire-jack" packageconfigs cannot be both enabled, 81*4882a593Smuzhiyun# since "jack" imports libjack, and "pipewire-jack" generates 82*4882a593Smuzhiyun# libjack.so* files, thus colliding with the libpack package. This 83*4882a593Smuzhiyun# is why these two are marked in their respective packageconfigs 84*4882a593Smuzhiyun# as being in conflict. 85*4882a593SmuzhiyunPACKAGECONFIG[alsa] = "-Dalsa=enabled,-Dalsa=disabled,alsa-lib udev" 86*4882a593SmuzhiyunPACKAGECONFIG[avahi] = "-Davahi=enabled,-Davahi=disabled,avahi" 87*4882a593SmuzhiyunPACKAGECONFIG[bluez] = "-Dbluez5=enabled,-Dbluez5=disabled,bluez5 sbc" 88*4882a593SmuzhiyunPACKAGECONFIG[bluez-aac] = "-Dbluez5-codec-aac=enabled,-Dbluez5-codec-aac=disabled,fdk-aac" 89*4882a593SmuzhiyunPACKAGECONFIG[docs] = "-Ddocs=enabled,-Ddocs=disabled,doxygen-native graphviz-native" 90*4882a593SmuzhiyunPACKAGECONFIG[ffmpeg] = "-Dffmpeg=enabled,-Dffmpeg=disabled,ffmpeg" 91*4882a593SmuzhiyunPACKAGECONFIG[gstreamer] = "-Dgstreamer=enabled,-Dgstreamer=disabled,glib-2.0 gstreamer1.0 gstreamer1.0-plugins-base" 92*4882a593SmuzhiyunPACKAGECONFIG[jack] = "-Djack=enabled,-Djack=disabled,jack,,,pipewire-jack" 93*4882a593SmuzhiyunPACKAGECONFIG[libcamera] = "-Dlibcamera=enabled,-Dlibcamera=disabled,libcamera" 94*4882a593SmuzhiyunPACKAGECONFIG[libcanberra] = "-Dlibcanberra=enabled,-Dlibcanberra=disabled,libcanberra" 95*4882a593SmuzhiyunPACKAGECONFIG[libusb] = "-Dlibusb=enabled,-Dlibusb=disabled,libusb" 96*4882a593SmuzhiyunPACKAGECONFIG[pipewire-alsa] = "-Dpipewire-alsa=enabled,-Dpipewire-alsa=disabled,alsa-lib" 97*4882a593SmuzhiyunPACKAGECONFIG[pipewire-jack] = "-Dpipewire-jack=enabled -Dlibjack-path=${libdir}/${PW_MODULE_SUBDIR}/jack,-Dpipewire-jack=disabled,jack,,,jack" 98*4882a593SmuzhiyunPACKAGECONFIG[pw-cat] = "-Dpw-cat=enabled,-Dpw-cat=disabled" 99*4882a593SmuzhiyunPACKAGECONFIG[raop] = "-Draop=enabled,-Draop=disabled,openssl" 100*4882a593SmuzhiyunPACKAGECONFIG[sdl2] = "-Dsdl2=enabled,-Dsdl2=disabled,virtual/libsdl2" 101*4882a593SmuzhiyunPACKAGECONFIG[sndfile] = "-Dsndfile=enabled,-Dsndfile=disabled,libsndfile1" 102*4882a593SmuzhiyunPACKAGECONFIG[systemd] = "-Dsystemd=enabled,-Dsystemd=disabled,systemd" 103*4882a593SmuzhiyunPACKAGECONFIG[systemd-system-service] = "-Dsystemd-system-service=enabled,-Dsystemd-system-service=disabled,systemd" 104*4882a593Smuzhiyun# "systemd-user-service" packageconfig will only install service 105*4882a593Smuzhiyun# files to rootfs but not enable them as systemd.bbclass 106*4882a593Smuzhiyun# currently lacks the feature of enabling user services. 107*4882a593SmuzhiyunPACKAGECONFIG[systemd-user-service] = "-Dsystemd-user-service=enabled,-Dsystemd-user-service=disabled,systemd" 108*4882a593Smuzhiyun# pw-cat needs sndfile packageconfig to be enabled 109*4882a593SmuzhiyunPACKAGECONFIG[v4l2] = "-Dv4l2=enabled,-Dv4l2=disabled,udev" 110*4882a593SmuzhiyunPACKAGECONFIG[webrtc-echo-cancelling] = "-Decho-cancel-webrtc=enabled,-Decho-cancel-webrtc=disabled,webrtc-audio-processing" 111*4882a593Smuzhiyun 112*4882a593SmuzhiyunPACKAGESPLITFUNCS:prepend = " split_dynamic_packages " 113*4882a593SmuzhiyunPACKAGESPLITFUNCS:append = " set_dynamic_metapkg_rdepends " 114*4882a593Smuzhiyun 115*4882a593SmuzhiyunSPA_SUBDIR = "spa-0.2" 116*4882a593SmuzhiyunPW_MODULE_SUBDIR = "pipewire-0.3" 117*4882a593Smuzhiyun 118*4882a593Smuzhiyunremove_unused_installed_files() { 119*4882a593Smuzhiyun # jack.conf is used by pipewire-jack (not the JACK SPA plugin). 120*4882a593Smuzhiyun # Remove it if pipewire-jack is not built to avoid creating the 121*4882a593Smuzhiyun # pipewire-jack package. 122*4882a593Smuzhiyun if ${@bb.utils.contains('PACKAGECONFIG', 'pipewire-jack', 'false', 'true', d)}; then 123*4882a593Smuzhiyun rm -f "${D}${datadir}/pipewire/jack.conf" 124*4882a593Smuzhiyun fi 125*4882a593Smuzhiyun 126*4882a593Smuzhiyun # minimal.conf is an example of how to minimally configure the 127*4882a593Smuzhiyun # daemon and is not meant to be used for production. 128*4882a593Smuzhiyun rm -f "${D}${datadir}/pipewire/minimal.conf" 129*4882a593Smuzhiyun} 130*4882a593Smuzhiyun 131*4882a593Smuzhiyundo_install[postfuncs] += "remove_unused_installed_files" 132*4882a593Smuzhiyun 133*4882a593Smuzhiyunpython split_dynamic_packages () { 134*4882a593Smuzhiyun # Create packages for each SPA plugin. These plugins are located 135*4882a593Smuzhiyun # in individual subdirectories, so a recursive search is needed. 136*4882a593Smuzhiyun spa_libdir = d.expand('${libdir}/${SPA_SUBDIR}') 137*4882a593Smuzhiyun do_split_packages(d, spa_libdir, r'^libspa-(.*)\.so$', d.expand('${PN}-spa-plugins-%s'), 'PipeWire SPA plugin for %s', extra_depends='', recursive=True) 138*4882a593Smuzhiyun 139*4882a593Smuzhiyun # Create packages for each PipeWire module. 140*4882a593Smuzhiyun pw_module_libdir = d.expand('${libdir}/${PW_MODULE_SUBDIR}') 141*4882a593Smuzhiyun do_split_packages(d, pw_module_libdir, r'^libpipewire-module-(.*)\.so$', d.expand('${PN}-modules-%s'), 'PipeWire %s module', extra_depends='', recursive=False) 142*4882a593Smuzhiyun} 143*4882a593Smuzhiyun 144*4882a593Smuzhiyunpython set_dynamic_metapkg_rdepends () { 145*4882a593Smuzhiyun import os 146*4882a593Smuzhiyun import oe.utils 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun # Go through all generated SPA plugin and PipeWire module packages 149*4882a593Smuzhiyun # (excluding the main package and the -meta package itself) and 150*4882a593Smuzhiyun # add them to the -meta package as RDEPENDS. 151*4882a593Smuzhiyun 152*4882a593Smuzhiyun base_pn = d.getVar('PN') 153*4882a593Smuzhiyun 154*4882a593Smuzhiyun spa_pn = base_pn + '-spa-plugins' 155*4882a593Smuzhiyun spa_metapkg = spa_pn + '-meta' 156*4882a593Smuzhiyun 157*4882a593Smuzhiyun pw_module_pn = base_pn + '-modules' 158*4882a593Smuzhiyun pw_module_metapkg = pw_module_pn + '-meta' 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun d.setVar('ALLOW_EMPTY:' + spa_metapkg, "1") 161*4882a593Smuzhiyun d.setVar('FILES:' + spa_metapkg, "") 162*4882a593Smuzhiyun 163*4882a593Smuzhiyun d.setVar('ALLOW_EMPTY:' + pw_module_metapkg, "1") 164*4882a593Smuzhiyun d.setVar('FILES:' + pw_module_metapkg, "") 165*4882a593Smuzhiyun 166*4882a593Smuzhiyun blacklist = [ spa_pn, spa_metapkg, pw_module_pn, pw_module_metapkg ] 167*4882a593Smuzhiyun spa_metapkg_rdepends = [] 168*4882a593Smuzhiyun pw_module_metapkg_rdepends = [] 169*4882a593Smuzhiyun pkgdest = d.getVar('PKGDEST') 170*4882a593Smuzhiyun 171*4882a593Smuzhiyun for pkg in oe.utils.packages_filter_out_system(d): 172*4882a593Smuzhiyun if pkg in blacklist: 173*4882a593Smuzhiyun continue 174*4882a593Smuzhiyun 175*4882a593Smuzhiyun is_spa_pkg = pkg.startswith(spa_pn) 176*4882a593Smuzhiyun is_pw_module_pkg = pkg.startswith(pw_module_pn) 177*4882a593Smuzhiyun if not is_spa_pkg and not is_pw_module_pkg: 178*4882a593Smuzhiyun continue 179*4882a593Smuzhiyun 180*4882a593Smuzhiyun if pkg in spa_metapkg_rdepends or pkg in pw_module_metapkg_rdepends: 181*4882a593Smuzhiyun continue 182*4882a593Smuzhiyun 183*4882a593Smuzhiyun # See if the package is empty by looking at the contents of its 184*4882a593Smuzhiyun # PKGDEST subdirectory. If this subdirectory is empty, then then 185*4882a593Smuzhiyun # package is empty as well. Empty packages do not get added to 186*4882a593Smuzhiyun # the meta package's RDEPENDS. 187*4882a593Smuzhiyun pkgdir = os.path.join(pkgdest, pkg) 188*4882a593Smuzhiyun if os.path.exists(pkgdir): 189*4882a593Smuzhiyun dir_contents = os.listdir(pkgdir) or [] 190*4882a593Smuzhiyun else: 191*4882a593Smuzhiyun dir_contents = [] 192*4882a593Smuzhiyun is_empty = len(dir_contents) == 0 193*4882a593Smuzhiyun if not is_empty: 194*4882a593Smuzhiyun if is_spa_pkg: 195*4882a593Smuzhiyun spa_metapkg_rdepends.append(pkg) 196*4882a593Smuzhiyun if is_pw_module_pkg: 197*4882a593Smuzhiyun pw_module_metapkg_rdepends.append(pkg) 198*4882a593Smuzhiyun 199*4882a593Smuzhiyun d.setVar('RDEPENDS:' + spa_metapkg, ' '.join(spa_metapkg_rdepends)) 200*4882a593Smuzhiyun d.setVar('DESCRIPTION:' + spa_metapkg, spa_pn + ' meta package') 201*4882a593Smuzhiyun 202*4882a593Smuzhiyun d.setVar('RDEPENDS:' + pw_module_metapkg, ' '.join(pw_module_metapkg_rdepends)) 203*4882a593Smuzhiyun d.setVar('DESCRIPTION:' + pw_module_metapkg, pw_module_pn + ' meta package') 204*4882a593Smuzhiyun} 205*4882a593Smuzhiyun 206*4882a593SmuzhiyunPACKAGES =+ "\ 207*4882a593Smuzhiyun libpipewire \ 208*4882a593Smuzhiyun ${PN}-tools \ 209*4882a593Smuzhiyun ${PN}-pulse \ 210*4882a593Smuzhiyun ${PN}-alsa \ 211*4882a593Smuzhiyun ${PN}-jack \ 212*4882a593Smuzhiyun ${PN}-spa-plugins \ 213*4882a593Smuzhiyun ${PN}-spa-plugins-meta \ 214*4882a593Smuzhiyun ${PN}-spa-tools \ 215*4882a593Smuzhiyun ${PN}-modules \ 216*4882a593Smuzhiyun ${PN}-modules-meta \ 217*4882a593Smuzhiyun ${PN}-alsa-card-profile \ 218*4882a593Smuzhiyun ${PN}-v4l2 \ 219*4882a593Smuzhiyun gstreamer1.0-pipewire \ 220*4882a593Smuzhiyun" 221*4882a593Smuzhiyun 222*4882a593SmuzhiyunPACKAGES_DYNAMIC = "^${PN}-spa-plugins.* ^${PN}-modules.*" 223*4882a593Smuzhiyun 224*4882a593SmuzhiyunSYSTEMD_SERVICE:${PN} = "${@bb.utils.contains('PACKAGECONFIG', 'systemd-system-service', 'pipewire.service', '', d)}" 225*4882a593SmuzhiyunCONFFILES:${PN} += "${datadir}/pipewire/pipewire.conf" 226*4882a593SmuzhiyunFILES:${PN} = " \ 227*4882a593Smuzhiyun ${datadir}/pipewire/pipewire.conf \ 228*4882a593Smuzhiyun ${systemd_system_unitdir}/pipewire.* \ 229*4882a593Smuzhiyun ${systemd_user_unitdir}/pipewire.* \ 230*4882a593Smuzhiyun ${bindir}/pipewire \ 231*4882a593Smuzhiyun" 232*4882a593Smuzhiyun 233*4882a593SmuzhiyunFILES:${PN}-dev += " \ 234*4882a593Smuzhiyun ${libdir}/${PW_MODULE_SUBDIR}/jack/libjack*.so \ 235*4882a593Smuzhiyun" 236*4882a593Smuzhiyun 237*4882a593SmuzhiyunCONFFILES:libpipewire += "${datadir}/pipewire/client.conf" 238*4882a593SmuzhiyunFILES:libpipewire = " \ 239*4882a593Smuzhiyun ${datadir}/pipewire/client.conf \ 240*4882a593Smuzhiyun ${libdir}/libpipewire-*.so.* \ 241*4882a593Smuzhiyun" 242*4882a593Smuzhiyun# Add the bare minimum modules and plugins required to be able 243*4882a593Smuzhiyun# to use libpipewire. Without these, it is essentially unusable. 244*4882a593SmuzhiyunRDEPENDS:libpipewire += " \ 245*4882a593Smuzhiyun ${PN}-modules-client-node \ 246*4882a593Smuzhiyun ${PN}-modules-protocol-native \ 247*4882a593Smuzhiyun ${PN}-spa-plugins-support \ 248*4882a593Smuzhiyun" 249*4882a593Smuzhiyun 250*4882a593SmuzhiyunFILES:${PN}-tools = " \ 251*4882a593Smuzhiyun ${bindir}/pw-cat \ 252*4882a593Smuzhiyun ${bindir}/pw-cli \ 253*4882a593Smuzhiyun ${bindir}/pw-dot \ 254*4882a593Smuzhiyun ${bindir}/pw-dsdplay \ 255*4882a593Smuzhiyun ${bindir}/pw-dump \ 256*4882a593Smuzhiyun ${bindir}/pw-link \ 257*4882a593Smuzhiyun ${bindir}/pw-loopback \ 258*4882a593Smuzhiyun ${bindir}/pw-metadata \ 259*4882a593Smuzhiyun ${bindir}/pw-mididump \ 260*4882a593Smuzhiyun ${bindir}/pw-midiplay \ 261*4882a593Smuzhiyun ${bindir}/pw-midirecord \ 262*4882a593Smuzhiyun ${bindir}/pw-mon \ 263*4882a593Smuzhiyun ${bindir}/pw-play \ 264*4882a593Smuzhiyun ${bindir}/pw-profiler \ 265*4882a593Smuzhiyun ${bindir}/pw-record \ 266*4882a593Smuzhiyun ${bindir}/pw-reserve \ 267*4882a593Smuzhiyun ${bindir}/pw-top \ 268*4882a593Smuzhiyun" 269*4882a593Smuzhiyun 270*4882a593Smuzhiyun# This is a shim daemon that is intended to be used as a 271*4882a593Smuzhiyun# drop-in PulseAudio replacement, providing a pulseaudio-compatible 272*4882a593Smuzhiyun# socket that can be used by applications that use libpulse. 273*4882a593SmuzhiyunCONFFILES:${PN}-pulse += "${datadir}/pipewire/pipewire-pulse.conf" 274*4882a593SmuzhiyunFILES:${PN}-pulse = " \ 275*4882a593Smuzhiyun ${datadir}/pipewire/pipewire-pulse.conf \ 276*4882a593Smuzhiyun ${systemd_system_unitdir}/pipewire-pulse.* \ 277*4882a593Smuzhiyun ${systemd_user_unitdir}/pipewire-pulse.* \ 278*4882a593Smuzhiyun ${bindir}/pipewire-pulse \ 279*4882a593Smuzhiyun" 280*4882a593SmuzhiyunRDEPENDS:${PN}-pulse += " \ 281*4882a593Smuzhiyun ${PN}-modules-protocol-pulse \ 282*4882a593Smuzhiyun" 283*4882a593Smuzhiyun 284*4882a593Smuzhiyun# ALSA plugin to redirect audio to pipewire. 285*4882a593SmuzhiyunFILES:${PN}-alsa = "\ 286*4882a593Smuzhiyun ${libdir}/alsa-lib/* \ 287*4882a593Smuzhiyun ${datadir}/alsa/alsa.conf.d/* \ 288*4882a593Smuzhiyun" 289*4882a593Smuzhiyun 290*4882a593Smuzhiyun# JACK drop-in libraries to redirect audio to pipewire. 291*4882a593SmuzhiyunCONFFILES:${PN}-jack = "${datadir}/pipewire/jack.conf" 292*4882a593SmuzhiyunFILES:${PN}-jack = "\ 293*4882a593Smuzhiyun ${bindir}/pw-jack \ 294*4882a593Smuzhiyun ${datadir}/pipewire/jack.conf \ 295*4882a593Smuzhiyun ${libdir}/${PW_MODULE_SUBDIR}/jack/libjack*.so.* \ 296*4882a593Smuzhiyun" 297*4882a593Smuzhiyun 298*4882a593Smuzhiyun# Dynamic SPA plugin packages (see set_dynamic_metapkg_rdepends). 299*4882a593SmuzhiyunFILES:${PN}-spa-plugins = "" 300*4882a593SmuzhiyunRRECOMMENDS:${PN}-spa-plugins += "${PN}-spa-plugins-meta" 301*4882a593Smuzhiyun 302*4882a593SmuzhiyunFILES:${PN}-spa-plugins-bluez5 += " \ 303*4882a593Smuzhiyun ${datadir}/${SPA_SUBDIR}/bluez5/* \ 304*4882a593Smuzhiyun" 305*4882a593Smuzhiyun 306*4882a593SmuzhiyunFILES:${PN}-spa-tools = " \ 307*4882a593Smuzhiyun ${bindir}/spa-* \ 308*4882a593Smuzhiyun" 309*4882a593Smuzhiyun 310*4882a593Smuzhiyun# Dynamic PipeWire module packages (see set_dynamic_metapkg_rdepends). 311*4882a593SmuzhiyunFILES:${PN}-modules = "" 312*4882a593SmuzhiyunRRECOMMENDS:${PN}-modules += "${PN}-modules-meta" 313*4882a593Smuzhiyun 314*4882a593SmuzhiyunCONFFILES:${PN}-modules-rt = "${datadir}/pipewire/client-rt.conf" 315*4882a593SmuzhiyunFILES:${PN}-modules-rt += " \ 316*4882a593Smuzhiyun ${datadir}/pipewire/client-rt.conf \ 317*4882a593Smuzhiyun " 318*4882a593Smuzhiyun 319*4882a593SmuzhiyunCONFFILES:${PN}-modules-filter-chain = "${datadir}/pipewire/filter-chain/*" 320*4882a593SmuzhiyunFILES:${PN}-modules-filter-chain += " \ 321*4882a593Smuzhiyun ${datadir}/pipewire/filter-chain/* \ 322*4882a593Smuzhiyun" 323*4882a593Smuzhiyun 324*4882a593SmuzhiyunFILES:${PN}-alsa-card-profile = " \ 325*4882a593Smuzhiyun ${datadir}/alsa-card-profile/* \ 326*4882a593Smuzhiyun ${nonarch_base_libdir}/udev/rules.d/90-pipewire-alsa.rules \ 327*4882a593Smuzhiyun" 328*4882a593Smuzhiyun 329*4882a593Smuzhiyun# V4L2 interface emulator for sending/receiving data between PipeWire and V4L2 applications. 330*4882a593SmuzhiyunFILES:${PN}-v4l2 += " \ 331*4882a593Smuzhiyun ${bindir}/pw-v4l2 \ 332*4882a593Smuzhiyun ${libdir}/${PW_MODULE_SUBDIR}/v4l2/libpw-v4l2.so \ 333*4882a593Smuzhiyun" 334*4882a593Smuzhiyun 335*4882a593SmuzhiyunFILES:gstreamer1.0-pipewire = " \ 336*4882a593Smuzhiyun ${libdir}/gstreamer-1.0/* \ 337*4882a593Smuzhiyun" 338