Cleaned up phinephone stuff
This commit is contained in:
		@@ -1 +0,0 @@
 | 
			
		||||
DIST megapixels-1.6.1.tar.gz 96688 BLAKE2B 929471b57864b167f3caf4bc1fc406fb573b8955f42c89bad40310e936013b7e670605f6e9c0a1f2f526dfd73778a06f69445bac19bbf292183fe871a9c0129d SHA512 8a5447561700c98984048520e2658b5840e2a04edc75c1246ec6ec3c6ff33d26d84df87581ce7727836e1a224e3b051a3ac6eedcb0fa851d0d355c6ae946e6d2
 | 
			
		||||
@@ -1,23 +0,0 @@
 | 
			
		||||
From 432d3851d49e4f8a9ef196eb0887cef428ba56c6 Mon Sep 17 00:00:00 2001
 | 
			
		||||
From: kgmt0 <kritphong@teknik.io>
 | 
			
		||||
Date: Sat, 2 Jul 2022 12:15:22 +0700
 | 
			
		||||
Subject: [PATCH] device: Make mp_device_setup_link() support non-zero pad
 | 
			
		||||
 indices
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 src/device.c | 2 +-
 | 
			
		||||
 1 file changed, 1 insertion(+), 1 deletion(-)
 | 
			
		||||
 | 
			
		||||
diff --git a/src/device.c b/src/device.c
 | 
			
		||||
index b4d5f80..9e2db00 100644
 | 
			
		||||
--- a/src/device.c
 | 
			
		||||
+++ b/src/device.c
 | 
			
		||||
@@ -197,7 +197,7 @@ mp_device_setup_link(MPDevice *device,
 | 
			
		||||
         g_return_val_if_fail(sink_pad, false);
 | 
			
		||||
 
 | 
			
		||||
         return mp_device_setup_entity_link(
 | 
			
		||||
-                device, source_pad->entity_id, sink_pad->entity_id, 0, 0, enabled);
 | 
			
		||||
+                device, source_pad->entity_id, sink_pad->entity_id, source_pad->index, sink_pad->index, enabled);
 | 
			
		||||
 }
 | 
			
		||||
 
 | 
			
		||||
 bool
 | 
			
		||||
@@ -1,576 +0,0 @@
 | 
			
		||||
From 8103e662a484c0887d29f11a1284f85ff34d0248 Mon Sep 17 00:00:00 2001
 | 
			
		||||
From: kgmt0 <kritphong@teknik.io>
 | 
			
		||||
Date: Thu, 1 Dec 2022 00:13:27 -0600
 | 
			
		||||
Subject: [PATCH] WIP: Support Pinephone Pro
 | 
			
		||||
 | 
			
		||||
Both cameras work now but the quality is very poor.
 | 
			
		||||
 | 
			
		||||
Tested with Linux 6.1.12-1 from Arch Linux ARM (linux-megi).
 | 
			
		||||
---
 | 
			
		||||
 config/motorola,osprey.ini      |   1 +
 | 
			
		||||
 config/pine64,pinephone-pro.ini |  49 +++++++++
 | 
			
		||||
 config/xiaomi,scorpio.ini       |   1 +
 | 
			
		||||
 meson.build                     |   1 +
 | 
			
		||||
 src/camera.c                    |   8 +-
 | 
			
		||||
 src/device.c                    | 118 ++++++++++++++++++++++
 | 
			
		||||
 src/device.h                    |  15 +++
 | 
			
		||||
 src/io_pipeline.c               | 173 +++++++++++++++++++-------------
 | 
			
		||||
 8 files changed, 296 insertions(+), 70 deletions(-)
 | 
			
		||||
 create mode 100644 config/pine64,pinephone-pro.ini
 | 
			
		||||
 | 
			
		||||
diff --git a/config/motorola,osprey.ini b/config/motorola,osprey.ini
 | 
			
		||||
index ab8990d..5809a8e 100644
 | 
			
		||||
--- a/config/motorola,osprey.ini
 | 
			
		||||
+++ b/config/motorola,osprey.ini
 | 
			
		||||
@@ -15,3 +15,4 @@ preview-rate=30
 | 
			
		||||
 preview-fmt=RGGB10P
 | 
			
		||||
 rotate=270
 | 
			
		||||
 media-links=msm_csiphy0:1->msm_csid0:0,msm_csid0:1->msm_ispif0:0,msm_ispif0:1->msm_vfe0_rdi0:0
 | 
			
		||||
+media-formats=msm_csiphy0:1:RGGB10P:4096:2304,msm_csid0:0:RGGB10P:4096:2304,msm_csid0:1:RGGB10P:4096:2304,msm_ispif0:0:RGGB10P:4096:2304,msm_ispif0:1:RGGB10P:4096:2304,msm_vfe0_rdi0:0:RGGB10P:4096:2304
 | 
			
		||||
diff --git a/config/pine64,pinephone-pro.ini b/config/pine64,pinephone-pro.ini
 | 
			
		||||
new file mode 100644
 | 
			
		||||
index 0000000..b7a2dcd
 | 
			
		||||
--- /dev/null
 | 
			
		||||
+++ b/config/pine64,pinephone-pro.ini
 | 
			
		||||
@@ -0,0 +1,49 @@
 | 
			
		||||
+[device]
 | 
			
		||||
+make=PINE64
 | 
			
		||||
+model=PinePhone
 | 
			
		||||
+
 | 
			
		||||
+[rear]
 | 
			
		||||
+driver=imx258 1-001a
 | 
			
		||||
+media-driver=rkisp1
 | 
			
		||||
+capture-width=1048
 | 
			
		||||
+capture-height=780
 | 
			
		||||
+capture-rate=30
 | 
			
		||||
+capture-fmt=RGGB8
 | 
			
		||||
+preview-width=1048
 | 
			
		||||
+preview-height=780
 | 
			
		||||
+preview-rate=30
 | 
			
		||||
+preview-fmt=RGGB8
 | 
			
		||||
+rotate=270
 | 
			
		||||
+mirrored=false
 | 
			
		||||
+blacklevel=3
 | 
			
		||||
+whitelevel=255
 | 
			
		||||
+focallength=2.35
 | 
			
		||||
+cropfactor=10.81
 | 
			
		||||
+fnumber=2.2
 | 
			
		||||
+iso-min=100
 | 
			
		||||
+iso-max=64000
 | 
			
		||||
+flash-path=/sys/class/leds/white:flash
 | 
			
		||||
+media-links=imx258 1-001a:0->rkisp1_csi:0,rkisp1_csi:1->rkisp1_isp:0,rkisp1_isp:2->rkisp1_resizer_mainpath:0
 | 
			
		||||
+media-formats=imx258 1-001a:0:RGGB10P:1048:780,rkisp1_csi:0:RGGB10P:1048:780,rkisp1_isp:0:RGGB10P:1048:780,rkisp1_isp:2:RGGB8:1048:780,rkisp1_resizer_mainpath:0:RGGB8:1048:780,rkisp1_resizer_mainpath:1:RGGB8:1048:780
 | 
			
		||||
+media-crops=rkisp1_isp:0:0:0:1048:780,rkisp1_isp:2:0:0:1048:780,rkisp1_resizer_mainpath:0:0:0:1048:768
 | 
			
		||||
+
 | 
			
		||||
+[front]
 | 
			
		||||
+driver=ov8858
 | 
			
		||||
+media-driver=rkisp1
 | 
			
		||||
+capture-width=3264
 | 
			
		||||
+capture-height=2448
 | 
			
		||||
+capture-rate=30
 | 
			
		||||
+capture-fmt=BGGR8
 | 
			
		||||
+preview-width=3264
 | 
			
		||||
+preview-height=2448
 | 
			
		||||
+preview-rate=30
 | 
			
		||||
+preview-fmt=BGGR8
 | 
			
		||||
+rotate=90
 | 
			
		||||
+mirrored=true
 | 
			
		||||
+focallength=2.94
 | 
			
		||||
+cropfactor=12.7
 | 
			
		||||
+fnumber=2.4
 | 
			
		||||
+flash-display=true
 | 
			
		||||
+media-links=ov8858:0->rkisp1_csi:0,rkisp1_csi:1->rkisp1_isp:0,rkisp1_isp:2->rkisp1_resizer_mainpath:0,rkisp1_resizer_mainpath:1->rkisp1_mainpath:0
 | 
			
		||||
+media-formats=ov8858:0:BGGR10P:3264:2448,rkisp1_csi:0:BGGR10P:3264:2448,rkisp1_isp:0:BGGR10P:3264:2448,rkisp1_isp:2:BGGR8:3264:2448,rkisp1_resizer_mainpath:0:BGGR8:3264:2448,rkisp1_resizer_mainpath:1:BGGR8:3264:2448
 | 
			
		||||
+media-crops=rkisp1_isp:0:0:0:3264:2448,rkisp1_isp:2:0:0:3264:2448,rkisp1_resizer_mainpath:0:0:0:3264:768
 | 
			
		||||
diff --git a/config/xiaomi,scorpio.ini b/config/xiaomi,scorpio.ini
 | 
			
		||||
index cce6d49..14b7f29 100644
 | 
			
		||||
--- a/config/xiaomi,scorpio.ini
 | 
			
		||||
+++ b/config/xiaomi,scorpio.ini
 | 
			
		||||
@@ -15,3 +15,4 @@ preview-rate=30
 | 
			
		||||
 preview-fmt=RGGB10P
 | 
			
		||||
 rotate=90
 | 
			
		||||
 media-links=imx318 3-001a:0->msm_csiphy0:0,msm_csiphy0:1->msm_csid0:0,msm_csid0:1->msm_ispif0:0,msm_ispif0:1->msm_vfe0_rdi0:0
 | 
			
		||||
+media-formats=imx318 3-001a:0:RGGB10P:3840:2160,msm_csiphy0:0:RGGB10P:3840:2160,msm_csiphy0:1:RGGB10P:3840:2160,msm_csid0:0:RGGB10P:3840:2160,msm_csid0:1:RGGB10P:3840:2160,msm_ispif0:0:RGGB10P:3840:2160,msm_ispif0:1:RGGB10P:3840:2160,msm_vfe0_rdi0:0:RGGB10P:3840:2160
 | 
			
		||||
diff --git a/meson.build b/meson.build
 | 
			
		||||
index a9b9b4e..adc2359 100644
 | 
			
		||||
--- a/meson.build
 | 
			
		||||
+++ b/meson.build
 | 
			
		||||
@@ -72,6 +72,7 @@ install_data(
 | 
			
		||||
     'config/pine64,pinephone-1.0.ini',
 | 
			
		||||
     'config/pine64,pinephone-1.1.ini',
 | 
			
		||||
     'config/pine64,pinephone-1.2.ini',
 | 
			
		||||
+    'config/pine64,pinephone-pro.ini',
 | 
			
		||||
     'config/pine64,pinetab.ini',
 | 
			
		||||
     'config/xiaomi,scorpio.ini',
 | 
			
		||||
   ],
 | 
			
		||||
diff --git a/src/camera.c b/src/camera.c
 | 
			
		||||
index 5519bbd..588c164 100644
 | 
			
		||||
--- a/src/camera.c
 | 
			
		||||
+++ b/src/camera.c
 | 
			
		||||
@@ -327,8 +327,12 @@ mp_camera_set_mode(MPCamera *camera, MPMode *mode)
 | 
			
		||||
                 }
 | 
			
		||||
 
 | 
			
		||||
                 // Update the mode
 | 
			
		||||
-                mode->pixel_format =
 | 
			
		||||
-                        mp_pixel_format_from_v4l_bus_code(fmt.format.code);
 | 
			
		||||
+
 | 
			
		||||
+                // TODO: Some how the format gets changed to YUYV if this isn't
 | 
			
		||||
+                // commented out.
 | 
			
		||||
+                //mode->pixel_format =
 | 
			
		||||
+                //        mp_pixel_format_from_v4l_bus_code(fmt.format.code);
 | 
			
		||||
+
 | 
			
		||||
                 mode->frame_interval = interval.interval;
 | 
			
		||||
                 mode->width = fmt.format.width;
 | 
			
		||||
                 mode->height = fmt.format.height;
 | 
			
		||||
diff --git a/src/device.c b/src/device.c
 | 
			
		||||
index 9e2db00..09e711b 100644
 | 
			
		||||
--- a/src/device.c
 | 
			
		||||
+++ b/src/device.c
 | 
			
		||||
@@ -8,6 +8,8 @@
 | 
			
		||||
 #include <string.h>
 | 
			
		||||
 #include <sys/ioctl.h>
 | 
			
		||||
 #include <unistd.h>
 | 
			
		||||
+#include <linux/v4l2-subdev.h>
 | 
			
		||||
+#include <linux/media.h>
 | 
			
		||||
 
 | 
			
		||||
 bool
 | 
			
		||||
 mp_find_device_path(struct media_v2_intf_devnode devnode, char *path, int length)
 | 
			
		||||
@@ -73,6 +75,46 @@ xioctl(int fd, int request, void *arg)
 | 
			
		||||
         return r;
 | 
			
		||||
 }
 | 
			
		||||
 
 | 
			
		||||
+static int
 | 
			
		||||
+mp_device_get_fd_by_name(const MPDevice *device, const char *driver_name)
 | 
			
		||||
+{
 | 
			
		||||
+        struct media_entity_desc desc = {};
 | 
			
		||||
+
 | 
			
		||||
+        desc.id |= MEDIA_ENT_ID_FLAG_NEXT;
 | 
			
		||||
+
 | 
			
		||||
+        while(true) {
 | 
			
		||||
+                desc.id |= MEDIA_ENT_ID_FLAG_NEXT;
 | 
			
		||||
+                if(xioctl(device->fd, MEDIA_IOC_ENUM_ENTITIES, &desc) == -1) {
 | 
			
		||||
+                        errno_printerr("MEDIA_IOC_ENUM_ENTITIES");
 | 
			
		||||
+                        return -1;
 | 
			
		||||
+                }
 | 
			
		||||
+
 | 
			
		||||
+                if(strncmp(desc.name, driver_name, 32) == 0) {
 | 
			
		||||
+                        const uint32_t major = desc.dev.major;
 | 
			
		||||
+                        const uint32_t minor = desc.dev.minor;
 | 
			
		||||
+                        char path[256];
 | 
			
		||||
+                        int rc = snprintf(path, 256, "/dev/char/%u:%u", major, minor);
 | 
			
		||||
+
 | 
			
		||||
+                        return rc > 0 ? open(path, O_RDWR) : -1;
 | 
			
		||||
+                }
 | 
			
		||||
+        }
 | 
			
		||||
+
 | 
			
		||||
+        return -1;
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
+static bool
 | 
			
		||||
+mp_xioctl(const MPDevice *device, const char *driver_name, unsigned long request, void *argp)
 | 
			
		||||
+{
 | 
			
		||||
+        int fd = mp_device_get_fd_by_name(device, driver_name);
 | 
			
		||||
+
 | 
			
		||||
+        if(fd < 0)
 | 
			
		||||
+        {
 | 
			
		||||
+                printf("ERROR: device with driver name %s not found\n", driver_name);
 | 
			
		||||
+        }
 | 
			
		||||
+
 | 
			
		||||
+        return fd >= 0 && xioctl(fd, request, argp) != -1;
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
 MPDevice *
 | 
			
		||||
 mp_device_find(const char *driver_name, const char *dev_name)
 | 
			
		||||
 {
 | 
			
		||||
@@ -183,6 +225,42 @@ mp_device_setup_entity_link(MPDevice *device,
 | 
			
		||||
         return true;
 | 
			
		||||
 }
 | 
			
		||||
 
 | 
			
		||||
+void
 | 
			
		||||
+mp_device_setup_media_link(MPDevice *device,
 | 
			
		||||
+                           const struct mp_media_link_config *cfg,
 | 
			
		||||
+                           bool enable)
 | 
			
		||||
+{
 | 
			
		||||
+        const struct media_v2_entity *source_entity =
 | 
			
		||||
+                mp_device_find_entity(device, cfg->source_name);
 | 
			
		||||
+
 | 
			
		||||
+        const struct media_v2_entity *target_entity =
 | 
			
		||||
+                mp_device_find_entity(device, cfg->target_name);
 | 
			
		||||
+
 | 
			
		||||
+        mp_device_setup_entity_link(device,
 | 
			
		||||
+                                    source_entity->id,
 | 
			
		||||
+                                    target_entity->id,
 | 
			
		||||
+                                    cfg->source_port,
 | 
			
		||||
+                                    cfg->target_port,
 | 
			
		||||
+                                    enable);
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
+void
 | 
			
		||||
+mp_device_setup_media_link_pad_crop(MPDevice *device,
 | 
			
		||||
+                                    const struct mp_media_crop_config *crop)
 | 
			
		||||
+{
 | 
			
		||||
+        struct v4l2_subdev_crop v4l2_crop = {};
 | 
			
		||||
+        v4l2_crop.pad = crop->pad;
 | 
			
		||||
+        v4l2_crop.which = V4L2_SUBDEV_FORMAT_ACTIVE;
 | 
			
		||||
+        v4l2_crop.rect.top = crop->top;
 | 
			
		||||
+        v4l2_crop.rect.left = crop->left;
 | 
			
		||||
+        v4l2_crop.rect.width = crop->width;
 | 
			
		||||
+        v4l2_crop.rect.height = crop->height;
 | 
			
		||||
+
 | 
			
		||||
+        if(!mp_xioctl(device, crop->name, VIDIOC_SUBDEV_S_CROP, &v4l2_crop)) {
 | 
			
		||||
+                errno_printerr("VIDIOC_SUBDEV_S_CROP");
 | 
			
		||||
+        }
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
 bool
 | 
			
		||||
 mp_device_setup_link(MPDevice *device,
 | 
			
		||||
                      uint32_t source_pad_id,
 | 
			
		||||
@@ -237,6 +315,46 @@ mp_entity_pad_set_format(MPDevice *device,
 | 
			
		||||
         return true;
 | 
			
		||||
 }
 | 
			
		||||
 
 | 
			
		||||
+const struct media_v2_pad *
 | 
			
		||||
+mp_device_get_pad_at_index_from_entity(const MPDevice *device, uint32_t entity_id, uint32_t index)
 | 
			
		||||
+{
 | 
			
		||||
+        for (int i = 0; i < device->num_pads; ++i) {
 | 
			
		||||
+                if (device->pads[i].entity_id == entity_id && index-- == 0) {
 | 
			
		||||
+                        return &device->pads[i];
 | 
			
		||||
+                }
 | 
			
		||||
+        }
 | 
			
		||||
+        return NULL;
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
+bool
 | 
			
		||||
+mp_device_setup_link_by_name(MPDevice *device,
 | 
			
		||||
+                             const char *source_entity_name,
 | 
			
		||||
+                             uint32_t source_pad_index,
 | 
			
		||||
+                             const char *sink_entity_name,
 | 
			
		||||
+                             uint32_t sink_pad_index,
 | 
			
		||||
+                             bool enabled)
 | 
			
		||||
+{
 | 
			
		||||
+        const struct media_v2_entity *source_entity =
 | 
			
		||||
+                mp_device_find_entity
 | 
			
		||||
+                (device, source_entity_name);
 | 
			
		||||
+        const struct media_v2_entity *sink_entity =
 | 
			
		||||
+                mp_device_find_entity
 | 
			
		||||
+                (device, sink_entity_name);
 | 
			
		||||
+
 | 
			
		||||
+        struct media_link_desc link = {};
 | 
			
		||||
+        link.flags = enabled ? MEDIA_LNK_FL_ENABLED : 0;
 | 
			
		||||
+        link.source.entity = source_entity->id;
 | 
			
		||||
+        link.source.index = source_pad_index;
 | 
			
		||||
+        link.sink.entity = sink_entity->id;
 | 
			
		||||
+        link.sink.index = sink_pad_index;
 | 
			
		||||
+        if (xioctl(device->fd, MEDIA_IOC_SETUP_LINK, &link) == -1) {
 | 
			
		||||
+                errno_printerr("MEDIA_IOC_SETUP_LINK");
 | 
			
		||||
+                return false;
 | 
			
		||||
+        }
 | 
			
		||||
+
 | 
			
		||||
+        return true;
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
 const struct media_v2_entity *
 | 
			
		||||
 mp_device_find_entity(const MPDevice *device, const char *driver_name)
 | 
			
		||||
 {
 | 
			
		||||
diff --git a/src/device.h b/src/device.h
 | 
			
		||||
index 1894c67..c9b3477 100644
 | 
			
		||||
--- a/src/device.h
 | 
			
		||||
+++ b/src/device.h
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
 #pragma once
 | 
			
		||||
 
 | 
			
		||||
 #include "mode.h"
 | 
			
		||||
+#include "camera_config.h"
 | 
			
		||||
 
 | 
			
		||||
 #include <linux/media.h>
 | 
			
		||||
 #include <stdbool.h>
 | 
			
		||||
@@ -26,6 +27,10 @@ bool mp_device_setup_entity_link(MPDevice *device,
 | 
			
		||||
                                  uint32_t sink_index,
 | 
			
		||||
                                  bool enabled);
 | 
			
		||||
 
 | 
			
		||||
+void mp_device_setup_media_link(MPDevice *device,
 | 
			
		||||
+                                const struct mp_media_link_config *cfg,
 | 
			
		||||
+                                bool enable);
 | 
			
		||||
+
 | 
			
		||||
 bool mp_device_setup_link(MPDevice *device,
 | 
			
		||||
                           uint32_t source_pad_id,
 | 
			
		||||
                           uint32_t sink_pad_id,
 | 
			
		||||
@@ -36,6 +41,13 @@ bool mp_entity_pad_set_format(MPDevice *device,
 | 
			
		||||
                               uint32_t pad,
 | 
			
		||||
                               MPMode *mode);
 | 
			
		||||
 
 | 
			
		||||
+bool mp_device_setup_link_by_name(MPDevice *device,
 | 
			
		||||
+                                  const char *source_entity_name,
 | 
			
		||||
+                                  uint32_t source_pad_index,
 | 
			
		||||
+                                  const char *sink_entity_name,
 | 
			
		||||
+                                  uint32_t sink_pad_index,
 | 
			
		||||
+                                  bool enabled);
 | 
			
		||||
+
 | 
			
		||||
 const struct media_device_info *mp_device_get_info(const MPDevice *device);
 | 
			
		||||
 const struct media_v2_entity *mp_device_find_entity(const MPDevice *device,
 | 
			
		||||
                                                     const char *driver_name);
 | 
			
		||||
@@ -81,3 +93,6 @@ MPDevice *mp_device_list_remove(MPDeviceList **device_list);
 | 
			
		||||
 MPDevice *mp_device_list_get(const MPDeviceList *device_list);
 | 
			
		||||
 const char *mp_device_list_get_path(const MPDeviceList *device_list);
 | 
			
		||||
 MPDeviceList *mp_device_list_next(const MPDeviceList *device_list);
 | 
			
		||||
+
 | 
			
		||||
+void mp_device_setup_media_link_pad_crop(MPDevice *device,
 | 
			
		||||
+                                         const struct mp_media_crop_config *crop);
 | 
			
		||||
diff --git a/src/io_pipeline.c b/src/io_pipeline.c
 | 
			
		||||
index e9f80c2..135b344 100644
 | 
			
		||||
--- a/src/io_pipeline.c
 | 
			
		||||
+++ b/src/io_pipeline.c
 | 
			
		||||
@@ -47,7 +47,8 @@ struct camera_info {
 | 
			
		||||
         // int media_fd;
 | 
			
		||||
 
 | 
			
		||||
         // struct mp_media_link media_links[MP_MAX_LINKS];
 | 
			
		||||
-        // int num_media_links;
 | 
			
		||||
+        struct mp_media_link_config media_links[MP_MAX_LINKS];
 | 
			
		||||
+        int num_media_links;
 | 
			
		||||
 
 | 
			
		||||
         // int gain_ctrl;
 | 
			
		||||
 };
 | 
			
		||||
@@ -100,30 +101,41 @@ static bool want_focus = false;
 | 
			
		||||
 static MPPipeline *pipeline;
 | 
			
		||||
 static GSource *capture_source;
 | 
			
		||||
 
 | 
			
		||||
+static void
 | 
			
		||||
+mp_setup_media_link_pad_crops(struct device_info *dev_info,
 | 
			
		||||
+                              const struct mp_media_crop_config media_crops[],
 | 
			
		||||
+                              int num_media_crops)
 | 
			
		||||
+{
 | 
			
		||||
+        for(int i = 0; i < num_media_crops; i++) {
 | 
			
		||||
+                const struct mp_media_crop_config *crop = media_crops + i;
 | 
			
		||||
+                mp_device_setup_media_link_pad_crop(dev_info->device, crop);
 | 
			
		||||
+        }
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
 static void
 | 
			
		||||
 mp_setup_media_link_pad_formats(struct device_info *dev_info,
 | 
			
		||||
-                                const struct mp_media_link_config media_links[],
 | 
			
		||||
-                                int num_media_links,
 | 
			
		||||
-                                MPMode *mode)
 | 
			
		||||
+                                const struct mp_media_format_config media_formats[],
 | 
			
		||||
+                                int num_media_formats)
 | 
			
		||||
 {
 | 
			
		||||
-        const struct media_v2_entity *entities[2];
 | 
			
		||||
-        int ports[2];
 | 
			
		||||
-        for (int i = 0; i < num_media_links; i++) {
 | 
			
		||||
-                entities[0] = mp_device_find_entity(
 | 
			
		||||
-                        dev_info->device, (const char *)media_links[i].source_name);
 | 
			
		||||
-                entities[1] = mp_device_find_entity(
 | 
			
		||||
-                        dev_info->device, (const char *)media_links[i].target_name);
 | 
			
		||||
-                ports[0] = media_links[i].source_port;
 | 
			
		||||
-                ports[1] = media_links[i].target_port;
 | 
			
		||||
-
 | 
			
		||||
-                for (int j = 0; j < 2; j++)
 | 
			
		||||
-                        if (!mp_entity_pad_set_format(
 | 
			
		||||
-                                    dev_info->device, entities[j], ports[j], mode)) {
 | 
			
		||||
-                                g_printerr("Failed to set %s:%d format\n",
 | 
			
		||||
-                                           entities[j]->name,
 | 
			
		||||
-                                           ports[j]);
 | 
			
		||||
-                                exit(EXIT_FAILURE);
 | 
			
		||||
-                        }
 | 
			
		||||
+        for(int i = 0; i < num_media_formats; i++) {
 | 
			
		||||
+                const struct mp_media_format_config *format =
 | 
			
		||||
+                        media_formats + i;
 | 
			
		||||
+                const struct media_v2_entity *entity =
 | 
			
		||||
+                        mp_device_find_entity
 | 
			
		||||
+                        (dev_info->device, format->name);
 | 
			
		||||
+                MPMode *mode =
 | 
			
		||||
+                        (MPMode *)
 | 
			
		||||
+                        &format->mode;
 | 
			
		||||
+                bool successful =
 | 
			
		||||
+                        mp_entity_pad_set_format
 | 
			
		||||
+                        (dev_info->device, entity, format->pad, mode);
 | 
			
		||||
+
 | 
			
		||||
+                if(!successful) {
 | 
			
		||||
+                        g_printerr(     "Failed to set %s:%d format\n",
 | 
			
		||||
+                                        entity->name,
 | 
			
		||||
+                                        format->pad );
 | 
			
		||||
+                        exit(EXIT_FAILURE);
 | 
			
		||||
+                }
 | 
			
		||||
         }
 | 
			
		||||
 }
 | 
			
		||||
 
 | 
			
		||||
@@ -224,6 +236,9 @@ setup_camera(MPDeviceList **device_list, const struct mp_camera_config *config)
 | 
			
		||||
                 struct device_info *dev_info = &devices[device_index];
 | 
			
		||||
 
 | 
			
		||||
                 info->device_index = device_index;
 | 
			
		||||
+                info->num_media_links = config->num_media_links;
 | 
			
		||||
+
 | 
			
		||||
+                memcpy(info->media_links, config->media_links, MP_MAX_LINKS * sizeof(struct mp_media_link_config));
 | 
			
		||||
 
 | 
			
		||||
                 const struct media_v2_entity *entity =
 | 
			
		||||
                         mp_device_find_entity(dev_info->device, config->dev_name);
 | 
			
		||||
@@ -238,11 +253,33 @@ setup_camera(MPDeviceList **device_list, const struct mp_camera_config *config)
 | 
			
		||||
 
 | 
			
		||||
                 info->pad_id = pad->id;
 | 
			
		||||
 
 | 
			
		||||
-                // Make sure the camera starts out as disabled
 | 
			
		||||
-                mp_device_setup_link(dev_info->device,
 | 
			
		||||
-                                     info->pad_id,
 | 
			
		||||
-                                     dev_info->interface_pad_id,
 | 
			
		||||
-                                     false);
 | 
			
		||||
+                // Only disable the camera here if no links are defined in the
 | 
			
		||||
+                // config file.
 | 
			
		||||
+                if(config->num_media_links == 0)
 | 
			
		||||
+                {
 | 
			
		||||
+                        // Make sure the camera starts out as disabled
 | 
			
		||||
+                        mp_device_setup_link(dev_info->device,
 | 
			
		||||
+                                             info->pad_id,
 | 
			
		||||
+                                             dev_info->interface_pad_id,
 | 
			
		||||
+                                             false);
 | 
			
		||||
+                }
 | 
			
		||||
+
 | 
			
		||||
+                // If links are defined, disable all of them.
 | 
			
		||||
+                const size_t num_links =
 | 
			
		||||
+                        mp_device_get_num_links(dev_info->device);
 | 
			
		||||
+                const struct media_v2_link *links =
 | 
			
		||||
+                        mp_device_get_links(dev_info->device);
 | 
			
		||||
+
 | 
			
		||||
+                for(int i = 0; i < num_links; i++) {
 | 
			
		||||
+                        const struct media_v2_link *link = links + i;
 | 
			
		||||
+
 | 
			
		||||
+                        if(!(link->flags & MEDIA_LNK_FL_IMMUTABLE)) {
 | 
			
		||||
+                                mp_device_setup_link(dev_info->device,
 | 
			
		||||
+                                                     link->source_id,
 | 
			
		||||
+                                                     link->sink_id,
 | 
			
		||||
+                                                     false);
 | 
			
		||||
+                        }
 | 
			
		||||
+                }
 | 
			
		||||
 
 | 
			
		||||
                 const struct media_v2_interface *interface =
 | 
			
		||||
                         mp_device_find_entity_interface(dev_info->device,
 | 
			
		||||
@@ -269,11 +306,14 @@ setup_camera(MPDeviceList **device_list, const struct mp_camera_config *config)
 | 
			
		||||
                 // the ov5640 driver where it won't allow setting the preview
 | 
			
		||||
                 // format initially.
 | 
			
		||||
                 MPMode mode = config->capture_mode;
 | 
			
		||||
-                if (config->num_media_links)
 | 
			
		||||
+                if (config->num_media_formats)
 | 
			
		||||
                         mp_setup_media_link_pad_formats(dev_info,
 | 
			
		||||
-                                                        config->media_links,
 | 
			
		||||
-                                                        config->num_media_links,
 | 
			
		||||
-                                                        &mode);
 | 
			
		||||
+                                                        config->media_formats,
 | 
			
		||||
+                                                        config->num_media_formats);
 | 
			
		||||
+                if (config->num_media_crops)
 | 
			
		||||
+                        mp_setup_media_link_pad_crops(dev_info,
 | 
			
		||||
+                                                      config->media_crops,
 | 
			
		||||
+                                                      config->num_media_crops);
 | 
			
		||||
                 mp_camera_set_mode(info->camera, &mode);
 | 
			
		||||
 
 | 
			
		||||
                 // Trigger continuous auto focus if the sensor supports it
 | 
			
		||||
@@ -435,9 +475,12 @@ capture(MPPipeline *pipeline, const void *data)
 | 
			
		||||
         mode = camera->capture_mode;
 | 
			
		||||
         if (camera->num_media_links)
 | 
			
		||||
                 mp_setup_media_link_pad_formats(dev_info,
 | 
			
		||||
-                                                camera->media_links,
 | 
			
		||||
-                                                camera->num_media_links,
 | 
			
		||||
-                                                &mode);
 | 
			
		||||
+                                                camera->media_formats,
 | 
			
		||||
+                                                camera->num_media_formats);
 | 
			
		||||
+        if (camera->num_media_crops)
 | 
			
		||||
+                mp_setup_media_link_pad_crops(dev_info,
 | 
			
		||||
+                                              camera->media_crops,
 | 
			
		||||
+                                              camera->num_media_crops);
 | 
			
		||||
         mp_camera_set_mode(info->camera, &mode);
 | 
			
		||||
         just_switched_mode = true;
 | 
			
		||||
 
 | 
			
		||||
@@ -604,9 +647,13 @@ on_frame(MPBuffer buffer, void *_data)
 | 
			
		||||
                         if (camera->num_media_links)
 | 
			
		||||
                                 mp_setup_media_link_pad_formats(
 | 
			
		||||
                                         dev_info,
 | 
			
		||||
-                                        camera->media_links,
 | 
			
		||||
-                                        camera->num_media_links,
 | 
			
		||||
-                                        &mode);
 | 
			
		||||
+                                        camera->media_formats,
 | 
			
		||||
+                                        camera->num_media_formats);
 | 
			
		||||
+                        if (camera->num_media_crops)
 | 
			
		||||
+                                mp_setup_media_link_pad_crops(
 | 
			
		||||
+                                        dev_info,
 | 
			
		||||
+                                        camera->media_crops,
 | 
			
		||||
+                                        camera->num_media_crops);
 | 
			
		||||
                         mp_camera_set_mode(info->camera, &mode);
 | 
			
		||||
                         just_switched_mode = true;
 | 
			
		||||
 
 | 
			
		||||
@@ -622,25 +669,6 @@ on_frame(MPBuffer buffer, void *_data)
 | 
			
		||||
         }
 | 
			
		||||
 }
 | 
			
		||||
 
 | 
			
		||||
-static void
 | 
			
		||||
-mp_setup_media_link(struct device_info *dev_info,
 | 
			
		||||
-                    const struct mp_media_link_config *cfg,
 | 
			
		||||
-                    bool enable)
 | 
			
		||||
-{
 | 
			
		||||
-        const struct media_v2_entity *source_entity =
 | 
			
		||||
-                mp_device_find_entity(dev_info->device, cfg->source_name);
 | 
			
		||||
-
 | 
			
		||||
-        const struct media_v2_entity *target_entity =
 | 
			
		||||
-                mp_device_find_entity(dev_info->device, cfg->target_name);
 | 
			
		||||
-
 | 
			
		||||
-        mp_device_setup_entity_link(dev_info->device,
 | 
			
		||||
-                                    source_entity->id,
 | 
			
		||||
-                                    target_entity->id,
 | 
			
		||||
-                                    cfg->source_port,
 | 
			
		||||
-                                    cfg->target_port,
 | 
			
		||||
-                                    enable);
 | 
			
		||||
-}
 | 
			
		||||
-
 | 
			
		||||
 static void
 | 
			
		||||
 update_state(MPPipeline *pipeline, const struct mp_io_pipeline_state *state)
 | 
			
		||||
 {
 | 
			
		||||
@@ -664,8 +692,8 @@ update_state(MPPipeline *pipeline, const struct mp_io_pipeline_state *state)
 | 
			
		||||
 
 | 
			
		||||
                         // Disable media links
 | 
			
		||||
                         for (int i = 0; i < camera->num_media_links; i++)
 | 
			
		||||
-                                mp_setup_media_link(
 | 
			
		||||
-                                        dev_info, &camera->media_links[i], false);
 | 
			
		||||
+                                mp_device_setup_media_link(
 | 
			
		||||
+                                        dev_info->device, &camera->media_links[i], false);
 | 
			
		||||
                 }
 | 
			
		||||
 
 | 
			
		||||
                 if (capture_source) {
 | 
			
		||||
@@ -679,23 +707,32 @@ update_state(MPPipeline *pipeline, const struct mp_io_pipeline_state *state)
 | 
			
		||||
                         struct camera_info *info = &cameras[camera->index];
 | 
			
		||||
                         struct device_info *dev_info = &devices[info->device_index];
 | 
			
		||||
 
 | 
			
		||||
-                        mp_device_setup_link(dev_info->device,
 | 
			
		||||
-                                             info->pad_id,
 | 
			
		||||
-                                             dev_info->interface_pad_id,
 | 
			
		||||
-                                             true);
 | 
			
		||||
+                        // Only enable the camera here if no links are defined
 | 
			
		||||
+                        // in the config file.
 | 
			
		||||
+                        if(info->num_media_links == 0)
 | 
			
		||||
+                        {
 | 
			
		||||
+                                mp_device_setup_link(dev_info->device,
 | 
			
		||||
+                                                     info->pad_id,
 | 
			
		||||
+                                                     dev_info->interface_pad_id,
 | 
			
		||||
+                                                     true);
 | 
			
		||||
+                        }
 | 
			
		||||
 
 | 
			
		||||
-                        // Enable media links
 | 
			
		||||
+                        // If links are defined, enable all of them.
 | 
			
		||||
                         for (int i = 0; i < camera->num_media_links; i++)
 | 
			
		||||
-                                mp_setup_media_link(
 | 
			
		||||
-                                        dev_info, &camera->media_links[i], true);
 | 
			
		||||
+                                mp_device_setup_media_link(
 | 
			
		||||
+                                        dev_info->device, &camera->media_links[i], true);
 | 
			
		||||
 
 | 
			
		||||
                         mode = camera->preview_mode;
 | 
			
		||||
                         if (camera->num_media_links)
 | 
			
		||||
                                 mp_setup_media_link_pad_formats(
 | 
			
		||||
                                         dev_info,
 | 
			
		||||
-                                        camera->media_links,
 | 
			
		||||
-                                        camera->num_media_links,
 | 
			
		||||
-                                        &mode);
 | 
			
		||||
+                                        camera->media_formats,
 | 
			
		||||
+                                        camera->num_media_formats);
 | 
			
		||||
+                        if (camera->num_media_crops)
 | 
			
		||||
+                                mp_setup_media_link_pad_crops(
 | 
			
		||||
+                                        dev_info,
 | 
			
		||||
+                                        camera->media_crops,
 | 
			
		||||
+                                        camera->num_media_crops);
 | 
			
		||||
                         mp_camera_set_mode(info->camera, &mode);
 | 
			
		||||
 
 | 
			
		||||
                         mp_camera_start_capture(info->camera);
 | 
			
		||||
@@ -1,130 +0,0 @@
 | 
			
		||||
From af01107dd65452db159eb961b7ff27b8424cffc7 Mon Sep 17 00:00:00 2001
 | 
			
		||||
From: kgmt0 <kritphong@teknik.io>
 | 
			
		||||
Date: Thu, 1 Dec 2022 00:09:27 -0600
 | 
			
		||||
Subject: [PATCH] Add media-formats and media-crops to the config file format
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 src/camera_config.c | 61 +++++++++++++++++++++++++++++++++++++++++++++
 | 
			
		||||
 src/camera_config.h | 23 +++++++++++++++++
 | 
			
		||||
 2 files changed, 84 insertions(+)
 | 
			
		||||
 | 
			
		||||
diff --git a/src/camera_config.c b/src/camera_config.c
 | 
			
		||||
index 6ff74d1..1102354 100644
 | 
			
		||||
--- a/src/camera_config.c
 | 
			
		||||
+++ b/src/camera_config.c
 | 
			
		||||
@@ -184,6 +184,67 @@ config_ini_handler(void *user,
 | 
			
		||||
                                 ++cc->num_media_links;
 | 
			
		||||
                         }
 | 
			
		||||
                         g_strfreev(linkdefs);
 | 
			
		||||
+                } else if (strcmp(name, "media-formats") == 0) {
 | 
			
		||||
+                        struct mp_camera_config *cc = &cameras[index];
 | 
			
		||||
+                        char **formatdefs = g_strsplit(value, ",", 0);
 | 
			
		||||
+
 | 
			
		||||
+                        for (int i = 0; i < MP_MAX_FORMATS && formatdefs[i] != NULL;
 | 
			
		||||
+                             ++i) {
 | 
			
		||||
+                                char **entry = g_strsplit(formatdefs[i], ":", 5);
 | 
			
		||||
+                                char *name = entry[0];
 | 
			
		||||
+                                int pad = strtoint(entry[1], NULL, 10);
 | 
			
		||||
+                                char *format = entry[2];
 | 
			
		||||
+                                char *width = entry[3];
 | 
			
		||||
+                                char *height = entry[4];
 | 
			
		||||
+
 | 
			
		||||
+                                const size_t name_size =
 | 
			
		||||
+                                        sizeof(cc->media_formats[i].name);
 | 
			
		||||
+                                strncpy(cc->media_formats[i].name,
 | 
			
		||||
+                                        name,
 | 
			
		||||
+                                        name_size );
 | 
			
		||||
+
 | 
			
		||||
+                                cc->media_formats[i].pad = pad;
 | 
			
		||||
+
 | 
			
		||||
+                                cc->media_formats[i].mode.pixel_format =
 | 
			
		||||
+                                        mp_pixel_format_from_str(format);
 | 
			
		||||
+                                cc->media_formats[i].mode.width =
 | 
			
		||||
+                                        strtoint(width, NULL, 10);
 | 
			
		||||
+                                cc->media_formats[i].mode.height =
 | 
			
		||||
+                                        strtoint(height, NULL, 10);
 | 
			
		||||
+
 | 
			
		||||
+                                cc->num_media_formats++;
 | 
			
		||||
+
 | 
			
		||||
+                                g_strfreev(entry);
 | 
			
		||||
+                        }
 | 
			
		||||
+                } else if (strcmp(name, "media-crops") == 0) {
 | 
			
		||||
+                        char **formatdefs = g_strsplit(value, ",", 0);
 | 
			
		||||
+
 | 
			
		||||
+                        for (int i = 0; i < MP_MAX_CROPS && formatdefs[i] != NULL;
 | 
			
		||||
+                             ++i) {
 | 
			
		||||
+                                char **entry = g_strsplit(formatdefs[i], ":", 6);
 | 
			
		||||
+                                char *name = entry[0];
 | 
			
		||||
+                                int pad = strtoint(entry[1], NULL, 10);
 | 
			
		||||
+                                int top = strtoint(entry[2], NULL, 10);
 | 
			
		||||
+                                int left = strtoint(entry[3], NULL, 10);
 | 
			
		||||
+                                int width = strtoint(entry[4], NULL, 10);
 | 
			
		||||
+                                int height = strtoint(entry[5], NULL, 10);
 | 
			
		||||
+
 | 
			
		||||
+                                const size_t name_size =
 | 
			
		||||
+                                        sizeof(cc->media_crops[i].name);
 | 
			
		||||
+                                strncpy(cc->media_crops[i].name,
 | 
			
		||||
+                                        name,
 | 
			
		||||
+                                        name_size );
 | 
			
		||||
+
 | 
			
		||||
+                                cc->media_crops[i].pad = pad;
 | 
			
		||||
+                                cc->media_crops[i].top = top;
 | 
			
		||||
+                                cc->media_crops[i].left = left;
 | 
			
		||||
+                                cc->media_crops[i].width = width;
 | 
			
		||||
+                                cc->media_crops[i].height = height;
 | 
			
		||||
+
 | 
			
		||||
+                                cc->num_media_crops++;
 | 
			
		||||
+
 | 
			
		||||
+                                g_strfreev(entry);
 | 
			
		||||
+                        }
 | 
			
		||||
                 } else if (strcmp(name, "colormatrix") == 0) {
 | 
			
		||||
                         sscanf(value,
 | 
			
		||||
                                "%f,%f,%f,%f,%f,%f,%f,%f,%f",
 | 
			
		||||
diff --git a/src/camera_config.h b/src/camera_config.h
 | 
			
		||||
index d53d36f..b1bd5a5 100644
 | 
			
		||||
--- a/src/camera_config.h
 | 
			
		||||
+++ b/src/camera_config.h
 | 
			
		||||
@@ -7,6 +7,8 @@
 | 
			
		||||
 
 | 
			
		||||
 #define MP_MAX_CAMERAS 5
 | 
			
		||||
 #define MP_MAX_LINKS 10
 | 
			
		||||
+#define MP_MAX_FORMATS 10
 | 
			
		||||
+#define MP_MAX_CROPS 10
 | 
			
		||||
 
 | 
			
		||||
 struct mp_media_link_config {
 | 
			
		||||
         char source_name[100];
 | 
			
		||||
@@ -15,6 +17,21 @@ struct mp_media_link_config {
 | 
			
		||||
         int target_port;
 | 
			
		||||
 };
 | 
			
		||||
 
 | 
			
		||||
+struct mp_media_format_config {
 | 
			
		||||
+        char name[100];
 | 
			
		||||
+        int pad;
 | 
			
		||||
+        MPMode mode;
 | 
			
		||||
+};
 | 
			
		||||
+
 | 
			
		||||
+struct mp_media_crop_config {
 | 
			
		||||
+        char name[100];
 | 
			
		||||
+        int pad;
 | 
			
		||||
+        int left;
 | 
			
		||||
+        int top;
 | 
			
		||||
+        int width;
 | 
			
		||||
+        int height;
 | 
			
		||||
+};
 | 
			
		||||
+
 | 
			
		||||
 struct mp_camera_config {
 | 
			
		||||
         size_t index;
 | 
			
		||||
 
 | 
			
		||||
@@ -30,6 +47,12 @@ struct mp_camera_config {
 | 
			
		||||
         struct mp_media_link_config media_links[MP_MAX_LINKS];
 | 
			
		||||
         int num_media_links;
 | 
			
		||||
 
 | 
			
		||||
+        struct mp_media_format_config media_formats[MP_MAX_FORMATS];
 | 
			
		||||
+        int num_media_formats;
 | 
			
		||||
+
 | 
			
		||||
+        struct mp_media_crop_config media_crops[MP_MAX_CROPS];
 | 
			
		||||
+        int num_media_crops;
 | 
			
		||||
+
 | 
			
		||||
         float colormatrix[9];
 | 
			
		||||
         float forwardmatrix[9];
 | 
			
		||||
         float previewmatrix[9];
 | 
			
		||||
@@ -1,53 +0,0 @@
 | 
			
		||||
# Copyright 1999-2022 Gentoo Authors
 | 
			
		||||
# Distributed under the terms of the GNU General Public License v2
 | 
			
		||||
 | 
			
		||||
EAPI=7
 | 
			
		||||
 | 
			
		||||
inherit gnome2-utils meson xdg
 | 
			
		||||
 | 
			
		||||
DESCRIPTION="A GTK3 camera application that knows how to deal with the media request api"
 | 
			
		||||
HOMEPAGE="https://gitlab.com/postmarketOS/megapixels"
 | 
			
		||||
SRC_URI="https://gitlab.com/postmarketOS/megapixels/-/archive/${PV}/${P}.tar.gz"
 | 
			
		||||
 | 
			
		||||
LICENSE="GPL-3"
 | 
			
		||||
SLOT="0"
 | 
			
		||||
KEYWORDS="~amd64 ~arm64"
 | 
			
		||||
 | 
			
		||||
DEPEND="
 | 
			
		||||
	gui-libs/gtk
 | 
			
		||||
	x11-libs/gtk+:3
 | 
			
		||||
	media-libs/tiff
 | 
			
		||||
	media-gfx/zbar
 | 
			
		||||
	media-libs/libepoxy
 | 
			
		||||
	media-libs/libraw
 | 
			
		||||
	media-gfx/dcraw
 | 
			
		||||
	media-gfx/imagemagick
 | 
			
		||||
	media-gfx/argyllcms
 | 
			
		||||
"
 | 
			
		||||
 | 
			
		||||
RDEPEND="${DEPEND}"
 | 
			
		||||
BDEPEND=""
 | 
			
		||||
 | 
			
		||||
PATCHES=(
 | 
			
		||||
	"${FILESDIR}"/8103e662a484c0887d29f11a1284f85ff34d0248.patch
 | 
			
		||||
        "${FILESDIR}"/af01107dd65452db159eb961b7ff27b8424cffc7.patch
 | 
			
		||||
        "${FILESDIR}"/432d3851d49e4f8a9ef196eb0887cef428ba56c6.patch
 | 
			
		||||
)	
 | 
			
		||||
 | 
			
		||||
src_configure() {
 | 
			
		||||
	# 6.1 changes selfie cam name
 | 
			
		||||
    	# https://github.com/megous/linux/commit/59ee4accb3997098c7b65fbf529ef3033ab1fd5a
 | 
			
		||||
	sed -i -e 's/m00_f_ov8858/ov8858/g' 'config/pine64,pinephone-pro.ini'
 | 
			
		||||
 | 
			
		||||
	meson_src_configure
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pkg_postinst() {
 | 
			
		||||
	xdg_pkg_postinst
 | 
			
		||||
	gnome2_schemas_update
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pkg_postrm() {
 | 
			
		||||
	xdg_pkg_postrm
 | 
			
		||||
	gnome2_schemas_update
 | 
			
		||||
}
 | 
			
		||||
@@ -1,8 +0,0 @@
 | 
			
		||||
<?xml version='1.0' encoding='UTF-8'?>
 | 
			
		||||
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
 | 
			
		||||
<pkgmetadata>
 | 
			
		||||
	<maintainer type="person">
 | 
			
		||||
		<email>gjdijkman@gjdwebserver.nl</email>
 | 
			
		||||
		<name>Gerben Jan Dijkman</name>
 | 
			
		||||
	</maintainer>
 | 
			
		||||
</pkgmetadata>
 | 
			
		||||
@@ -1,5 +0,0 @@
 | 
			
		||||
DIST pipewire-0.3.70.tar.bz2 1573378 BLAKE2B 3824106cba9c1b0a82c6d8889b2b1473f4bfc5d0994ee9dd8b46a454c287bbd4e0ad5dc508df5d4a9b7c5f683898ed756947788e561f2bf51a3116b12e46d075 SHA512 8b25d90232d07d5b1e210bd8f24240438a7dcece23a5be59a4e49fc3daf51ebf659f2cc343a0d913310a4659792590ef981ab7a59890506557f9510d902a0cff
 | 
			
		||||
DIST pipewire-0.3.71.tar.bz2 1592332 BLAKE2B ff6483a040285cd7a7cc10878cc88b61a0e01c0376ab64ef84f753b300b61da23211bc1b50208da7f1054d6ddf08092e81cbf29df508aad3bc93f20742a2f735 SHA512 465388faaf0f7fcce21fdbcd7a1705ef524c35e267c3f123b1025c34133fc418194abb9e22d89e60c9acc1417b25d655112fd9ef342e26ca9b8bc26013b09cb3
 | 
			
		||||
DIST pipewire-0.3.75.tar.bz2 1629466 BLAKE2B e69dbb93ebe50f037bc602aa86733c8ba9ccbe57db520cd34ea025c9bf153dbd848882dbb4c2a4e830785a302a7cb7d4b7c1856c9a4be6f1c5ada92f70d1729b SHA512 19bf292f951f68de19cdfd3c76ee0e538a2ad3022e2669a4a19b40d26c2b16938799470b85def4b74b27b8c8137d03a05780d6bab0f38fb0835b528f2cd34f5d
 | 
			
		||||
DIST pipewire-0.3.76.tar.bz2 1641577 BLAKE2B 64805d69ca402cf10b9d95faa25c22198582493111d5286cd6237df263038c41af770b3339a7d356d78d5fec7f4b12003b15f66f85a8c283cf2d145ddf1391c9 SHA512 f61278868da2b23e3160a00d9fdc7efe5f37f79c580c40656e604975f5aae72fc171cbef8d112fd04e293b990851ace3053c980de9b34e6d36b196d6ced284cd
 | 
			
		||||
DIST pipewire-0.3.77.tar.bz2 1643767 BLAKE2B 3a2df9cdedf77d5b4927e115ddd7da0d1eecc85322ce7995a49945d41cc83b9a543c1382ad304bdb549f67ac444f7bca6871248654fb4d2e21b25eb55411940c SHA512 422c8504f608d6845b94351a336ab528f51195551418d0d245064972ed784817cacafc6afaad74eb0e0ea80474a9da33ef6917c1f60d3f8f45d70c54971f0760
 | 
			
		||||
@@ -1,95 +0,0 @@
 | 
			
		||||
From 14ebb9a568f3d8e1351181300dda93099b52742c Mon Sep 17 00:00:00 2001
 | 
			
		||||
From: =?UTF-8?q?Nikl=C4=81vs=20Ko=C4=BCes=C5=86ikovs?=
 | 
			
		||||
 <89q1r14hd@relay.firefox.com>
 | 
			
		||||
Date: Mon, 26 Jun 2023 17:07:04 +0300
 | 
			
		||||
Subject: [PATCH 1/2] spa/plugins/bluez5/meson: removed some unneeded redefines
 | 
			
		||||
MIME-Version: 1.0
 | 
			
		||||
Content-Type: text/plain; charset=UTF-8
 | 
			
		||||
Content-Transfer-Encoding: 8bit
 | 
			
		||||
 | 
			
		||||
As far as I can tell, the code in question was not doing anything there
 | 
			
		||||
and was also breaking the new code elsewhere, so it was put on the
 | 
			
		||||
chopping block. Don't mind the squirming tentacles.
 | 
			
		||||
 | 
			
		||||
Signed-off-by: NiklÄvs Koļesņikovs <89q1r14hd@relay.firefox.com>
 | 
			
		||||
---
 | 
			
		||||
 spa/plugins/bluez5/meson.build | 5 +----
 | 
			
		||||
 1 file changed, 1 insertion(+), 4 deletions(-)
 | 
			
		||||
 | 
			
		||||
diff --git a/spa/plugins/bluez5/meson.build b/spa/plugins/bluez5/meson.build
 | 
			
		||||
index e6c52ccc57..80493cfe61 100644
 | 
			
		||||
--- a/spa/plugins/bluez5/meson.build
 | 
			
		||||
+++ b/spa/plugins/bluez5/meson.build
 | 
			
		||||
@@ -118,16 +118,14 @@ endif
 | 
			
		||||
 
 | 
			
		||||
 if ldac_dep.found()
 | 
			
		||||
   ldac_args = codec_args
 | 
			
		||||
-  ldac_dep = [ ldac_dep ]
 | 
			
		||||
   if ldac_abr_dep.found()
 | 
			
		||||
     ldac_args += [ '-DENABLE_LDAC_ABR' ]
 | 
			
		||||
-    ldac_dep += ldac_abr_dep
 | 
			
		||||
   endif
 | 
			
		||||
   bluez_codec_ldac = shared_library('spa-codec-bluez5-ldac',
 | 
			
		||||
     [ 'a2dp-codec-ldac.c', 'media-codecs.c' ],
 | 
			
		||||
     include_directories : [ configinc ],
 | 
			
		||||
     c_args : ldac_args,
 | 
			
		||||
-    dependencies : [ spa_dep, ldac_dep ],
 | 
			
		||||
+    dependencies : [ spa_dep, ldac_dep, ldac_abr_dep ],
 | 
			
		||||
     install : true,
 | 
			
		||||
     install_dir : spa_plugindir / 'bluez5')
 | 
			
		||||
 endif
 | 
			
		||||
@@ -144,7 +142,6 @@ endif
 | 
			
		||||
 
 | 
			
		||||
 if get_option('bluez5-codec-opus').allowed() and opus_dep.found()
 | 
			
		||||
   opus_args = codec_args
 | 
			
		||||
-  opus_dep = [ opus_dep ]
 | 
			
		||||
   bluez_codec_opus = shared_library('spa-codec-bluez5-opus',
 | 
			
		||||
     [ 'a2dp-codec-opus.c', 'media-codecs.c' ],
 | 
			
		||||
     include_directories : [ configinc ],
 | 
			
		||||
-- 
 | 
			
		||||
GitLab
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
From 23a10a8abb324809d1ebc5d33e36cdfa570390ed Mon Sep 17 00:00:00 2001
 | 
			
		||||
From: =?UTF-8?q?Nikl=C4=81vs=20Ko=C4=BCes=C5=86ikovs?=
 | 
			
		||||
 <89q1r14hd@relay.firefox.com>
 | 
			
		||||
Date: Mon, 26 Jun 2023 16:35:01 +0300
 | 
			
		||||
Subject: [PATCH 2/2] src/modules/meson: ensure Opus libs were actually found,
 | 
			
		||||
 too
 | 
			
		||||
MIME-Version: 1.0
 | 
			
		||||
Content-Type: text/plain; charset=UTF-8
 | 
			
		||||
Content-Transfer-Encoding: 8bit
 | 
			
		||||
 | 
			
		||||
The old way fails, if a distro has the header but not the library,
 | 
			
		||||
which can happen on at least Gentoo with multilib deployments,
 | 
			
		||||
where the shared header is present but non-native libraries might not.
 | 
			
		||||
 | 
			
		||||
This could still fail, if a distro had some but not all libraries for
 | 
			
		||||
some architectures but hopefully no one did that. In that case, a compile
 | 
			
		||||
test would likely be required via cc.check_header() instead but let's try
 | 
			
		||||
the faster fix first.
 | 
			
		||||
 | 
			
		||||
Reported-by: Sam James <sam@gentoo.org>
 | 
			
		||||
Thanks-to: Barnabás Pőcze <pobrn@protonmail.com>
 | 
			
		||||
Thanks-to: Xavier Claessens <xavier.claessens@collabora.com>
 | 
			
		||||
Signed-off-by: NiklÄvs Koļesņikovs <89q1r14hd@relay.firefox.com>
 | 
			
		||||
---
 | 
			
		||||
 src/modules/meson.build | 3 ++-
 | 
			
		||||
 1 file changed, 2 insertions(+), 1 deletion(-)
 | 
			
		||||
 | 
			
		||||
diff --git a/src/modules/meson.build b/src/modules/meson.build
 | 
			
		||||
index 342bd697b1..970e04db98 100644
 | 
			
		||||
--- a/src/modules/meson.build
 | 
			
		||||
+++ b/src/modules/meson.build
 | 
			
		||||
@@ -203,7 +203,8 @@ endif
 | 
			
		||||
 summary({'ffado-driver': build_module_ffado_driver}, bool_yn: true, section: 'Optional Modules')
 | 
			
		||||
 
 | 
			
		||||
 opus_custom_h = cc.has_header('opus/opus_custom.h', dependencies: opus_dep)
 | 
			
		||||
-if opus_custom_h
 | 
			
		||||
+# One would imagine that opus_dep is a requirement but for some reason it's not, so we need to manually check that
 | 
			
		||||
+if opus_dep.found() and opus_custom_h
 | 
			
		||||
   opus_custom_dep = declare_dependency(compile_args: ['-DHAVE_OPUS_CUSTOM'], dependencies: opus_dep)
 | 
			
		||||
 else
 | 
			
		||||
   opus_custom_dep = dependency('', required: false)
 | 
			
		||||
-- 
 | 
			
		||||
GitLab
 | 
			
		||||
@@ -1,32 +0,0 @@
 | 
			
		||||
https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/4df753d0d7af7e68ab16ee90b94c4ddd44506074
 | 
			
		||||
 | 
			
		||||
From 4df753d0d7af7e68ab16ee90b94c4ddd44506074 Mon Sep 17 00:00:00 2001
 | 
			
		||||
From: Wim Taymans <wtaymans@redhat.com>
 | 
			
		||||
Date: Mon, 26 Jun 2023 16:11:33 +0200
 | 
			
		||||
Subject: [PATCH] context: avoid segfault when no fallback driver
 | 
			
		||||
 | 
			
		||||
In some cases, there might not be a fallback driver. Handle this without
 | 
			
		||||
segfaulting.
 | 
			
		||||
---
 | 
			
		||||
 src/pipewire/context.c | 2 +-
 | 
			
		||||
 1 file changed, 1 insertion(+), 1 deletion(-)
 | 
			
		||||
 | 
			
		||||
diff --git a/src/pipewire/context.c b/src/pipewire/context.c
 | 
			
		||||
index daf13c16b..5fd0cdec9 100644
 | 
			
		||||
--- a/src/pipewire/context.c
 | 
			
		||||
+++ b/src/pipewire/context.c
 | 
			
		||||
@@ -1327,11 +1327,11 @@ again:
 | 
			
		||||
 			if ((t->want_driver && t->active && t->runnable) ||
 | 
			
		||||
 			    t->always_process) {
 | 
			
		||||
 				driver = target;
 | 
			
		||||
-				driver->runnable = true;
 | 
			
		||||
 				break;
 | 
			
		||||
 			}
 | 
			
		||||
 		}
 | 
			
		||||
 		if (driver != NULL) {
 | 
			
		||||
+			driver->runnable = true;
 | 
			
		||||
 			/* driver needed for this group */
 | 
			
		||||
 			move_to_driver(context, &collect, driver);
 | 
			
		||||
 		} else {
 | 
			
		||||
-- 
 | 
			
		||||
GitLab
 | 
			
		||||
@@ -1,30 +0,0 @@
 | 
			
		||||
https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/4456f2efd16d6190989a903f70f4419c2ca4c819
 | 
			
		||||
https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3316
 | 
			
		||||
https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3345
 | 
			
		||||
 | 
			
		||||
From 4456f2efd16d6190989a903f70f4419c2ca4c819 Mon Sep 17 00:00:00 2001
 | 
			
		||||
From: Wim Taymans <wtaymans@redhat.com>
 | 
			
		||||
Date: Mon, 10 Jul 2023 16:59:17 +0200
 | 
			
		||||
Subject: [PATCH] impl-node: remove the node from the target peers
 | 
			
		||||
 | 
			
		||||
When we destroy a node, we need to remove the node as a current
 | 
			
		||||
driver peer.
 | 
			
		||||
 | 
			
		||||
Not doing this has 2 problems:
 | 
			
		||||
- remote drivers still trigger our node
 | 
			
		||||
- the client-node does not clean up the memid for the activation and
 | 
			
		||||
  we might reuse it later for a new node with the same fd.
 | 
			
		||||
 | 
			
		||||
See #3316
 | 
			
		||||
--- a/src/pipewire/impl-node.c
 | 
			
		||||
+++ b/src/pipewire/impl-node.c
 | 
			
		||||
@@ -1983,6 +1983,7 @@ void pw_impl_node_destroy(struct pw_impl_node *node)
 | 
			
		||||
 
 | 
			
		||||
 	/* remove ourself as a follower from the driver node */
 | 
			
		||||
 	spa_list_remove(&node->follower_link);
 | 
			
		||||
+	pw_impl_node_emit_peer_removed(node->driver_node, node);
 | 
			
		||||
 	remove_segment_owner(node->driver_node, node->info.id);
 | 
			
		||||
 
 | 
			
		||||
 	spa_list_consume(follower, &node->follower_list, follower_link) {
 | 
			
		||||
-- 
 | 
			
		||||
GitLab
 | 
			
		||||
@@ -1,34 +0,0 @@
 | 
			
		||||
https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/140374d2071e6204fded4ca65645d4e9a3dd053e
 | 
			
		||||
https://bugs.webkit.org/show_bug.cgi?id=259735
 | 
			
		||||
 | 
			
		||||
From 140374d2071e6204fded4ca65645d4e9a3dd053e Mon Sep 17 00:00:00 2001
 | 
			
		||||
From: Philippe Normand <philn@igalia.com>
 | 
			
		||||
Date: Fri, 4 Aug 2023 10:01:07 +0100
 | 
			
		||||
Subject: [PATCH] gst: Prevent a crash when stopping device provider
 | 
			
		||||
 | 
			
		||||
The provider might fail to connect to the PipeWire core when starting up, so
 | 
			
		||||
when stopping we need to check the core is valid before attempting to acquire a
 | 
			
		||||
mutex on its loop.
 | 
			
		||||
--- a/src/gst/gstpipewiredeviceprovider.c
 | 
			
		||||
+++ b/src/gst/gstpipewiredeviceprovider.c
 | 
			
		||||
@@ -665,11 +665,16 @@ gst_pipewire_device_provider_stop (GstDeviceProvider * provider)
 | 
			
		||||
 {
 | 
			
		||||
   GstPipeWireDeviceProvider *self = GST_PIPEWIRE_DEVICE_PROVIDER (provider);
 | 
			
		||||
 
 | 
			
		||||
-  pw_thread_loop_lock (self->core->loop);
 | 
			
		||||
+  /* core might be NULL if we failed to connect in _start. */
 | 
			
		||||
+  if (self->core != NULL) {
 | 
			
		||||
+    pw_thread_loop_lock (self->core->loop);
 | 
			
		||||
+  }
 | 
			
		||||
   GST_DEBUG_OBJECT (self, "stopping provider");
 | 
			
		||||
 
 | 
			
		||||
   g_clear_pointer ((struct pw_proxy**)&self->registry, pw_proxy_destroy);
 | 
			
		||||
-  pw_thread_loop_unlock (self->core->loop);
 | 
			
		||||
+  if (self->core != NULL) {
 | 
			
		||||
+    pw_thread_loop_unlock (self->core->loop);
 | 
			
		||||
+  }
 | 
			
		||||
   g_clear_pointer (&self->core, gst_pipewire_core_release);
 | 
			
		||||
 }
 | 
			
		||||
 
 | 
			
		||||
-- 
 | 
			
		||||
GitLab
 | 
			
		||||
@@ -1,17 +0,0 @@
 | 
			
		||||
# Load pipewire configuration at conf hook processing time. This allows to
 | 
			
		||||
# override pulseaudio defaults configuration which is also applied via hook.
 | 
			
		||||
#
 | 
			
		||||
# Note since hooks are run after @GENTOO_PORTAGE_EPREFIX@/etc/asound.conf and ~/.asoundrc are applied,
 | 
			
		||||
# we load these again here make sure that user configuration takes precedence.
 | 
			
		||||
 | 
			
		||||
@hooks [
 | 
			
		||||
	{
 | 
			
		||||
		func load
 | 
			
		||||
		files [
 | 
			
		||||
			"@GENTOO_PORTAGE_EPREFIX@/usr/share/alsa/alsa.conf.d/99-pipewire-default.conf"
 | 
			
		||||
			"@GENTOO_PORTAGE_EPREFIX@/etc/asound.conf"
 | 
			
		||||
			"~/.asoundrc"
 | 
			
		||||
		]
 | 
			
		||||
		errors false
 | 
			
		||||
	}
 | 
			
		||||
]
 | 
			
		||||
@@ -1,43 +0,0 @@
 | 
			
		||||
.TH "gentoo-pipewire-launcher" "1" "2023-06-15"
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
gentoo\-pipewire\-launcher \- start instances of PipeWire, PipeWire-Pulse and WirePlumber
 | 
			
		||||
.SH "SYNOPSIS"
 | 
			
		||||
.BR gentoo\-pipewire\-launcher
 | 
			
		||||
[restart]
 | 
			
		||||
.SH "DESCRIPTION"
 | 
			
		||||
\fIgentoo\-pipewire\-launcher\fR starts instances of PipeWire and
 | 
			
		||||
WirePlumber.
 | 
			
		||||
Two instances of PipeWire are started: one as the core sound-server, and
 | 
			
		||||
one for PulseAudio emulation (cf.\&
 | 
			
		||||
.BR pipewire-pulse (1)\fR).
 | 
			
		||||
.PP
 | 
			
		||||
It must be run in an environment with an active D-Bus session bus,
 | 
			
		||||
i.e. one in which the
 | 
			
		||||
.B DBUS_SESSION_BUS_ADDRESS
 | 
			
		||||
environment variable is set appropriately.
 | 
			
		||||
.PP
 | 
			
		||||
\fIgentoo\-pipewire\-launcher\fR
 | 
			
		||||
tries to avoid restarting, in order to avoid audio dropouts.
 | 
			
		||||
However, a restart can be forced by calling
 | 
			
		||||
\fIgentoo\-pipewire\-launcher\fR
 | 
			
		||||
with an argument of \(oqrestart\(cq.
 | 
			
		||||
.PP
 | 
			
		||||
.B ${XDG_CONFIG_HOME}/gentoo\-pipewire\-launcher.conf
 | 
			
		||||
can be used to specify absolute paths of files to which log output
 | 
			
		||||
should be sent, by specifying values for one or more of the
 | 
			
		||||
.B GENTOO_PIPEWIRE_LOG\fR,
 | 
			
		||||
.B GENTOO_PIPEWIRE_PULSE_LOG\fR,
 | 
			
		||||
and
 | 
			
		||||
.B GENTOO_WIREPLUMBER_LOG
 | 
			
		||||
variables, one per line.
 | 
			
		||||
.SH "REPORTING BUGS"
 | 
			
		||||
Please report bugs via https://bugs.gentoo.org/
 | 
			
		||||
.SH "FILES"
 | 
			
		||||
.TP
 | 
			
		||||
.B ${XDG_CONFIG_HOME}/gentoo\-pipewire\-launcher.conf
 | 
			
		||||
configures locations of files for log output.
 | 
			
		||||
.SH "SEE ALSO"
 | 
			
		||||
.BR pipewire (1),
 | 
			
		||||
.BR pipewire-pulse (1),
 | 
			
		||||
.BR wireplumber (1),
 | 
			
		||||
.BR pipewire.conf (5)
 | 
			
		||||
@@ -1,29 +0,0 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# PipeWire launcher script for XDG compliant desktops on OpenRC.
 | 
			
		||||
#
 | 
			
		||||
# systemd users are very _STRONGLY_ advised to use the much
 | 
			
		||||
# more reliable and predictable user units instead.
 | 
			
		||||
 | 
			
		||||
# WARNING: This script assumes being run inside XDG compliant session,
 | 
			
		||||
# which means D-Bus session instance is expected to be correctly set up
 | 
			
		||||
# prior to this script starting. If that is not true, things may break!
 | 
			
		||||
 | 
			
		||||
# Best to reap any existing daemons and only then try to start a new set.
 | 
			
		||||
pkill -u "${USER}" -x pipewire\|wireplumber 1>/dev/null 2>&1
 | 
			
		||||
 | 
			
		||||
# The core daemon which by itself does probably nothing.
 | 
			
		||||
@GENTOO_PORTAGE_EPREFIX@/usr/bin/pipewire &
 | 
			
		||||
 | 
			
		||||
# The so called pipewire-pulse daemon used for PulseAudio compatibility.
 | 
			
		||||
# Commenting this out will stop the PA proxying daemon from starting,
 | 
			
		||||
# however ALSA (with pipewire-alsa), JACK (with jack-sdk) and PW API using
 | 
			
		||||
# clients will still have access to audio and may end up clashing with
 | 
			
		||||
# non-PW apps over HW control (most notably, /usr/bin/pulseaudio daemon).
 | 
			
		||||
@GENTOO_PORTAGE_EPREFIX@/usr/bin/pipewire -c pipewire-pulse.conf &
 | 
			
		||||
 | 
			
		||||
# Hack for bug #822498
 | 
			
		||||
sleep 1
 | 
			
		||||
 | 
			
		||||
# Finally a session manager is required for PipeWire to do anything.
 | 
			
		||||
exec @GENTOO_PORTAGE_EPREFIX@/usr/bin/wireplumber
 | 
			
		||||
@@ -1,52 +0,0 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# PipeWire launcher script for XDG compliant desktops on OpenRC.
 | 
			
		||||
#
 | 
			
		||||
# systemd users are very _STRONGLY_ advised to use the much
 | 
			
		||||
# more reliable and predictable user units instead.
 | 
			
		||||
 | 
			
		||||
# WARNING: This script assumes being run inside XDG compliant session,
 | 
			
		||||
# which means D-Bus session instance is expected to be correctly set up
 | 
			
		||||
# prior to this script starting. If that is not true, things may break!
 | 
			
		||||
 | 
			
		||||
restart () {
 | 
			
		||||
    echo "Terminating PipeWire processes ..."
 | 
			
		||||
    pkill -u "${USER}" -x pipewire\|wireplumber 1>/dev/null 2>&1
 | 
			
		||||
    pwait -u "${USER}" -x pipewire\|wireplumber
 | 
			
		||||
    echo "PipeWire terminated."
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if [ "${#}" -gt 0 ]
 | 
			
		||||
then
 | 
			
		||||
    if [ "${1}" = 'restart' ]
 | 
			
		||||
    then
 | 
			
		||||
	restart
 | 
			
		||||
    else
 | 
			
		||||
        echo "Unrecognised argument." >&2
 | 
			
		||||
        echo "Usage: gentoo-pipewire-launcher [restart]" >&2
 | 
			
		||||
	exit 1
 | 
			
		||||
    fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if pgrep -u "${USER}" -x pipewire\|wireplumber 1>/dev/null 2>&1
 | 
			
		||||
then
 | 
			
		||||
    echo "PipeWire already running, exiting." >&2
 | 
			
		||||
    echo "(Use 'gentoo-pipewire-launcher restart' to restart PipeWire and WirePlumber.)" >&2
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# The core daemon which by itself does probably nothing.
 | 
			
		||||
@GENTOO_PORTAGE_EPREFIX@/usr/bin/pipewire &
 | 
			
		||||
 | 
			
		||||
# The so called pipewire-pulse daemon used for PulseAudio compatibility.
 | 
			
		||||
# Commenting this out will stop the PA proxying daemon from starting,
 | 
			
		||||
# however ALSA (with pipewire-alsa), JACK (with jack-sdk) and PW API using
 | 
			
		||||
# clients will still have access to audio and may end up clashing with
 | 
			
		||||
# non-PW apps over HW control (most notably, /usr/bin/pulseaudio daemon).
 | 
			
		||||
@GENTOO_PORTAGE_EPREFIX@/usr/bin/pipewire -c pipewire-pulse.conf &
 | 
			
		||||
 | 
			
		||||
# Hack for bug #822498
 | 
			
		||||
sleep 1
 | 
			
		||||
 | 
			
		||||
# Finally a session manager is required for PipeWire to do anything.
 | 
			
		||||
exec @GENTOO_PORTAGE_EPREFIX@/usr/bin/wireplumber
 | 
			
		||||
@@ -1,77 +0,0 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# PipeWire launcher script for XDG compliant desktops on OpenRC.
 | 
			
		||||
#
 | 
			
		||||
# systemd users are very _STRONGLY_ advised to use the much
 | 
			
		||||
# more reliable and predictable user units instead.
 | 
			
		||||
 | 
			
		||||
# WARNING: This script assumes being run inside XDG compliant session,
 | 
			
		||||
# which means D-Bus session instance is expected to be correctly set up
 | 
			
		||||
# prior to this script starting. If that is not true, things may break!
 | 
			
		||||
 | 
			
		||||
DATE_FORMAT='+%Y-%m-%dT%H:%M:%S%Z'
 | 
			
		||||
 | 
			
		||||
CONF="${XDG_CONFIG_HOME}/gentoo-pipewire-launcher.conf"
 | 
			
		||||
if [ -f "${CONF}" ]
 | 
			
		||||
then
 | 
			
		||||
    . "${CONF}"
 | 
			
		||||
else
 | 
			
		||||
    GENTOO_PIPEWIRE_LOG='/dev/null'
 | 
			
		||||
    GENTOO_PIPEWIRE_PULSE_LOG='/dev/null'
 | 
			
		||||
    GENTOO_WIREPLUMBER_LOG='/dev/null'
 | 
			
		||||
fi
 | 
			
		||||
for L in \
 | 
			
		||||
    "${GENTOO_PIPEWIRE_LOG}" \
 | 
			
		||||
    "${GENTOO_PIPEWIRE_PULSE_LOG}" \
 | 
			
		||||
    "${GENTOO_WIREPLUMBER_LOG}"
 | 
			
		||||
do
 | 
			
		||||
   if [ ! -e "${L}" ]
 | 
			
		||||
   then
 | 
			
		||||
       touch "${L}"
 | 
			
		||||
   fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
restart () {
 | 
			
		||||
    echo "Terminating PipeWire processes ..."
 | 
			
		||||
    pkill -u "${USER}" -x pipewire\|wireplumber 1>/dev/null 2>&1
 | 
			
		||||
    pwait -u "${USER}" -x pipewire\|wireplumber
 | 
			
		||||
    echo "PipeWire terminated."
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if [ "${#}" -gt 0 ]
 | 
			
		||||
then
 | 
			
		||||
    if [ "${1}" = 'restart' ]
 | 
			
		||||
    then
 | 
			
		||||
	restart
 | 
			
		||||
    else
 | 
			
		||||
        echo "Unrecognised argument." >&2
 | 
			
		||||
        echo "Usage: gentoo-pipewire-launcher [restart]" >&2
 | 
			
		||||
	exit 1
 | 
			
		||||
    fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if pgrep -u "${USER}" -x pipewire\|wireplumber 1>/dev/null 2>&1
 | 
			
		||||
then
 | 
			
		||||
    echo "PipeWire already running, exiting." >&2
 | 
			
		||||
    echo "(Use 'gentoo-pipewire-launcher restart' to restart PipeWire and WirePlumber.)" >&2
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# The core daemon which by itself does probably nothing.
 | 
			
		||||
echo "[$(@GENTOO_PORTAGE_EPREFIX@/bin/date ${DATE_FORMAT})] Starting PipeWire." 1>>"${GENTOO_PIPEWIRE_LOG}"
 | 
			
		||||
@GENTOO_PORTAGE_EPREFIX@/usr/bin/pipewire 1>>"${GENTOO_PIPEWIRE_LOG}" 2>&1 &
 | 
			
		||||
 | 
			
		||||
# The so called pipewire-pulse daemon used for PulseAudio compatibility.
 | 
			
		||||
# Commenting this out will stop the PA proxying daemon from starting,
 | 
			
		||||
# however ALSA (with pipewire-alsa), JACK (with jack-sdk) and PW API using
 | 
			
		||||
# clients will still have access to audio and may end up clashing with
 | 
			
		||||
# non-PW apps over HW control (most notably, /usr/bin/pulseaudio daemon).
 | 
			
		||||
echo "[$(@GENTOO_PORTAGE_EPREFIX@/bin/date ${DATE_FORMAT})] Starting PipeWire-Pulse." 1>>"${GENTOO_PIPEWIRE_PULSE_LOG}"
 | 
			
		||||
@GENTOO_PORTAGE_EPREFIX@/usr/bin/pipewire -c pipewire-pulse.conf 1>>"${GENTOO_PIPEWIRE_PULSE_LOG}" 2>&1 &
 | 
			
		||||
 | 
			
		||||
# Hack for bug #822498
 | 
			
		||||
sleep 1
 | 
			
		||||
 | 
			
		||||
# Finally a session manager is required for PipeWire to do anything.
 | 
			
		||||
echo "[$(@GENTOO_PORTAGE_EPREFIX@/bin/date ${DATE_FORMAT})] Starting WirePlumber." 1>>"${GENTOO_WIREPLUMBER_LOG}"
 | 
			
		||||
exec @GENTOO_PORTAGE_EPREFIX@/usr/bin/wireplumber 1>>"${GENTOO_WIREPLUMBER_LOG}" 2>&1
 | 
			
		||||
@@ -1,12 +0,0 @@
 | 
			
		||||
diff --git a/src/daemon/pipewire.conf.in b/src/daemon/pipewire.conf.in
 | 
			
		||||
--- a/src/daemon/pipewire.conf.in
 | 
			
		||||
+++ b/src/daemon/pipewire.conf.in
 | 
			
		||||
@@ -6,7 +6,7 @@ context.properties = {
 | 
			
		||||
     #support.dbus                          = true
 | 
			
		||||
     #link.max-buffers                      = 64
 | 
			
		||||
     link.max-buffers                       = 16                       # version < 3 clients can't handle more
 | 
			
		||||
-    #mem.warn-mlock                        = false
 | 
			
		||||
+    mem.warn-mlock                         = true                     # Gentoo should have good RLIMITs now
 | 
			
		||||
     #mem.allow-mlock                       = true
 | 
			
		||||
     #mem.mlock-all                         = false
 | 
			
		||||
     #clock.power-of-two-quantum            = true
 | 
			
		||||
@@ -1,12 +0,0 @@
 | 
			
		||||
[Desktop Entry]
 | 
			
		||||
Version=1.0
 | 
			
		||||
Name[de]=PipeWire Mediensystem
 | 
			
		||||
Name=PipeWire Media System
 | 
			
		||||
Comment[de]=Das PipeWire Mediensystem starten
 | 
			
		||||
Comment=Start the PipeWire Media System
 | 
			
		||||
Exec=/usr/libexec/pipewire-launcher
 | 
			
		||||
Terminal=false
 | 
			
		||||
Type=Application
 | 
			
		||||
X-GNOME-HiddenUnderSystemd=true
 | 
			
		||||
X-KDE-HiddenUnderSystemd=true
 | 
			
		||||
X-systemd-skip=true
 | 
			
		||||
@@ -1,12 +0,0 @@
 | 
			
		||||
[Desktop Entry]
 | 
			
		||||
Version=1.0
 | 
			
		||||
Name[de]=PipeWire Mediensystem
 | 
			
		||||
Name=PipeWire Media System
 | 
			
		||||
Comment[de]=Das PipeWire Mediensystem starten
 | 
			
		||||
Comment=Start the PipeWire Media System
 | 
			
		||||
Exec=/usr/bin/gentoo-pipewire-launcher
 | 
			
		||||
Terminal=false
 | 
			
		||||
Type=Application
 | 
			
		||||
X-GNOME-HiddenUnderSystemd=true
 | 
			
		||||
X-KDE-HiddenUnderSystemd=true
 | 
			
		||||
X-systemd-skip=true
 | 
			
		||||
@@ -1,12 +0,0 @@
 | 
			
		||||
[Desktop Entry]
 | 
			
		||||
Version=1.0
 | 
			
		||||
Name[de]=PipeWire Mediensystem
 | 
			
		||||
Name=PipeWire Media System
 | 
			
		||||
Comment[de]=Das PipeWire Mediensystem starten
 | 
			
		||||
Comment=Start the PipeWire Media System
 | 
			
		||||
Exec=/usr/bin/gentoo-pipewire-launcher restart
 | 
			
		||||
Terminal=false
 | 
			
		||||
Type=Application
 | 
			
		||||
X-GNOME-HiddenUnderSystemd=true
 | 
			
		||||
X-KDE-HiddenUnderSystemd=true
 | 
			
		||||
X-systemd-skip=true
 | 
			
		||||
@@ -1,474 +0,0 @@
 | 
			
		||||
# Copyright 1999-2023 Gentoo Authors
 | 
			
		||||
# Distributed under the terms of the GNU General Public License v2
 | 
			
		||||
 | 
			
		||||
EAPI=8
 | 
			
		||||
 | 
			
		||||
# 1. Please regularly check (even at the point of bumping) Fedora's packaging
 | 
			
		||||
# for needed backports at https://src.fedoraproject.org/rpms/pipewire/tree/rawhide.
 | 
			
		||||
#
 | 
			
		||||
# 2. Upstream also sometimes amend release notes for the previous release to mention
 | 
			
		||||
# needed patches, e.g. https://gitlab.freedesktop.org/pipewire/pipewire/-/tags/0.3.55#distros
 | 
			
		||||
#
 | 
			
		||||
# 3. Keep an eye on git master (for both PipeWire and WirePlumber) as things
 | 
			
		||||
# continue to move quickly. It's not uncommon for fixes to be made shortly
 | 
			
		||||
# after releases.
 | 
			
		||||
 | 
			
		||||
PYTHON_COMPAT=( python3_{10..11} )
 | 
			
		||||
 | 
			
		||||
inherit flag-o-matic meson-multilib optfeature prefix python-any-r1 systemd tmpfiles udev
 | 
			
		||||
 | 
			
		||||
if [[ ${PV} == 9999 ]]; then
 | 
			
		||||
	EGIT_REPO_URI="https://gitlab.freedesktop.org/${PN}/${PN}.git"
 | 
			
		||||
	inherit git-r3
 | 
			
		||||
else
 | 
			
		||||
	if [[ ${PV} == *_p* ]] ; then
 | 
			
		||||
		MY_COMMIT=""
 | 
			
		||||
		SRC_URI="https://gitlab.freedesktop.org/pipewire/pipewire/-/archive/${MY_COMMIT}/pipewire-${MY_COMMIT}.tar.bz2 -> ${P}.tar.bz2"
 | 
			
		||||
		S="${WORKDIR}"/${PN}-${MY_COMMIT}
 | 
			
		||||
	else
 | 
			
		||||
		SRC_URI="https://gitlab.freedesktop.org/${PN}/${PN}/-/archive/${PV}/${P}.tar.bz2"
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
DESCRIPTION="Multimedia processing graphs"
 | 
			
		||||
HOMEPAGE="https://pipewire.org/"
 | 
			
		||||
 | 
			
		||||
LICENSE="MIT LGPL-2.1+ GPL-2"
 | 
			
		||||
# ABI was broken in 0.3.42 for https://gitlab.freedesktop.org/pipewire/wireplumber/-/issues/49
 | 
			
		||||
SLOT="0/0.4"
 | 
			
		||||
IUSE="bluetooth dbus doc echo-cancel extra ffmpeg flatpak gstreamer gsettings ieee1394 jack-client jack-sdk liblc3 lv2"
 | 
			
		||||
IUSE+=" modemmanager pipewire-alsa readline sound-server ssl system-service systemd test v4l X zeroconf libcamera"
 | 
			
		||||
 | 
			
		||||
# Once replacing system JACK libraries is possible, it's likely that
 | 
			
		||||
# jack-client IUSE will need blocking to avoid users accidentally
 | 
			
		||||
# configuring their systems to send PW sink output to the emulated
 | 
			
		||||
# JACK's sink - doing so is likely to yield no audio, cause a CPU
 | 
			
		||||
# cycles consuming loop (and may even cause GUI crashes)!
 | 
			
		||||
 | 
			
		||||
# - TODO: There should be "sound-server? ( || ( alsa bluetooth ) )" here, but ALSA is always enabled
 | 
			
		||||
# - TODO: Pulseaudio alsa plugin performs runtime check that pulseaudio server connection will work
 | 
			
		||||
#   which provides adequate guarantee that alsa-lib will be able to provide audio services.
 | 
			
		||||
#   If that works, pulseaudio defaults are loaded into alsa-lib runtime replacing default PCM and CTL.
 | 
			
		||||
#   When pipewire-alsa will be able to perform similar check, pipewire-alsa can be enabled unconditionally.
 | 
			
		||||
# - ffmpeg is only used for pw-cat. We don't build the spa plugin which receives barely any activity.
 | 
			
		||||
REQUIRED_USE="
 | 
			
		||||
	ffmpeg? ( extra )
 | 
			
		||||
	bluetooth? ( dbus )
 | 
			
		||||
	jack-sdk? ( !jack-client )
 | 
			
		||||
	modemmanager? ( bluetooth )
 | 
			
		||||
	system-service? ( systemd )
 | 
			
		||||
	!sound-server? ( !pipewire-alsa )
 | 
			
		||||
	jack-client? ( dbus )
 | 
			
		||||
"
 | 
			
		||||
 | 
			
		||||
RESTRICT="!test? ( test )"
 | 
			
		||||
 | 
			
		||||
BDEPEND="
 | 
			
		||||
	>=dev-util/meson-0.59
 | 
			
		||||
	virtual/pkgconfig
 | 
			
		||||
	${PYTHON_DEPS}
 | 
			
		||||
	$(python_gen_any_dep 'dev-python/docutils[${PYTHON_USEDEP}]')
 | 
			
		||||
	dbus? ( dev-util/gdbus-codegen )
 | 
			
		||||
	doc? (
 | 
			
		||||
		app-doc/doxygen
 | 
			
		||||
		media-gfx/graphviz
 | 
			
		||||
	)
 | 
			
		||||
"
 | 
			
		||||
# While udev could technically be optional, it's needed for a numebr of options,
 | 
			
		||||
# and not really worth it, bug #877769.
 | 
			
		||||
RDEPEND="
 | 
			
		||||
	acct-group/audio
 | 
			
		||||
	acct-group/pipewire
 | 
			
		||||
	media-libs/alsa-lib
 | 
			
		||||
	sys-libs/ncurses:=[unicode(+)]
 | 
			
		||||
	virtual/libintl[${MULTILIB_USEDEP}]
 | 
			
		||||
	virtual/libudev[${MULTILIB_USEDEP}]
 | 
			
		||||
	bluetooth? (
 | 
			
		||||
		dev-libs/glib
 | 
			
		||||
		media-libs/fdk-aac
 | 
			
		||||
		media-libs/libldac
 | 
			
		||||
		media-libs/libfreeaptx
 | 
			
		||||
		media-libs/opus
 | 
			
		||||
		media-libs/sbc
 | 
			
		||||
		>=net-wireless/bluez-4.101:=
 | 
			
		||||
		virtual/libusb:1
 | 
			
		||||
	)
 | 
			
		||||
	dbus? ( sys-apps/dbus[${MULTILIB_USEDEP}] )
 | 
			
		||||
	echo-cancel? ( media-libs/webrtc-audio-processing:0 )
 | 
			
		||||
	extra? ( >=media-libs/libsndfile-1.0.20 )
 | 
			
		||||
	ffmpeg? ( media-video/ffmpeg:= )
 | 
			
		||||
	flatpak? ( dev-libs/glib )
 | 
			
		||||
	libcamera? ( media-libs/libcamera )	
 | 
			
		||||
	gstreamer? (
 | 
			
		||||
		>=dev-libs/glib-2.32.0:2
 | 
			
		||||
		>=media-libs/gstreamer-1.10.0:1.0
 | 
			
		||||
		media-libs/gst-plugins-base:1.0
 | 
			
		||||
	)
 | 
			
		||||
	gsettings? ( >=dev-libs/glib-2.26.0:2 )
 | 
			
		||||
	ieee1394? ( media-libs/libffado[${MULTILIB_USEDEP}] )
 | 
			
		||||
	jack-client? ( >=media-sound/jack2-1.9.10:2[dbus] )
 | 
			
		||||
	jack-sdk? (
 | 
			
		||||
		!media-sound/jack-audio-connection-kit
 | 
			
		||||
		!media-sound/jack2
 | 
			
		||||
	)
 | 
			
		||||
	liblc3? ( media-sound/liblc3 )
 | 
			
		||||
	lv2? ( media-libs/lilv )
 | 
			
		||||
	modemmanager? ( >=net-misc/modemmanager-1.10.0 )
 | 
			
		||||
	pipewire-alsa? ( >=media-libs/alsa-lib-1.1.7[${MULTILIB_USEDEP}] )
 | 
			
		||||
	sound-server? ( !media-sound/pulseaudio-daemon )
 | 
			
		||||
	readline? ( sys-libs/readline:= )
 | 
			
		||||
	ssl? ( dev-libs/openssl:= )
 | 
			
		||||
	systemd? ( sys-apps/systemd )
 | 
			
		||||
	system-service? ( acct-user/pipewire )
 | 
			
		||||
	v4l? ( media-libs/libv4l )
 | 
			
		||||
	X? (
 | 
			
		||||
		media-libs/libcanberra
 | 
			
		||||
		x11-libs/libX11
 | 
			
		||||
		x11-libs/libXfixes
 | 
			
		||||
	)
 | 
			
		||||
	zeroconf? ( net-dns/avahi )
 | 
			
		||||
"
 | 
			
		||||
 | 
			
		||||
DEPEND="${RDEPEND}"
 | 
			
		||||
 | 
			
		||||
# TODO: Consider use cases where pipewire is not used for driving audio
 | 
			
		||||
# Doing so with WirePlumber currently involves editing Lua scripts
 | 
			
		||||
PDEPEND=">=media-video/wireplumber-0.4.8-r3"
 | 
			
		||||
 | 
			
		||||
# Present RDEPEND that are currently always disabled due to the PW
 | 
			
		||||
# code using them being required to be disabled by Gentoo guidelines
 | 
			
		||||
# (i.e. developer binaries not meant for users) and unready code
 | 
			
		||||
#	media-libs/libsdl2
 | 
			
		||||
#	>=media-libs/vulkan-loader-1.1.69
 | 
			
		||||
#
 | 
			
		||||
# Ditto for DEPEND
 | 
			
		||||
#	>=dev-util/vulkan-headers-1.1.69
 | 
			
		||||
 | 
			
		||||
DOCS=( {README,INSTALL}.md NEWS )
 | 
			
		||||
 | 
			
		||||
PATCHES=(
 | 
			
		||||
	"${FILESDIR}"/${PN}-0.3.25-enable-failed-mlock-warning.patch
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
python_check_deps() {
 | 
			
		||||
	python_has_version "dev-python/docutils[${PYTHON_USEDEP}]"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
src_prepare() {
 | 
			
		||||
	default
 | 
			
		||||
 | 
			
		||||
	# Used for upstream backports
 | 
			
		||||
	[[ -d "${FILESDIR}"/${PV} ]] && eapply "${FILESDIR}"/${PV}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
multilib_src_configure() {
 | 
			
		||||
	# https://bugs.gentoo.org/838301
 | 
			
		||||
	filter-flags -fno-semantic-interposition
 | 
			
		||||
 | 
			
		||||
	local emesonargs=(
 | 
			
		||||
		-Ddocdir="${EPREFIX}"/usr/share/doc/${PF}
 | 
			
		||||
 | 
			
		||||
		$(meson_feature dbus)
 | 
			
		||||
		$(meson_native_use_feature zeroconf avahi)
 | 
			
		||||
		$(meson_native_use_feature doc docs)
 | 
			
		||||
		$(meson_native_enabled examples) # TODO: Figure out if this is still important now that media-session gone
 | 
			
		||||
		$(meson_native_enabled man)
 | 
			
		||||
		$(meson_feature test tests)
 | 
			
		||||
		-Dinstalled_tests=disabled # Matches upstream; Gentoo never installs tests
 | 
			
		||||
		$(meson_feature ieee1394 libffado)
 | 
			
		||||
		$(meson_native_use_feature gstreamer)
 | 
			
		||||
		$(meson_native_use_feature gstreamer gstreamer-device-provider)
 | 
			
		||||
		$(meson_native_use_feature gsettings)
 | 
			
		||||
		$(meson_native_use_feature systemd)
 | 
			
		||||
 | 
			
		||||
		$(meson_native_use_feature system-service systemd-system-service)
 | 
			
		||||
		-Dsystemd-system-unit-dir="$(systemd_get_systemunitdir)"
 | 
			
		||||
		-Dsystemd-user-unit-dir="$(systemd_get_userunitdir)"
 | 
			
		||||
 | 
			
		||||
		$(meson_native_use_feature systemd systemd-user-service)
 | 
			
		||||
		$(meson_feature pipewire-alsa) # Allows integrating ALSA apps into PW graph
 | 
			
		||||
		-Dspa-plugins=enabled
 | 
			
		||||
		-Dalsa=enabled # Allows using kernel ALSA for sound I/O (NOTE: media-session is gone so IUSE=alsa/spa_alsa/alsa-backend might be possible)
 | 
			
		||||
		-Dcompress-offload=disabled # TODO: tinycompress unpackaged
 | 
			
		||||
		-Daudiomixer=enabled # Matches upstream
 | 
			
		||||
		-Daudioconvert=enabled # Matches upstream
 | 
			
		||||
		$(meson_native_use_feature bluetooth bluez5)
 | 
			
		||||
		$(meson_native_use_feature bluetooth bluez5-backend-hsp-native)
 | 
			
		||||
		$(meson_native_use_feature bluetooth bluez5-backend-hfp-native)
 | 
			
		||||
		# https://gitlab.freedesktop.org/pipewire/pipewire/-/merge_requests/1379
 | 
			
		||||
		$(meson_native_use_feature modemmanager bluez5-backend-native-mm)
 | 
			
		||||
		$(meson_native_use_feature bluetooth bluez5-backend-ofono)
 | 
			
		||||
		$(meson_native_use_feature bluetooth bluez5-backend-hsphfpd)
 | 
			
		||||
		$(meson_native_use_feature bluetooth bluez5-codec-aac)
 | 
			
		||||
		$(meson_native_use_feature bluetooth bluez5-codec-aptx)
 | 
			
		||||
		$(meson_native_use_feature bluetooth bluez5-codec-ldac)
 | 
			
		||||
		$(meson_native_use_feature bluetooth opus)
 | 
			
		||||
		$(meson_native_use_feature bluetooth bluez5-codec-opus)
 | 
			
		||||
		$(meson_native_use_feature bluetooth libusb) # At least for now only used by bluez5 native (quirk detection of adapters)
 | 
			
		||||
		$(meson_native_use_feature echo-cancel echo-cancel-webrtc) #807889
 | 
			
		||||
		-Dcontrol=enabled # Matches upstream
 | 
			
		||||
		-Daudiotestsrc=enabled # Matches upstream
 | 
			
		||||
		-Dffmpeg=disabled # Disabled by upstream and no major developments to spa/plugins/ffmpeg/ since May 2020
 | 
			
		||||
		$(meson_native_use_feature ffmpeg pw-cat-ffmpeg)
 | 
			
		||||
		$(meson_native_use_feature flatpak)
 | 
			
		||||
		-Dpipewire-jack=enabled # Allows integrating JACK apps into PW graph
 | 
			
		||||
		$(meson_native_use_feature jack-client jack) # Allows PW to act as a JACK client
 | 
			
		||||
		$(meson_use jack-sdk jack-devel)
 | 
			
		||||
		$(usex jack-sdk "-Dlibjack-path=${EPREFIX}/usr/$(get_libdir)" '')
 | 
			
		||||
		-Dsupport=enabled # Miscellaneous/common plugins, such as null sink
 | 
			
		||||
		-Devl=disabled # Matches upstream
 | 
			
		||||
		-Dtest=disabled # fakesink and fakesource plugins
 | 
			
		||||
		-Dbluez5-codec-lc3plus=disabled # unpackaged
 | 
			
		||||
		$(meson_native_use_feature liblc3 bluez5-codec-lc3)
 | 
			
		||||
		$(meson_native_use_feature lv2)
 | 
			
		||||
		$(meson_native_use_feature v4l v4l2)
 | 
			
		||||
		$(meson_native_use_feature libcamera)
 | 
			
		||||
		$(meson_native_use_feature readline)
 | 
			
		||||
		$(meson_native_use_feature ssl raop)
 | 
			
		||||
		-Dvideoconvert=enabled # Matches upstream
 | 
			
		||||
		-Dvideotestsrc=enabled # Matches upstream
 | 
			
		||||
		-Dvolume=enabled # Matches upstream
 | 
			
		||||
		-Dvulkan=disabled # Uses pre-compiled Vulkan compute shader to provide a CGI video source (dev thing; disabled by upstream)
 | 
			
		||||
		$(meson_native_use_feature extra pw-cat)
 | 
			
		||||
		-Dudev=enabled
 | 
			
		||||
		-Dudevrulesdir="${EPREFIX}$(get_udevdir)/rules.d"
 | 
			
		||||
		-Dsdl2=disabled # Controls SDL2 dependent code (currently only examples when -Dinstalled_tests=enabled which we never install)
 | 
			
		||||
		-Dlibmysofa=disabled # libmysofa is unpackaged
 | 
			
		||||
		$(meson_native_use_feature extra sndfile) # Enables libsndfile dependent code (currently only pw-cat)
 | 
			
		||||
		-Dsession-managers="[]" # All available session managers are now their own projects, so there's nothing to build
 | 
			
		||||
 | 
			
		||||
		# We still have <5.16 kernels packaged in Gentoo and 6.1 (LTS) only
 | 
			
		||||
		# just became stable, with 5.15 being the previous LTS. Many people
 | 
			
		||||
		# are still on it.
 | 
			
		||||
		-Dpam-defaults-install=true
 | 
			
		||||
 | 
			
		||||
		# Just for bell sounds in X11 right now.
 | 
			
		||||
		$(meson_native_use_feature X x11)
 | 
			
		||||
		$(meson_native_use_feature X x11-xfixes)
 | 
			
		||||
		$(meson_native_use_feature X libcanberra)
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	meson_src_configure
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
multilib_src_test() {
 | 
			
		||||
	meson_src_test --timeout-multiplier 10
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
multilib_src_install() {
 | 
			
		||||
	# Our custom DOCS do not exist in multilib source directory
 | 
			
		||||
	DOCS= meson_src_install
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
multilib_src_install_all() {
 | 
			
		||||
	einstalldocs
 | 
			
		||||
 | 
			
		||||
	if use pipewire-alsa; then
 | 
			
		||||
		dodir /etc/alsa/conf.d
 | 
			
		||||
 | 
			
		||||
		# Install pipewire conf loader hook
 | 
			
		||||
		insinto /usr/share/alsa/alsa.conf.d
 | 
			
		||||
		doins "${FILESDIR}"/99-pipewire-default-hook.conf
 | 
			
		||||
		eprefixify "${ED}"/usr/share/alsa/alsa.conf.d/99-pipewire-default-hook.conf
 | 
			
		||||
 | 
			
		||||
		# These will break if someone has /etc that is a symbolic link to a subfolder! See #724222
 | 
			
		||||
		# And the current dosym8 -r implementation is likely affected by the same issue, too.
 | 
			
		||||
		dosym ../../../usr/share/alsa/alsa.conf.d/50-pipewire.conf /etc/alsa/conf.d/50-pipewire.conf
 | 
			
		||||
		dosym ../../../usr/share/alsa/alsa.conf.d/99-pipewire-default-hook.conf /etc/alsa/conf.d/99-pipewire-default-hook.conf
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	# Enable required wireplumber alsa and bluez monitors
 | 
			
		||||
	if use sound-server; then
 | 
			
		||||
		dodir /etc/wireplumber/main.lua.d
 | 
			
		||||
		echo "alsa_monitor.enabled = true" > "${ED}"/etc/wireplumber/main.lua.d/89-gentoo-sound-server-enable-alsa-monitor.lua || die
 | 
			
		||||
 | 
			
		||||
		dodir /etc/wireplumber/bluetooth.lua.d
 | 
			
		||||
		echo "bluez_monitor.enabled = true" > "${ED}"/etc/wireplumber/bluetooth.lua.d/89-gentoo-sound-server-enable-bluez-monitor.lua || die
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	if use system-service; then
 | 
			
		||||
		newtmpfiles - pipewire.conf <<-EOF || die
 | 
			
		||||
			d /run/pipewire 0755 pipewire pipewire - -
 | 
			
		||||
		EOF
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	if ! use systemd; then
 | 
			
		||||
		insinto /etc/xdg/autostart
 | 
			
		||||
		newins "${FILESDIR}"/pipewire.desktop-r2 pipewire.desktop
 | 
			
		||||
 | 
			
		||||
		exeinto /usr/bin
 | 
			
		||||
		newexe "${FILESDIR}"/gentoo-pipewire-launcher.in-r2 gentoo-pipewire-launcher
 | 
			
		||||
 | 
			
		||||
		doman "${FILESDIR}"/gentoo-pipewire-launcher.1
 | 
			
		||||
 | 
			
		||||
		# Disable pipewire-pulse if sound-server is disabled.
 | 
			
		||||
		if ! use sound-server ; then
 | 
			
		||||
			sed -i -s '/pipewire -c pipewire-pulse.conf/s/^/#/' "${ED}"/usr/bin/gentoo-pipewire-launcher || die
 | 
			
		||||
		fi
 | 
			
		||||
 | 
			
		||||
		eprefixify "${ED}"/usr/bin/gentoo-pipewire-launcher
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pkg_postrm() {
 | 
			
		||||
	udev_reload
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pkg_preinst() {
 | 
			
		||||
	HAD_SOUND_SERVER=0
 | 
			
		||||
	HAD_SYSTEM_SERVICE=0
 | 
			
		||||
 | 
			
		||||
	if has_version "media-video/pipewire[sound-server(-)]" ; then
 | 
			
		||||
		HAD_SOUND_SERVER=1
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	if has_version "media-video/pipewire[system-service(-)]" ; then
 | 
			
		||||
		HAD_SYSTEM_SERVICE=1
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pkg_postinst() {
 | 
			
		||||
	udev_reload
 | 
			
		||||
 | 
			
		||||
	use system-service && tmpfiles_process pipewire.conf
 | 
			
		||||
 | 
			
		||||
	local ver
 | 
			
		||||
	for ver in ${REPLACING_VERSIONS} ; do
 | 
			
		||||
		if has_version kde-plasma/kwin[screencast] || has_version x11-wm/mutter[screencast] ; then
 | 
			
		||||
			# https://bugs.gentoo.org/908490
 | 
			
		||||
			# https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3243
 | 
			
		||||
			ewarn "Please restart KWin/Mutter after upgrading PipeWire."
 | 
			
		||||
			ewarn "Screencasting may not work until you do."
 | 
			
		||||
		fi
 | 
			
		||||
 | 
			
		||||
		if ver_test ${ver} -le 0.3.66-r1 ; then
 | 
			
		||||
			elog ">=pipewire-0.3.66 uses the 'pipewire' group to manage permissions"
 | 
			
		||||
			elog "and limits needed to function smoothly:"
 | 
			
		||||
			elog
 | 
			
		||||
			elog "1. Please make sure your user is in the 'pipewire' group for"
 | 
			
		||||
			elog "the best experience with realtime scheduling (PAM limits behavior)!"
 | 
			
		||||
			elog "You can add your account with:"
 | 
			
		||||
			elog " usermod -aG pipewire <youruser>"
 | 
			
		||||
			elog
 | 
			
		||||
			elog "2. For the best experience with fast user switching, it is recommended"
 | 
			
		||||
			elog "that you remove your user from the 'audio' group unless you rely on the"
 | 
			
		||||
			elog "audio group for device access control or ACLs.:"
 | 
			
		||||
			elog " usermod -rG audio <youruser>"
 | 
			
		||||
			elog
 | 
			
		||||
 | 
			
		||||
			if ! use jack-sdk ; then
 | 
			
		||||
				elog
 | 
			
		||||
				elog "JACK emulation is incomplete and not all programs will work. PipeWire's"
 | 
			
		||||
				elog "alternative libraries have been installed to a non-default location."
 | 
			
		||||
				elog "To use them, put pw-jack <application> before every JACK application."
 | 
			
		||||
				elog "When using pw-jack, do not run jackd/jackdbus. However, a virtual/jack"
 | 
			
		||||
				elog "provider is still needed to compile the JACK applications themselves."
 | 
			
		||||
				elog
 | 
			
		||||
			fi
 | 
			
		||||
 | 
			
		||||
			if use systemd ; then
 | 
			
		||||
				ewarn
 | 
			
		||||
				ewarn "PipeWire daemon startup has been moved to a launcher script!"
 | 
			
		||||
				ewarn "Make sure that ${EROOT}/etc/pipewire/pipewire.conf either does not exist or no"
 | 
			
		||||
				ewarn "longer is set to start a session manager or PulseAudio compatibility daemon (all"
 | 
			
		||||
				ewarn "lines similar to '{ path = /usr/bin/pipewire*' should be commented out)"
 | 
			
		||||
				ewarn
 | 
			
		||||
				ewarn "Those manually starting /usr/bin/pipewire via .xinitrc or similar _must_ from"
 | 
			
		||||
				ewarn "now on start ${EROOT}/usr/bin/gentoo-pipewire-launcher instead! It is highly"
 | 
			
		||||
				ewarn "advised that a D-Bus user session is set up before starting the script."
 | 
			
		||||
				ewarn
 | 
			
		||||
			fi
 | 
			
		||||
 | 
			
		||||
			if use sound-server && ( has_version 'media-sound/pulseaudio[daemon]' || has_version 'media-sound/pulseaudio-daemon' ) ; then
 | 
			
		||||
				elog
 | 
			
		||||
				elog "This ebuild auto-enables PulseAudio replacement. Because of that, users"
 | 
			
		||||
				elog "are recommended to edit pulseaudio client configuration files:"
 | 
			
		||||
				elog "${EROOT}/etc/pulse/client.conf and ${EROOT}/etc/pulse/client.conf.d/enable-autospawn.conf"
 | 
			
		||||
				elog "if it exists, and disable autospawning of the original daemon by setting:"
 | 
			
		||||
				elog
 | 
			
		||||
				elog "  autospawn = no"
 | 
			
		||||
				elog
 | 
			
		||||
				elog "Please note that the semicolon (;) must _NOT_ be at the beginning of the line!"
 | 
			
		||||
				elog
 | 
			
		||||
				elog "Alternatively, if replacing PulseAudio daemon is not desired, edit"
 | 
			
		||||
				elog "${EROOT}/usr/bin/gentoo-pipewire-launcher by commenting out the relevant"
 | 
			
		||||
				elog "command:"
 | 
			
		||||
				elog
 | 
			
		||||
				elog "#${EROOT}/usr/bin/pipewire -c pipewire-pulse.conf &"
 | 
			
		||||
				elog
 | 
			
		||||
			fi
 | 
			
		||||
 | 
			
		||||
			if has_version 'net-misc/ofono' ; then
 | 
			
		||||
				ewarn "Native backend has become default. Please disable oFono via:"
 | 
			
		||||
				if systemd_is_booted ; then
 | 
			
		||||
					ewarn "systemctl disable ofono"
 | 
			
		||||
				else
 | 
			
		||||
					ewarn "rc-update delete ofono"
 | 
			
		||||
				fi
 | 
			
		||||
			fi
 | 
			
		||||
		fi
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
	if [[ ${HAD_SOUND_SERVER} -eq 0 || -z ${REPLACING_VERSIONS} ]] ; then
 | 
			
		||||
		# TODO: We could drop most of this if we set up systemd presets?
 | 
			
		||||
		# They're worth looking into because right now, the out-of-the-box experience
 | 
			
		||||
		# is automatic on OpenRC, while it needs manual intervention on systemd.
 | 
			
		||||
		if use sound-server && use systemd ; then
 | 
			
		||||
			elog
 | 
			
		||||
			elog "When switching from PulseAudio, you may need to disable PulseAudio:"
 | 
			
		||||
			elog
 | 
			
		||||
			elog "  systemctl --user disable pulseaudio.service pulseaudio.socket"
 | 
			
		||||
			elog
 | 
			
		||||
			elog "To use PipeWire, the user units must be manually enabled"
 | 
			
		||||
			elog "by running this command as each user you use for desktop activities:"
 | 
			
		||||
			elog
 | 
			
		||||
			elog "  systemctl --user enable pipewire.socket pipewire-pulse.socket"
 | 
			
		||||
			elog
 | 
			
		||||
			elog "A reboot is recommended to avoid interferences from still running"
 | 
			
		||||
			elog "PulseAudio daemon."
 | 
			
		||||
			elog
 | 
			
		||||
			elog "Both new users and those upgrading need to enable WirePlumber"
 | 
			
		||||
			elog "for relevant users:"
 | 
			
		||||
			elog
 | 
			
		||||
			elog "  systemctl --user disable pipewire-media-session.service"
 | 
			
		||||
			elog "  systemctl --user --force enable wireplumber.service"
 | 
			
		||||
			elog
 | 
			
		||||
			elog "Root user may replace --user with --global to change system default"
 | 
			
		||||
			elog "configuration for all of the above commands."
 | 
			
		||||
			elog
 | 
			
		||||
		fi
 | 
			
		||||
 | 
			
		||||
		if ! use sound-server ; then
 | 
			
		||||
			ewarn
 | 
			
		||||
			ewarn "USE=sound-server is disabled! If you want PipeWire to provide"
 | 
			
		||||
			ewarn "your sound, please enable it. See the wiki at"
 | 
			
		||||
			ewarn "https://wiki.gentoo.org/wiki/PipeWire#Replacing_PulseAudio"
 | 
			
		||||
			ewarn "for more details."
 | 
			
		||||
			ewarn
 | 
			
		||||
		fi
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	if use system-service && [[ ${HAD_SYSTEM_SERVICE} -eq 0 || -z ${REPLACING_VERSIONS} ]] ; then
 | 
			
		||||
		ewarn
 | 
			
		||||
		ewarn "You have enabled the system-service USE flag, which installs"
 | 
			
		||||
		ewarn "the system-wide systemd units that enable PipeWire to run as a system"
 | 
			
		||||
		ewarn "service. This is more than likely NOT what you want. You are strongly"
 | 
			
		||||
		ewarn "advised not to enable this mode and instead stick with systemd user"
 | 
			
		||||
		ewarn "units. The default configuration files will likely not work out of the"
 | 
			
		||||
		ewarn "box, and you are on your own with configuration."
 | 
			
		||||
		ewarn
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	elog "For latest tips and tricks, troubleshooting information, and documentation"
 | 
			
		||||
	elog "in general, please refer to https://wiki.gentoo.org/wiki/PipeWire"
 | 
			
		||||
	elog
 | 
			
		||||
 | 
			
		||||
	optfeature_header "The following can be installed for optional runtime features:"
 | 
			
		||||
	optfeature "restricted realtime capabilities via D-Bus" sys-auth/rtkit
 | 
			
		||||
 | 
			
		||||
	if use sound-server && ! use pipewire-alsa; then
 | 
			
		||||
		optfeature "ALSA plugin to use PulseAudio interface for output" "media-plugins/alsa-plugins[pulseaudio]"
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
@@ -1,474 +0,0 @@
 | 
			
		||||
# Copyright 1999-2023 Gentoo Authors
 | 
			
		||||
# Distributed under the terms of the GNU General Public License v2
 | 
			
		||||
 | 
			
		||||
EAPI=8
 | 
			
		||||
 | 
			
		||||
# 1. Please regularly check (even at the point of bumping) Fedora's packaging
 | 
			
		||||
# for needed backports at https://src.fedoraproject.org/rpms/pipewire/tree/rawhide.
 | 
			
		||||
#
 | 
			
		||||
# 2. Upstream also sometimes amend release notes for the previous release to mention
 | 
			
		||||
# needed patches, e.g. https://gitlab.freedesktop.org/pipewire/pipewire/-/tags/0.3.55#distros
 | 
			
		||||
#
 | 
			
		||||
# 3. Keep an eye on git master (for both PipeWire and WirePlumber) as things
 | 
			
		||||
# continue to move quickly. It's not uncommon for fixes to be made shortly
 | 
			
		||||
# after releases.
 | 
			
		||||
 | 
			
		||||
PYTHON_COMPAT=( python3_{10..11} )
 | 
			
		||||
 | 
			
		||||
inherit flag-o-matic meson-multilib optfeature prefix python-any-r1 systemd tmpfiles udev
 | 
			
		||||
 | 
			
		||||
if [[ ${PV} == 9999 ]]; then
 | 
			
		||||
	EGIT_REPO_URI="https://gitlab.freedesktop.org/${PN}/${PN}.git"
 | 
			
		||||
	inherit git-r3
 | 
			
		||||
else
 | 
			
		||||
	if [[ ${PV} == *_p* ]] ; then
 | 
			
		||||
		MY_COMMIT=""
 | 
			
		||||
		SRC_URI="https://gitlab.freedesktop.org/pipewire/pipewire/-/archive/${MY_COMMIT}/pipewire-${MY_COMMIT}.tar.bz2 -> ${P}.tar.bz2"
 | 
			
		||||
		S="${WORKDIR}"/${PN}-${MY_COMMIT}
 | 
			
		||||
	else
 | 
			
		||||
		SRC_URI="https://gitlab.freedesktop.org/${PN}/${PN}/-/archive/${PV}/${P}.tar.bz2"
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
DESCRIPTION="Multimedia processing graphs"
 | 
			
		||||
HOMEPAGE="https://pipewire.org/"
 | 
			
		||||
 | 
			
		||||
LICENSE="MIT LGPL-2.1+ GPL-2"
 | 
			
		||||
# ABI was broken in 0.3.42 for https://gitlab.freedesktop.org/pipewire/wireplumber/-/issues/49
 | 
			
		||||
SLOT="0/0.4"
 | 
			
		||||
IUSE="bluetooth dbus doc echo-cancel extra ffmpeg flatpak gstreamer gsettings ieee1394 jack-client jack-sdk liblc3 lv2"
 | 
			
		||||
IUSE+=" modemmanager pipewire-alsa readline sound-server ssl system-service systemd test v4l X zeroconf libcamera"
 | 
			
		||||
 | 
			
		||||
# Once replacing system JACK libraries is possible, it's likely that
 | 
			
		||||
# jack-client IUSE will need blocking to avoid users accidentally
 | 
			
		||||
# configuring their systems to send PW sink output to the emulated
 | 
			
		||||
# JACK's sink - doing so is likely to yield no audio, cause a CPU
 | 
			
		||||
# cycles consuming loop (and may even cause GUI crashes)!
 | 
			
		||||
 | 
			
		||||
# - TODO: There should be "sound-server? ( || ( alsa bluetooth ) )" here, but ALSA is always enabled
 | 
			
		||||
# - TODO: Pulseaudio alsa plugin performs runtime check that pulseaudio server connection will work
 | 
			
		||||
#   which provides adequate guarantee that alsa-lib will be able to provide audio services.
 | 
			
		||||
#   If that works, pulseaudio defaults are loaded into alsa-lib runtime replacing default PCM and CTL.
 | 
			
		||||
#   When pipewire-alsa will be able to perform similar check, pipewire-alsa can be enabled unconditionally.
 | 
			
		||||
# - ffmpeg is only used for pw-cat. We don't build the spa plugin which receives barely any activity.
 | 
			
		||||
REQUIRED_USE="
 | 
			
		||||
	ffmpeg? ( extra )
 | 
			
		||||
	bluetooth? ( dbus )
 | 
			
		||||
	jack-sdk? ( !jack-client )
 | 
			
		||||
	modemmanager? ( bluetooth )
 | 
			
		||||
	system-service? ( systemd )
 | 
			
		||||
	!sound-server? ( !pipewire-alsa )
 | 
			
		||||
	jack-client? ( dbus )
 | 
			
		||||
"
 | 
			
		||||
 | 
			
		||||
RESTRICT="!test? ( test )"
 | 
			
		||||
 | 
			
		||||
BDEPEND="
 | 
			
		||||
	>=dev-util/meson-0.59
 | 
			
		||||
	virtual/pkgconfig
 | 
			
		||||
	${PYTHON_DEPS}
 | 
			
		||||
	$(python_gen_any_dep 'dev-python/docutils[${PYTHON_USEDEP}]')
 | 
			
		||||
	dbus? ( dev-util/gdbus-codegen )
 | 
			
		||||
	doc? (
 | 
			
		||||
		app-doc/doxygen
 | 
			
		||||
		media-gfx/graphviz
 | 
			
		||||
	)
 | 
			
		||||
"
 | 
			
		||||
# While udev could technically be optional, it's needed for a numebr of options,
 | 
			
		||||
# and not really worth it, bug #877769.
 | 
			
		||||
RDEPEND="
 | 
			
		||||
	acct-group/audio
 | 
			
		||||
	acct-group/pipewire
 | 
			
		||||
	media-libs/alsa-lib
 | 
			
		||||
	sys-libs/ncurses:=[unicode(+)]
 | 
			
		||||
	virtual/libintl[${MULTILIB_USEDEP}]
 | 
			
		||||
	virtual/libudev[${MULTILIB_USEDEP}]
 | 
			
		||||
	bluetooth? (
 | 
			
		||||
		dev-libs/glib
 | 
			
		||||
		media-libs/fdk-aac
 | 
			
		||||
		media-libs/libldac
 | 
			
		||||
		media-libs/libfreeaptx
 | 
			
		||||
		media-libs/opus
 | 
			
		||||
		media-libs/sbc
 | 
			
		||||
		>=net-wireless/bluez-4.101:=
 | 
			
		||||
		virtual/libusb:1
 | 
			
		||||
	)
 | 
			
		||||
	dbus? ( sys-apps/dbus[${MULTILIB_USEDEP}] )
 | 
			
		||||
	echo-cancel? ( media-libs/webrtc-audio-processing:0 )
 | 
			
		||||
	extra? ( >=media-libs/libsndfile-1.0.20 )
 | 
			
		||||
	ffmpeg? ( media-video/ffmpeg:= )
 | 
			
		||||
	flatpak? ( dev-libs/glib )
 | 
			
		||||
	libcamera? ( media-libs/libcamera )	
 | 
			
		||||
	gstreamer? (
 | 
			
		||||
		>=dev-libs/glib-2.32.0:2
 | 
			
		||||
		>=media-libs/gstreamer-1.10.0:1.0
 | 
			
		||||
		media-libs/gst-plugins-base:1.0
 | 
			
		||||
	)
 | 
			
		||||
	gsettings? ( >=dev-libs/glib-2.26.0:2 )
 | 
			
		||||
	ieee1394? ( media-libs/libffado[${MULTILIB_USEDEP}] )
 | 
			
		||||
	jack-client? ( >=media-sound/jack2-1.9.10:2[dbus] )
 | 
			
		||||
	jack-sdk? (
 | 
			
		||||
		!media-sound/jack-audio-connection-kit
 | 
			
		||||
		!media-sound/jack2
 | 
			
		||||
	)
 | 
			
		||||
	liblc3? ( media-sound/liblc3 )
 | 
			
		||||
	lv2? ( media-libs/lilv )
 | 
			
		||||
	modemmanager? ( >=net-misc/modemmanager-1.10.0 )
 | 
			
		||||
	pipewire-alsa? ( >=media-libs/alsa-lib-1.1.7[${MULTILIB_USEDEP}] )
 | 
			
		||||
	sound-server? ( !media-sound/pulseaudio-daemon )
 | 
			
		||||
	readline? ( sys-libs/readline:= )
 | 
			
		||||
	ssl? ( dev-libs/openssl:= )
 | 
			
		||||
	systemd? ( sys-apps/systemd )
 | 
			
		||||
	system-service? ( acct-user/pipewire )
 | 
			
		||||
	v4l? ( media-libs/libv4l )
 | 
			
		||||
	X? (
 | 
			
		||||
		media-libs/libcanberra
 | 
			
		||||
		x11-libs/libX11
 | 
			
		||||
		x11-libs/libXfixes
 | 
			
		||||
	)
 | 
			
		||||
	zeroconf? ( net-dns/avahi )
 | 
			
		||||
"
 | 
			
		||||
 | 
			
		||||
DEPEND="${RDEPEND}"
 | 
			
		||||
 | 
			
		||||
# TODO: Consider use cases where pipewire is not used for driving audio
 | 
			
		||||
# Doing so with WirePlumber currently involves editing Lua scripts
 | 
			
		||||
PDEPEND=">=media-video/wireplumber-0.4.8-r3"
 | 
			
		||||
 | 
			
		||||
# Present RDEPEND that are currently always disabled due to the PW
 | 
			
		||||
# code using them being required to be disabled by Gentoo guidelines
 | 
			
		||||
# (i.e. developer binaries not meant for users) and unready code
 | 
			
		||||
#	media-libs/libsdl2
 | 
			
		||||
#	>=media-libs/vulkan-loader-1.1.69
 | 
			
		||||
#
 | 
			
		||||
# Ditto for DEPEND
 | 
			
		||||
#	>=dev-util/vulkan-headers-1.1.69
 | 
			
		||||
 | 
			
		||||
DOCS=( {README,INSTALL}.md NEWS )
 | 
			
		||||
 | 
			
		||||
PATCHES=(
 | 
			
		||||
	"${FILESDIR}"/${PN}-0.3.25-enable-failed-mlock-warning.patch
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
python_check_deps() {
 | 
			
		||||
	python_has_version "dev-python/docutils[${PYTHON_USEDEP}]"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
src_prepare() {
 | 
			
		||||
	default
 | 
			
		||||
 | 
			
		||||
	# Used for upstream backports
 | 
			
		||||
	[[ -d "${FILESDIR}"/${PV} ]] && eapply "${FILESDIR}"/${PV}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
multilib_src_configure() {
 | 
			
		||||
	# https://bugs.gentoo.org/838301
 | 
			
		||||
	filter-flags -fno-semantic-interposition
 | 
			
		||||
 | 
			
		||||
	local emesonargs=(
 | 
			
		||||
		-Ddocdir="${EPREFIX}"/usr/share/doc/${PF}
 | 
			
		||||
 | 
			
		||||
		$(meson_feature dbus)
 | 
			
		||||
		$(meson_native_use_feature zeroconf avahi)
 | 
			
		||||
		$(meson_native_use_feature doc docs)
 | 
			
		||||
		$(meson_native_enabled examples) # TODO: Figure out if this is still important now that media-session gone
 | 
			
		||||
		$(meson_native_enabled man)
 | 
			
		||||
		$(meson_feature test tests)
 | 
			
		||||
		-Dinstalled_tests=disabled # Matches upstream; Gentoo never installs tests
 | 
			
		||||
		$(meson_feature ieee1394 libffado)
 | 
			
		||||
		$(meson_native_use_feature gstreamer)
 | 
			
		||||
		$(meson_native_use_feature gstreamer gstreamer-device-provider)
 | 
			
		||||
		$(meson_native_use_feature gsettings)
 | 
			
		||||
		$(meson_native_use_feature systemd)
 | 
			
		||||
 | 
			
		||||
		$(meson_native_use_feature system-service systemd-system-service)
 | 
			
		||||
		-Dsystemd-system-unit-dir="$(systemd_get_systemunitdir)"
 | 
			
		||||
		-Dsystemd-user-unit-dir="$(systemd_get_userunitdir)"
 | 
			
		||||
 | 
			
		||||
		$(meson_native_use_feature systemd systemd-user-service)
 | 
			
		||||
		$(meson_feature pipewire-alsa) # Allows integrating ALSA apps into PW graph
 | 
			
		||||
		-Dspa-plugins=enabled
 | 
			
		||||
		-Dalsa=enabled # Allows using kernel ALSA for sound I/O (NOTE: media-session is gone so IUSE=alsa/spa_alsa/alsa-backend might be possible)
 | 
			
		||||
		-Dcompress-offload=disabled # TODO: tinycompress unpackaged
 | 
			
		||||
		-Daudiomixer=enabled # Matches upstream
 | 
			
		||||
		-Daudioconvert=enabled # Matches upstream
 | 
			
		||||
		$(meson_native_use_feature bluetooth bluez5)
 | 
			
		||||
		$(meson_native_use_feature bluetooth bluez5-backend-hsp-native)
 | 
			
		||||
		$(meson_native_use_feature bluetooth bluez5-backend-hfp-native)
 | 
			
		||||
		# https://gitlab.freedesktop.org/pipewire/pipewire/-/merge_requests/1379
 | 
			
		||||
		$(meson_native_use_feature modemmanager bluez5-backend-native-mm)
 | 
			
		||||
		$(meson_native_use_feature bluetooth bluez5-backend-ofono)
 | 
			
		||||
		$(meson_native_use_feature bluetooth bluez5-backend-hsphfpd)
 | 
			
		||||
		$(meson_native_use_feature bluetooth bluez5-codec-aac)
 | 
			
		||||
		$(meson_native_use_feature bluetooth bluez5-codec-aptx)
 | 
			
		||||
		$(meson_native_use_feature bluetooth bluez5-codec-ldac)
 | 
			
		||||
		$(meson_native_use_feature bluetooth opus)
 | 
			
		||||
		$(meson_native_use_feature bluetooth bluez5-codec-opus)
 | 
			
		||||
		$(meson_native_use_feature bluetooth libusb) # At least for now only used by bluez5 native (quirk detection of adapters)
 | 
			
		||||
		$(meson_native_use_feature echo-cancel echo-cancel-webrtc) #807889
 | 
			
		||||
		-Dcontrol=enabled # Matches upstream
 | 
			
		||||
		-Daudiotestsrc=enabled # Matches upstream
 | 
			
		||||
		-Dffmpeg=disabled # Disabled by upstream and no major developments to spa/plugins/ffmpeg/ since May 2020
 | 
			
		||||
		$(meson_native_use_feature ffmpeg pw-cat-ffmpeg)
 | 
			
		||||
		$(meson_native_use_feature flatpak)
 | 
			
		||||
		-Dpipewire-jack=enabled # Allows integrating JACK apps into PW graph
 | 
			
		||||
		$(meson_native_use_feature jack-client jack) # Allows PW to act as a JACK client
 | 
			
		||||
		$(meson_use jack-sdk jack-devel)
 | 
			
		||||
		$(usex jack-sdk "-Dlibjack-path=${EPREFIX}/usr/$(get_libdir)" '')
 | 
			
		||||
		-Dsupport=enabled # Miscellaneous/common plugins, such as null sink
 | 
			
		||||
		-Devl=disabled # Matches upstream
 | 
			
		||||
		-Dtest=disabled # fakesink and fakesource plugins
 | 
			
		||||
		-Dbluez5-codec-lc3plus=disabled # unpackaged
 | 
			
		||||
		$(meson_native_use_feature liblc3 bluez5-codec-lc3)
 | 
			
		||||
		$(meson_native_use_feature lv2)
 | 
			
		||||
		$(meson_native_use_feature v4l v4l2)
 | 
			
		||||
		$(meson_native_use_feature libcamera)
 | 
			
		||||
		$(meson_native_use_feature readline)
 | 
			
		||||
		$(meson_native_use_feature ssl raop)
 | 
			
		||||
		-Dvideoconvert=enabled # Matches upstream
 | 
			
		||||
		-Dvideotestsrc=enabled # Matches upstream
 | 
			
		||||
		-Dvolume=enabled # Matches upstream
 | 
			
		||||
		-Dvulkan=disabled # Uses pre-compiled Vulkan compute shader to provide a CGI video source (dev thing; disabled by upstream)
 | 
			
		||||
		$(meson_native_use_feature extra pw-cat)
 | 
			
		||||
		-Dudev=enabled
 | 
			
		||||
		-Dudevrulesdir="${EPREFIX}$(get_udevdir)/rules.d"
 | 
			
		||||
		-Dsdl2=disabled # Controls SDL2 dependent code (currently only examples when -Dinstalled_tests=enabled which we never install)
 | 
			
		||||
		-Dlibmysofa=disabled # libmysofa is unpackaged
 | 
			
		||||
		$(meson_native_use_feature extra sndfile) # Enables libsndfile dependent code (currently only pw-cat)
 | 
			
		||||
		-Dsession-managers="[]" # All available session managers are now their own projects, so there's nothing to build
 | 
			
		||||
 | 
			
		||||
		# We still have <5.16 kernels packaged in Gentoo and 6.1 (LTS) only
 | 
			
		||||
		# just became stable, with 5.15 being the previous LTS. Many people
 | 
			
		||||
		# are still on it.
 | 
			
		||||
		-Dpam-defaults-install=true
 | 
			
		||||
 | 
			
		||||
		# Just for bell sounds in X11 right now.
 | 
			
		||||
		$(meson_native_use_feature X x11)
 | 
			
		||||
		$(meson_native_use_feature X x11-xfixes)
 | 
			
		||||
		$(meson_native_use_feature X libcanberra)
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	meson_src_configure
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
multilib_src_test() {
 | 
			
		||||
	meson_src_test --timeout-multiplier 10
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
multilib_src_install() {
 | 
			
		||||
	# Our custom DOCS do not exist in multilib source directory
 | 
			
		||||
	DOCS= meson_src_install
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
multilib_src_install_all() {
 | 
			
		||||
	einstalldocs
 | 
			
		||||
 | 
			
		||||
	if use pipewire-alsa; then
 | 
			
		||||
		dodir /etc/alsa/conf.d
 | 
			
		||||
 | 
			
		||||
		# Install pipewire conf loader hook
 | 
			
		||||
		insinto /usr/share/alsa/alsa.conf.d
 | 
			
		||||
		doins "${FILESDIR}"/99-pipewire-default-hook.conf
 | 
			
		||||
		eprefixify "${ED}"/usr/share/alsa/alsa.conf.d/99-pipewire-default-hook.conf
 | 
			
		||||
 | 
			
		||||
		# These will break if someone has /etc that is a symbolic link to a subfolder! See #724222
 | 
			
		||||
		# And the current dosym8 -r implementation is likely affected by the same issue, too.
 | 
			
		||||
		dosym ../../../usr/share/alsa/alsa.conf.d/50-pipewire.conf /etc/alsa/conf.d/50-pipewire.conf
 | 
			
		||||
		dosym ../../../usr/share/alsa/alsa.conf.d/99-pipewire-default-hook.conf /etc/alsa/conf.d/99-pipewire-default-hook.conf
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	# Enable required wireplumber alsa and bluez monitors
 | 
			
		||||
	if use sound-server; then
 | 
			
		||||
		dodir /etc/wireplumber/main.lua.d
 | 
			
		||||
		echo "alsa_monitor.enabled = true" > "${ED}"/etc/wireplumber/main.lua.d/89-gentoo-sound-server-enable-alsa-monitor.lua || die
 | 
			
		||||
 | 
			
		||||
		dodir /etc/wireplumber/bluetooth.lua.d
 | 
			
		||||
		echo "bluez_monitor.enabled = true" > "${ED}"/etc/wireplumber/bluetooth.lua.d/89-gentoo-sound-server-enable-bluez-monitor.lua || die
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	if use system-service; then
 | 
			
		||||
		newtmpfiles - pipewire.conf <<-EOF || die
 | 
			
		||||
			d /run/pipewire 0755 pipewire pipewire - -
 | 
			
		||||
		EOF
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	if ! use systemd; then
 | 
			
		||||
		insinto /etc/xdg/autostart
 | 
			
		||||
		newins "${FILESDIR}"/pipewire.desktop-r2 pipewire.desktop
 | 
			
		||||
 | 
			
		||||
		exeinto /usr/bin
 | 
			
		||||
		newexe "${FILESDIR}"/gentoo-pipewire-launcher.in-r2 gentoo-pipewire-launcher
 | 
			
		||||
 | 
			
		||||
		doman "${FILESDIR}"/gentoo-pipewire-launcher.1
 | 
			
		||||
 | 
			
		||||
		# Disable pipewire-pulse if sound-server is disabled.
 | 
			
		||||
		if ! use sound-server ; then
 | 
			
		||||
			sed -i -s '/pipewire -c pipewire-pulse.conf/s/^/#/' "${ED}"/usr/bin/gentoo-pipewire-launcher || die
 | 
			
		||||
		fi
 | 
			
		||||
 | 
			
		||||
		eprefixify "${ED}"/usr/bin/gentoo-pipewire-launcher
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pkg_postrm() {
 | 
			
		||||
	udev_reload
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pkg_preinst() {
 | 
			
		||||
	HAD_SOUND_SERVER=0
 | 
			
		||||
	HAD_SYSTEM_SERVICE=0
 | 
			
		||||
 | 
			
		||||
	if has_version "media-video/pipewire[sound-server(-)]" ; then
 | 
			
		||||
		HAD_SOUND_SERVER=1
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	if has_version "media-video/pipewire[system-service(-)]" ; then
 | 
			
		||||
		HAD_SYSTEM_SERVICE=1
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pkg_postinst() {
 | 
			
		||||
	udev_reload
 | 
			
		||||
 | 
			
		||||
	use system-service && tmpfiles_process pipewire.conf
 | 
			
		||||
 | 
			
		||||
	local ver
 | 
			
		||||
	for ver in ${REPLACING_VERSIONS} ; do
 | 
			
		||||
		if has_version kde-plasma/kwin[screencast] || has_version x11-wm/mutter[screencast] ; then
 | 
			
		||||
			# https://bugs.gentoo.org/908490
 | 
			
		||||
			# https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3243
 | 
			
		||||
			ewarn "Please restart KWin/Mutter after upgrading PipeWire."
 | 
			
		||||
			ewarn "Screencasting may not work until you do."
 | 
			
		||||
		fi
 | 
			
		||||
 | 
			
		||||
		if ver_test ${ver} -le 0.3.66-r1 ; then
 | 
			
		||||
			elog ">=pipewire-0.3.66 uses the 'pipewire' group to manage permissions"
 | 
			
		||||
			elog "and limits needed to function smoothly:"
 | 
			
		||||
			elog
 | 
			
		||||
			elog "1. Please make sure your user is in the 'pipewire' group for"
 | 
			
		||||
			elog "the best experience with realtime scheduling (PAM limits behavior)!"
 | 
			
		||||
			elog "You can add your account with:"
 | 
			
		||||
			elog " usermod -aG pipewire <youruser>"
 | 
			
		||||
			elog
 | 
			
		||||
			elog "2. For the best experience with fast user switching, it is recommended"
 | 
			
		||||
			elog "that you remove your user from the 'audio' group unless you rely on the"
 | 
			
		||||
			elog "audio group for device access control or ACLs.:"
 | 
			
		||||
			elog " usermod -rG audio <youruser>"
 | 
			
		||||
			elog
 | 
			
		||||
 | 
			
		||||
			if ! use jack-sdk ; then
 | 
			
		||||
				elog
 | 
			
		||||
				elog "JACK emulation is incomplete and not all programs will work. PipeWire's"
 | 
			
		||||
				elog "alternative libraries have been installed to a non-default location."
 | 
			
		||||
				elog "To use them, put pw-jack <application> before every JACK application."
 | 
			
		||||
				elog "When using pw-jack, do not run jackd/jackdbus. However, a virtual/jack"
 | 
			
		||||
				elog "provider is still needed to compile the JACK applications themselves."
 | 
			
		||||
				elog
 | 
			
		||||
			fi
 | 
			
		||||
 | 
			
		||||
			if use systemd ; then
 | 
			
		||||
				ewarn
 | 
			
		||||
				ewarn "PipeWire daemon startup has been moved to a launcher script!"
 | 
			
		||||
				ewarn "Make sure that ${EROOT}/etc/pipewire/pipewire.conf either does not exist or no"
 | 
			
		||||
				ewarn "longer is set to start a session manager or PulseAudio compatibility daemon (all"
 | 
			
		||||
				ewarn "lines similar to '{ path = /usr/bin/pipewire*' should be commented out)"
 | 
			
		||||
				ewarn
 | 
			
		||||
				ewarn "Those manually starting /usr/bin/pipewire via .xinitrc or similar _must_ from"
 | 
			
		||||
				ewarn "now on start ${EROOT}/usr/bin/gentoo-pipewire-launcher instead! It is highly"
 | 
			
		||||
				ewarn "advised that a D-Bus user session is set up before starting the script."
 | 
			
		||||
				ewarn
 | 
			
		||||
			fi
 | 
			
		||||
 | 
			
		||||
			if use sound-server && ( has_version 'media-sound/pulseaudio[daemon]' || has_version 'media-sound/pulseaudio-daemon' ) ; then
 | 
			
		||||
				elog
 | 
			
		||||
				elog "This ebuild auto-enables PulseAudio replacement. Because of that, users"
 | 
			
		||||
				elog "are recommended to edit pulseaudio client configuration files:"
 | 
			
		||||
				elog "${EROOT}/etc/pulse/client.conf and ${EROOT}/etc/pulse/client.conf.d/enable-autospawn.conf"
 | 
			
		||||
				elog "if it exists, and disable autospawning of the original daemon by setting:"
 | 
			
		||||
				elog
 | 
			
		||||
				elog "  autospawn = no"
 | 
			
		||||
				elog
 | 
			
		||||
				elog "Please note that the semicolon (;) must _NOT_ be at the beginning of the line!"
 | 
			
		||||
				elog
 | 
			
		||||
				elog "Alternatively, if replacing PulseAudio daemon is not desired, edit"
 | 
			
		||||
				elog "${EROOT}/usr/bin/gentoo-pipewire-launcher by commenting out the relevant"
 | 
			
		||||
				elog "command:"
 | 
			
		||||
				elog
 | 
			
		||||
				elog "#${EROOT}/usr/bin/pipewire -c pipewire-pulse.conf &"
 | 
			
		||||
				elog
 | 
			
		||||
			fi
 | 
			
		||||
 | 
			
		||||
			if has_version 'net-misc/ofono' ; then
 | 
			
		||||
				ewarn "Native backend has become default. Please disable oFono via:"
 | 
			
		||||
				if systemd_is_booted ; then
 | 
			
		||||
					ewarn "systemctl disable ofono"
 | 
			
		||||
				else
 | 
			
		||||
					ewarn "rc-update delete ofono"
 | 
			
		||||
				fi
 | 
			
		||||
			fi
 | 
			
		||||
		fi
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
	if [[ ${HAD_SOUND_SERVER} -eq 0 || -z ${REPLACING_VERSIONS} ]] ; then
 | 
			
		||||
		# TODO: We could drop most of this if we set up systemd presets?
 | 
			
		||||
		# They're worth looking into because right now, the out-of-the-box experience
 | 
			
		||||
		# is automatic on OpenRC, while it needs manual intervention on systemd.
 | 
			
		||||
		if use sound-server && use systemd ; then
 | 
			
		||||
			elog
 | 
			
		||||
			elog "When switching from PulseAudio, you may need to disable PulseAudio:"
 | 
			
		||||
			elog
 | 
			
		||||
			elog "  systemctl --user disable pulseaudio.service pulseaudio.socket"
 | 
			
		||||
			elog
 | 
			
		||||
			elog "To use PipeWire, the user units must be manually enabled"
 | 
			
		||||
			elog "by running this command as each user you use for desktop activities:"
 | 
			
		||||
			elog
 | 
			
		||||
			elog "  systemctl --user enable pipewire.socket pipewire-pulse.socket"
 | 
			
		||||
			elog
 | 
			
		||||
			elog "A reboot is recommended to avoid interferences from still running"
 | 
			
		||||
			elog "PulseAudio daemon."
 | 
			
		||||
			elog
 | 
			
		||||
			elog "Both new users and those upgrading need to enable WirePlumber"
 | 
			
		||||
			elog "for relevant users:"
 | 
			
		||||
			elog
 | 
			
		||||
			elog "  systemctl --user disable pipewire-media-session.service"
 | 
			
		||||
			elog "  systemctl --user --force enable wireplumber.service"
 | 
			
		||||
			elog
 | 
			
		||||
			elog "Root user may replace --user with --global to change system default"
 | 
			
		||||
			elog "configuration for all of the above commands."
 | 
			
		||||
			elog
 | 
			
		||||
		fi
 | 
			
		||||
 | 
			
		||||
		if ! use sound-server ; then
 | 
			
		||||
			ewarn
 | 
			
		||||
			ewarn "USE=sound-server is disabled! If you want PipeWire to provide"
 | 
			
		||||
			ewarn "your sound, please enable it. See the wiki at"
 | 
			
		||||
			ewarn "https://wiki.gentoo.org/wiki/PipeWire#Replacing_PulseAudio"
 | 
			
		||||
			ewarn "for more details."
 | 
			
		||||
			ewarn
 | 
			
		||||
		fi
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	if use system-service && [[ ${HAD_SYSTEM_SERVICE} -eq 0 || -z ${REPLACING_VERSIONS} ]] ; then
 | 
			
		||||
		ewarn
 | 
			
		||||
		ewarn "You have enabled the system-service USE flag, which installs"
 | 
			
		||||
		ewarn "the system-wide systemd units that enable PipeWire to run as a system"
 | 
			
		||||
		ewarn "service. This is more than likely NOT what you want. You are strongly"
 | 
			
		||||
		ewarn "advised not to enable this mode and instead stick with systemd user"
 | 
			
		||||
		ewarn "units. The default configuration files will likely not work out of the"
 | 
			
		||||
		ewarn "box, and you are on your own with configuration."
 | 
			
		||||
		ewarn
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	elog "For latest tips and tricks, troubleshooting information, and documentation"
 | 
			
		||||
	elog "in general, please refer to https://wiki.gentoo.org/wiki/PipeWire"
 | 
			
		||||
	elog
 | 
			
		||||
 | 
			
		||||
	optfeature_header "The following can be installed for optional runtime features:"
 | 
			
		||||
	optfeature "restricted realtime capabilities via D-Bus" sys-auth/rtkit
 | 
			
		||||
 | 
			
		||||
	if use sound-server && ! use pipewire-alsa; then
 | 
			
		||||
		optfeature "ALSA plugin to use PulseAudio interface for output" "media-plugins/alsa-plugins[pulseaudio]"
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
@@ -1,201 +0,0 @@
 | 
			
		||||
DIST aho-corasick-1.0.1.crate 167320 BLAKE2B f148004140d4f705e93f448020b97c434b93fea6ae34fd74b1f394b076c2727a87f5ec54542a0f52822d716c10ada3c68ae8f50a46c455fc6e828b10b5650ecc SHA512 7cea5b2305b90aebc54f78446cfc91f275b1be8489d2d80c3baa9ff8b913f9b2296adbdf4aefb0d8fce8f57812963fb9450b200d133a9d61e100cef324068070
 | 
			
		||||
DIST anyhow-1.0.70.crate 43803 BLAKE2B 574da0e447592c12051deef171850b00ac2347dd336f71915dd21f45cc03439fbcdbaffe261097d53cc11fa0db75b1e3b21ba667f26c08db7125b1c6264973de SHA512 6fd1338e4cbe915cb01fcc5e05e7e0c051868701eeb27f03577a7cfdd59057493922b36e2308f7050608a851112d4d24cff2826456160ac8930fe961640e809b
 | 
			
		||||
DIST ashpd-0.4.0.crate 66215 BLAKE2B 81de31341d7171d4d97e8ce4599321fb65412a487db96d8bfa21ce49bbf165777731630154047689d67d7838ca7662fccf2adbdc6cfc88d39eaab5e8b0653fae SHA512 f90a2f9de03cd90f80c2d194d597d74366e7e76e183395d772aa1b2e3d4beb47cfa532c711418798d28f4759d3be0679df29330dc82cd550ecc42b8a136dc8d6
 | 
			
		||||
DIST async-broadcast-0.5.1.crate 20134 BLAKE2B a45a7ff0b05eaab687f0912b2fdd0c3d9379402d5ccb8269568fbf77e235b42db0f741b4743438511fc00e7e1c6ec09c7b2f6e37b4b9a4df07846ae582e9c812 SHA512 48de28fad3fa8258b61f1adc0f13e69698f0fc3e11c68eb6b6d2df11784dc5c1e09f6f2c03dd12679d9888171b87cff3362ee06b910833e55d278738ab7508ae
 | 
			
		||||
DIST async-channel-1.8.0.crate 13534 BLAKE2B a59ed929ca4a6b4f2d50506164e3d58c04449ed1ba9848af69531b163c7f385d846fb1ecad4fe2ad71d55ce58bb27d7c629a706f01438f23cd96b9910f6265f6 SHA512 8352b2f28565825cd7b51421fb3ff904c0c5d5e1fcebc71c91f0b60c662f9b949721b3da91fe0a205345c6f650d35afbc3340d61b637d72325af869aae24794a
 | 
			
		||||
DIST async-executor-1.5.1.crate 18615 BLAKE2B 0bcd5e7d294a53af66f2a8f1c4664509e81eeeac72102f4008365cae1a4adf3c47231a53a4cdfd3e4443eff46af0a38c3caff36677278279ef1140666df31435 SHA512 fffba369052e8b962721d58093886436b0953d328847f7008a02971daa4e7a5b2980707cd6a6aa3915bdb243f1b972a34b8b9974ccf8d165e36a56710d42ff59
 | 
			
		||||
DIST async-fs-1.6.0.crate 16506 BLAKE2B ddb7a86d6e294a07f0d494448d0bbea31df320e5d5734222ce3949753fb686b15ba5811c5dc7fa5e77d1be62154447e2cd096c7b7f7021450c5c75c59d45a8b2 SHA512 18d226cc21e5c8c96c269c883b6d5784bbaa45be5b883908d7f2cc61ae8797441a9b3786a02ce9664013d406beb679c5a8e89e6ab82d11bc2b981b600b3d6830
 | 
			
		||||
DIST async-global-executor-2.3.1.crate 11790 BLAKE2B 601d2551fb5b93a40495f5fe5edd787defda8ab91fcd7a80bbac046d837b42690c1a2d154cf7f7cc47c928eb7baa042b9cbbf4f152fabd93d7ce74b2e29a47fa SHA512 91adf1a880b8508de4edafa5590e8ef426c2569789e93956f447ce088b02e203475a5b5d110d31baf6ff63a0012aeefc5dd25737ebc9d2edfdf78b7fc1a4f04e
 | 
			
		||||
DIST async-io-1.13.0.crate 37191 BLAKE2B ec27c5a49550f9a2cda66df0a6c54e5a64191e6c1ebade4e47a3164cd04fe7fff60d225788983f55e47a785dd57c74a22f2a3455349d2d451646e4d0e7f4ffcb SHA512 b37a13fdb1d29e2e8852ab6f24589718a88aa39bf532145ae7541d61c3f49f731f890764dd945845eef6c8b5af1042bac2c04cdabc00b36dc4350fa1c62ce54e
 | 
			
		||||
DIST async-lock-2.7.0.crate 23631 BLAKE2B 90814a489eef98a773ed5dfca5fc3e6b8e2b7a2c37e18f289292f46efce496d4378321327c947dce219add2b7aaf199b96beb9d19cf22536f1ff99b932e50314 SHA512 b151aa4a7fe4ad7dd68559dfef203dcfdd2084e175a6fe414298bd28c632ef422631d49c821fe075ec6f549269e0c0cefc16ea56741d3d8317a99489ed638bb9
 | 
			
		||||
DIST async-recursion-1.0.4.crate 11521 BLAKE2B 5ec9ea2c5cfefecd1f16170a00973fdd8b3a101680431348cfadbdc235163921a0ea4f04ba890d40c4f781f0c0be452ddcc119fe3539c24784baa67337a10c1e SHA512 2305ada4209501b53c2b9ce9255ad821975691d445234aab5a2c0855e442de4ef950c6ac3da832b5962a5a54565b184d16778993e0cf756b7a6d60b8b484839c
 | 
			
		||||
DIST async-std-1.12.0.crate 215080 BLAKE2B 1d9c56e03971f742b6e78a7a8ae097a6b1b622f64ebe378fa54511187e7c9c7ed5840ed6282633ac6636d3130d0ed4cc7985eb1a5c32718f07b57bc7172f3eaa SHA512 aaeef7f474fc700bba7beb6725d4eb778a9a05ebccfecdd81789b5d039c49508860d953f231c7b8fbce4c5b237d063a43eb03b83410490fc14eca572884f57e2
 | 
			
		||||
DIST async-task-4.4.0.crate 35178 BLAKE2B 6dc05e0e121d42779e00914fbec5027a2f280acfb4a4c72c66f0ba8e5e9705ef8f0032a5452d9a90e1909e4f828c32cf1fbb1d686877893c7991334ce40566e1 SHA512 713620c4aa948f8da61b6587fa3c24e523c42268d59c77ed0481788066b543933e2e68df969315d3cef5d59ef1e9fc1b0f9f293e1a6af9ff31ea8ddd86a5a260
 | 
			
		||||
DIST async-trait-0.1.68.crate 28625 BLAKE2B 30ed53ddb60967201755cded9fbd87cf1ec58071019227069bd501f5242d18d906cf5b05488e8611f1167237e03c472bb90e28d396306985ab2afd9be379f2ea SHA512 4f4390ab76a6150f7115cd4bfb132be48a846d768aee8c54bff6a18ae3bc52cad5a96119ad621ceabd055af0210629894343f09fff35c68cb9c4f28d08c7006a
 | 
			
		||||
DIST atomic-waker-1.1.1.crate 11551 BLAKE2B 83d329f1e95a2d859d842a3553464636c8000df359d03f7ee8e7c11ac6c14b7eddd176514c1b3405cac93c37ba50ba8d90f90b6ae1ea122589ae3cbafec554bc SHA512 a42d21849d9b4569b099eca63c9d0f383439e382a0c2b7d0bcc42af988db9c8cd77c941af7d6839b6b4445c95782739f07f526daef36b3f4d885410e260be0e3
 | 
			
		||||
DIST atomic_refcell-0.1.10.crate 10962 BLAKE2B b6282b9f02e05b9bc9619bc77696a85975028bd8d57a57ae07a17140425b11c69f12dfb3b69d241e2a5fc92ae63229ddb304a51777a4cf8dca5c0261869cc7da SHA512 dd815a9cb375d35c42fefa3cdd9269e631bacc1dcff1d0ccb8ee087e7dba5bc16712cf90f8596be0d07f1ab8e3d95c1567313249b3809167895161dfff59da08
 | 
			
		||||
DIST autocfg-1.1.0.crate 13272 BLAKE2B 7724055c337d562103f191f4e36cab469e578f0c51cc24d33624dea155d108a07578703766341fd6a4cc1ef52acda406e7dba1650d59115f18261281e5b40203 SHA512 df972c09abbdc0b6cb6bb55b1e29c7fed706ece38a62613d9e275bac46a19574a7f96f0152cccb0239efea04ee90083a146b58b15307696c4c81878cd12de28f
 | 
			
		||||
DIST bitflags-1.3.2.crate 23021 BLAKE2B eb990bb27b2bdeb66fd7212ce582cb36e1c616debbac85df642d0c82b25439e6bf9b1e811fac76b59e58ea3c1bbea6170d03a61e8f9a395e4334a0e2e2987eda SHA512 3c698f757b5cc62f815f9a1cce365c3d2dd88e4db71f331dff8bba86c2865f755b81cb4c9bfc59bd86b7643b0943f9e09a7c4f8ad75eb2ab0e714803d0129f62
 | 
			
		||||
DIST block-buffer-0.10.4.crate 10538 BLAKE2B d819c4f9c4be85868e8b105fb7e479d2e58d3ed85c3339bd677a3e111f85cb1ff624a54d7802ab79a6e1d9221115f66388568340480fe83eae1cb448f19f5b11 SHA512 b7d436d8e627e16e6ddc300ee8f706a6cef28ff6f09eff848eedee46f84bdcd03601303c92ab8996042e55922866a59259948177c0a4496eed723523e77f6fdb
 | 
			
		||||
DIST blocking-1.3.1.crate 19040 BLAKE2B 74bde93cf2ac1e626c1d721d83f3d9f65ea58f99295d788c53dae5f33f322572e1c67441c7fb13ab2357e54e8540ef200ffac5a4a123ea0dcc7746c12a63b624 SHA512 e2da1fd0b07153701ca8fd5a62a859e9bdd484b338aaaf8c59a211c298b9ae469f71386f8f4b7099a910de04900de88b51965ae79f4edf4fa8b2ebe0a6e78d41
 | 
			
		||||
DIST byteorder-1.4.3.crate 22512 BLAKE2B d39c546ba7346df315297fc53da4bfc77ecb1f38567ddb788549ee31cae2719a8bc0b7d1f1705abb3cff033aa57af004987d90748f5a31765273b3223a011c0d SHA512 8c8000eb8ecf40351c9ce36a3a8acd7a02f81786d1b11aab85adfeffa0f2267ed74df29b2ca5d1d38128484d1d3cad2b673aa0d0441dcd0620dfd3934bb888fa
 | 
			
		||||
DIST cairo-rs-0.17.0.crate 53810 BLAKE2B 7f46c8014572167f5830fc2287404d9aea1dbb1e42a3c817e1c13615ad7965411b685a1c0b13df48022f6d6dfe24105b20ded0395d5b1a2dee04d4b8a633d48e SHA512 dfb02455b6a22e3814237a640433ee61eaff55a57e72966e902fea88f777d44db822bdfccda20a88a812fea5f1b53cd3d7bfcd4332c0117807d109efab96a8a4
 | 
			
		||||
DIST cairo-sys-rs-0.17.0.crate 11639 BLAKE2B df8486f9c34cacd1cfedce3c9c69bf61d692e2039d70129a270a2e2611254ad4b149235f2ed27ab167fdb1ff2322d7ef99ef213e5930bc62bbe043daa2dc06c7 SHA512 af2f932748d5f8361448ff5441ab865fa9d4f41bb84a8c8e6240d819874513ef32d20cafa83a08238745ddf01c5447424460c23af69f61e23d580985c7843a9a
 | 
			
		||||
DIST cc-1.0.79.crate 62624 BLAKE2B b3cbed3bd6fcac1c6ea258ec96cd107f859947a35dc89c3dc8f314741b0f668e61518f896ec32ce10c9a7eb20dd350bc177a71810d53ebea59fda062ed9d27db SHA512 cbf0a25f3a23fc540e9d638fabc23f761f1c240ebb4814e761e90437d71fc559cd155768ab9e78fc192220d8a605c66c3af342ed736b719181656170b98d7bf5
 | 
			
		||||
DIST cfg-expr-0.15.1.crate 40860 BLAKE2B 66d7144c6ef87ee78ccb7c11e8dae73221d89039dee77e57207bee666888f5fd2162075ec13ef2cf844ddf05bfddd0ea95bf89f894e647ab4e7c0f4ae4df6dd4 SHA512 cd13158c37ccc01c0cdc23f3d9def013a1dcb0864cf8341b1d8117ab7fef9f9b4a221eceb71bb5ff1704c334e354a4d13b3cb68b8f3a59c4efb956eaa2fe84bd
 | 
			
		||||
DIST cfg-if-1.0.0.crate 7934 BLAKE2B e99a5589c11d79d77a4537b34ce0a45d37b981c123b79b807cea836c89fc3926d693458893baca2882448d3d44e3f64e06141f6d916b748daa10b8cc1ae16d1b SHA512 0fb16a8882fd30e86b62c5143b1cb18ab564e84e75bd1f28fd12f24ffdc4a42e0d2e012a99abb606c12efe3c11061ff5bf8e24ab053e550ae083f7d90f6576ff
 | 
			
		||||
DIST chrono-0.4.24.crate 191330 BLAKE2B 492a5f1a458db9d6eaf244ac6ee750fee5b4e2586b7c675f87f2515143080774f13f9c163bcfc84b08ec70b90c7fab2ffa438f9b2b8b4ec1e691fbf9a104ad50 SHA512 1a9121870aa4d76448a1b118a2e135a145a55c7784c4f5a4f25732f8597b8655f32cbce174bdd65c2dc7b17dcc3a608454d0e3dc29b86338e42a839f8be1e4fd
 | 
			
		||||
DIST concurrent-queue-2.2.0.crate 19971 BLAKE2B 352eac954937dcdaf85de274125910abb9d338fc3b173ee2f3b800881209f9ab024428a615f2be15eef7112167cebdafd8d5d527e19d13cbeb412e0695337426 SHA512 0e5f69c188cda8e54a7236dddb3a92e929b906c3bbac3d3988b7b5a101001a21cf48ea3a4fa9abd52f395d20e2c04f822c39ae2ca25b287fbe823d5e665ae401
 | 
			
		||||
DIST cpufeatures-0.2.7.crate 11563 BLAKE2B 917f8ce2675519b4d5d89fe09b02e147f00a915d195158a690b292376bcc2937dee8f76778506556ecde0187c74ca8c046973f44e1f34e4c8bb6809d2d4347b7 SHA512 46988efd895b88751200dd9693a1040f698c8b2ecd5d3d4ae1d8055e719aff262afea764083dabf1d8202a51e7e16b4f51adcffc8a2424c841b58840b6669490
 | 
			
		||||
DIST crossbeam-utils-0.8.15.crate 42326 BLAKE2B 23e6bd2a6535c6fccf7b7d17487fdd4095c92a3f3ae383a72dd6d90c1c49c2ec8d96dc01a94c7127b2681bfaef843585b3ae8665ecbc43b2e7db8434e31c6c8b SHA512 adb9ce1886396bc637299cb8122d102bcc9e561f25d67ef73e98c9ed8a8b13b78bc0f5bbacab19d015e1a7690bc0201f08b3d8e82393ec347e7f2933eb622533
 | 
			
		||||
DIST crypto-common-0.1.6.crate 8760 BLAKE2B f2422bfb89c15d47a8f91c8f6695e05eb56990a922e3cdf3d426044736f9932324c0d899a151a6df4d6683e6a6b21659c657d3988734014c02cd854bb4b924e7 SHA512 471dbc43f517089d2cfe0868e29510c6ca579875b3bb5d013c70796db969b609b6c4bb35c9a07b9a2917012dc5708b717d48e317a20038adbe7e7039bf3ada6f
 | 
			
		||||
DIST ctor-0.1.26.crate 10803 BLAKE2B 93627949b92651243b7a763d3d45a22fafcf2147a30661c4cc017e222bfc2bc12b4071054e3079adc431fc8a5dd8b86a8d11c53c401be6db846a3d0d2076b9b5 SHA512 3a3d60c976ec02a9edfe04470af4b04b02601c48e2a007393cedfef5c13e22bca58630e9e885e635a71aabc3e0ad8fb70995876551cdbc6a31029d8d2bc2e86d
 | 
			
		||||
DIST derivative-2.2.0.crate 48076 BLAKE2B 56d27e27493c3b818ad45703efda607a0a0d9a48b0d43785b6a013443b8b964b67bb5b5284d242358415c5fb81b86b02079ee7c0595ec07bc658240eb114b887 SHA512 3c65ecdabd2dc202be3d83b06f96b6f68504fe542ede7e2285093c6d360a33ec76a3787c436c6e5ff8f59d430436a4b8ce2f908cf7b2b08cd8b0045de4e5d1da
 | 
			
		||||
DIST digest-0.10.6.crate 19527 BLAKE2B 402009105a6ac055be062769dd4f162aabb977b9afe29f451eeb3e6b5dd1a579c371c5ec996b9c1bdba3b4ded83830ed2e1934a0505480bffba1e0d16775a8f7 SHA512 21d3c1dc64e640300c51e8a009af464d6e3cd2b10aa67c87a038165c11409d6e5faad1967236724a9a4cab8fdd88826cac1db4798245fd53ac2ff1a9b2b68b76
 | 
			
		||||
DIST dlib-0.5.0.crate 5788 BLAKE2B 0c1bafa05ace4a51fa7f5d8db9cc46773c1da9948e6a3f7e531c60953e554798d562546b50ddbfdbc266da8cbb988c59d57a95e7c3ad6e6d84f9b4888180f264 SHA512 1f828bc845570d8d6a6fb6c4f9bacd7d4f50bf800a68fbce2e0b8f8bf1eeee7e7260fc95fc49a14a3f7e2a4264368c80d8328d408b2a6544f4f796c48a4fbf76
 | 
			
		||||
DIST downcast-rs-1.2.0.crate 11670 BLAKE2B 7d44d708c1ac068a02ea5d72dd3caa8a7f6d18b7ee653d520600acc9c52365824f5b8d3c68143d1d13aa438a18b16ff9975e15131cac7ec48b2d995184673d37 SHA512 b80b72f30b42c5e6b2bd33287f2dd22be5673b2fa5c1a8c75c5de224fc7eca46a55f2fce63c02d225dfbc94ac3462b4b2fec53d63331c70da6307ebcdcc6cb14
 | 
			
		||||
DIST enumflags2-0.7.7.crate 15090 BLAKE2B 6533e0aadd1a85b410d14f6dfa140c33ad58e2e8cee7c446b4c27f7cf567f33f5f788da4c1f0fd6cc5c3d210dd6f9626434105b1cbd7275e2fbd86a9a073e392 SHA512 2519a25cad271d86b3195b29b0b75bc8792ef08816881aa9f3b403d7c63e6bc69b1b0d4fd565a62fdef3ee0f387157e331f8b3a17093e4374565125b1c9f080f
 | 
			
		||||
DIST enumflags2_derive-0.7.7.crate 7903 BLAKE2B 0e8f4ad8558254a6e532868608c23f70f63abee3708ad7fd5c41c8791c33a8790c3fe2eeeed722d207fb75721cc37773b64baf2ce0a406dd465c016092e6caf2 SHA512 f4b0c3b1a731e83c7cf27765392baafb0f27555c0ab708a7a430f349c520df7333d4d926c348a15339b082c6d0335491fac41eba3e61d42c3522717acbf05df5
 | 
			
		||||
DIST event-listener-2.5.3.crate 15392 BLAKE2B c56ed5eafa64014141e869dcf952e86f755eb35ed1722f8139260cb502ba226351ed1bea301618e94c9ca7f3309747057eb5f7d7986cfcdb7f6b79d13d52b439 SHA512 ddd67c1139ffe2aba95d763b73db0e2a9985dd2e57cf8f72030047d53d46d833df4b4192730cf0af4e060ce52e4f2df23aab6509abb94a6cd02e0d8cc3559d22
 | 
			
		||||
DIST fastrand-1.9.0.crate 11910 BLAKE2B 570c66ec1d4ace08b9790299759e3b6f0394aca52c4ec2e02258229c198846cba7c0627807548bac3ef1f86c7e512c4bd105f1e18e35ac0ea6934f76a6838e1f SHA512 321567b5fad8552c0efc4393b1e77d1bce288b0a88c475d432f79e91b3457ee6eb5db9e4d65ac6381b9990c9916f4651b6a76250df44d51ea3e25bd8184bdc52
 | 
			
		||||
DIST field-offset-0.3.5.crate 10036 BLAKE2B 0400866b2ebd0514f88bed12f781869a11e6c77c263ace6a98696c15cd9077c09a4d022efae74e8ef23a5d516a2627bda9683dc7e391074f27e675c1152774e7 SHA512 c63394cc7caaaf1b4657dfdc343428fa49c4ed504b88608992a3ebb0c83b313ba4949c17e75d1c2fd4f88057865125f182b672f90373c16287ab526cad0f0497
 | 
			
		||||
DIST form_urlencoded-1.1.0.crate 8734 BLAKE2B eaca73d73d16242f3fa3e38e23531c67c01404697bc7b7eb7c64fa04167dcb403a41818487fc46c5d9118842818472d549a2f5fcef5e4d962461e1c103d895d1 SHA512 9e245495dbf235b147e4216b313f2e6a96357d2782a66d71c08c2902c6a065701ca8ecdbb6b2035983a83c44cf36c921b5c71d63af0e02dd39bf5f8347117e11
 | 
			
		||||
DIST futures-channel-0.3.28.crate 32281 BLAKE2B 128709ed9c3f275ee9365135426b626dab7d34a706cb9435a6ee45e2a28f7d2e6702b7bcd8b0788f7171ccc75917f287834a18c8af58b73ec07f46425aecdd97 SHA512 21bcae42859687538a3bbd4a4328b1a176bf8eec3b03f9d341f8ec08e796ada1638c0c3011246995d742e392a3ecf4446ccd2e92ea5426fe658c5f5ad8303b99
 | 
			
		||||
DIST futures-core-0.3.28.crate 14780 BLAKE2B 551327876d54a6ccd97382679d61afb3e344f7c8e26813ac85779a57850cbb1f54041c82d71a7bfe4a30d1c8d9aeb560d8d4bf5babe7010fb7cf3c36c8ebf3cf SHA512 a21900a68f1a9232c245b160e95896b109315f10719147b4f104e11edb5b59c862555e07aee37a7d4fbedf0f09a02d4ed329f92fa1ad4679db1d7c78ae2865e0
 | 
			
		||||
DIST futures-executor-0.3.28.crate 17743 BLAKE2B b192025f0838c924783090e7b0bd7806edae0502172e5f961d4cab5a4a5c074050ab6a707a50baa0ac2f505deb1e3ace4259349570beab0bff34b7bf6849e9ef SHA512 1404717a512f1968e3ac6c53bb6c428fa049b0f6c61565ddc4859407cf16c56735cddf7a2931b2816c6c8dc8809f76e7f98ff05d4f80e4567488c2aa7b424a50
 | 
			
		||||
DIST futures-io-0.3.28.crate 8910 BLAKE2B 5554e9dd8548be47e7195ae8b223288cc2e765dc9feb703092972ec9e19ade825bc9d7093625a77c7dd2213df59e2c70ada84a84446b5a940c3e62daeb9dd57d SHA512 805177f2677a09d94ce5f010af9244e0e0dc285937e355a836179297c4c912a762f8d96bce57af388502810dcb67a772b7a522f5c6b21be3aa4b7ee46372d402
 | 
			
		||||
DIST futures-lite-1.13.0.crate 37058 BLAKE2B e1151b6263adfc96494ced26c377eb6582c4529f1c6347c1f920623400d317f6466d11e03c1ed70dd4172c57340b13b1fb1cfceedf430e3b95879bfa120d8e59 SHA512 2c007c62294c86108eba30a850a341e8fb369892bcbacfcd4b7ca39f949bc9a20624c3bb21630706d8240e27dcc402cec542480dbae8867ff933375e4be15fef
 | 
			
		||||
DIST futures-macro-0.3.28.crate 11272 BLAKE2B 3f6bd63f402ab3348e1eae96897b4c18aad01b99a1f9ff555496fc6f3114cfb3334b1949604c21af251fdc4923c09e4412f40031ed92646a06ee05f6bee9a0d9 SHA512 accbe4f434b3704fea440e1fa7492c438068ac89798e3b2c85a2b251c55663ef2c65480f6da0884c8e80a9c5f5203aa6ae623059235f4a480a54d91bc5e9426a
 | 
			
		||||
DIST futures-sink-0.3.28.crate 7852 BLAKE2B 752286cb15ff37e9bf4c6cc80c8ebfeb229dbaa4e8aea6fa505f1e145e5dec99c4818c8e7ba2bd8a03898350e05bc124a5ad83e28989e282dbc132ed13e7fbf3 SHA512 e3535aaffa42215448d78adcba72f1dc3131598169dbcc8b52b82fe3e74f4b0d5631ab3dd3ac5d4315be890b94d6fd8f53de274ee4815f9abb27d40982c96c07
 | 
			
		||||
DIST futures-task-0.3.28.crate 11848 BLAKE2B 79cd7b01d24a5274b0e564edf0f5d041414d9dee02c503f2303958e679db0db3c652c64352052d20bbad7bace078b553f77920e2ae21a948a1c884eeecc663ab SHA512 198f3efa51b1a8492a4151a6e4ef6e7abd09f2f537f5ffc2b8f2cf739718fb9714718226ee1cde7a58d41a2e623445ae64013f02e7f00489320c06292465fa82
 | 
			
		||||
DIST futures-util-0.3.28.crate 158510 BLAKE2B 0721356a4947b39cd066dc8a88afa7686b832be269295af3ebff8cd74b42dffe5484399f66e3e11e2b54c2b8e04ee002a9d507eeb5259fbdc00b226e0f94b175 SHA512 0c7dd3701b7ab0a443a56aa64e6d9b6ba7bb9ccba4c05dfe17608df3e2bed1c2fa460a0cb4abb9fb25289d3a776128ffcc4fced75ca73a65d40b18ee2e9a46e4
 | 
			
		||||
DIST gdk-pixbuf-0.17.0.crate 18089 BLAKE2B 6ff9ae00facfd3b6b56fbb337c5c794e6d6ef17d2e9ce062e1db4fedbe60d1fa5148a8dfb7a2782bbc6b86aa6dd42b210b3d056bc883bd7307262da3101ab458 SHA512 217fb7979a8a244e28995e900d22068a83d0d5d3a3a5821f51358f2a4d3c2e4fec8c597b3045a50e0f8c805920562ca11bdbc0a10502973cf8263a53dbb5dfdd
 | 
			
		||||
DIST gdk-pixbuf-sys-0.17.0.crate 9687 BLAKE2B a44174d15e056fc12dc1641fc9b13d44c3463bc17ef71957b4f8520d5ca39d02093d89b1633bf4bbe29e4024075689e9bb15a5ca7c36d19db02f2d6fc26b630b SHA512 362e6fcde6b9bcc25bbbffd7c73144892a7e9d43df2e9222effbb7ac4c39433d6ea7917284834550108debe1b98bc965dbbff4db635445a5536129398d57d49d
 | 
			
		||||
DIST gdk4-0.6.3.crate 87365 BLAKE2B 2bcc2059d3358d8a096d05d0fbe41bf3c010366a3cb1afe5f461615ba664d4ac54daf0dc690a75fd23d835d682fde525c763f0989fea33840f65a870d560916b SHA512 43907706699fa2077fe8eb3bc4f014f4e7e48ee794252def2b2a801bf4d21250d50829d8837a476ae8a82b56b59661519805d5397072ef445efb7857cd30a347
 | 
			
		||||
DIST gdk4-sys-0.6.3.crate 64159 BLAKE2B 12edc5d9f52d39a51fe56a7e846c52efa3bd7bb36acbd64f046c155ceb918e2ac993a2173b1a01358178ec9e91a05d525d98e2cad8ac1b41d39403656aa62890 SHA512 96c6ec3ede545abca73ff9a9e55372ff8999af05121acf96e8f8df960ad4a779582e1cb999841926a6866d913158e9b36027332b8dde3d67d40daa1083f9650e
 | 
			
		||||
DIST gdk4-wayland-0.6.3.crate 7229 BLAKE2B 29d3e10f606cbc6d376b3c90b10460ce98e7399caf9bb8b8189823f8c18cfc8c34ca8b7a3de7ebd4e6b0a6bf576a624f77338e69f801df78d9dc084c8f34f4b4 SHA512 6a7b5a9beb23d47adc063ff4efe7787ba818aaddd65ca085135226e22cc3e5cf7782e9f122e25fc371622ee84a8280c08b0fb182706ed445064c753a3b281073
 | 
			
		||||
DIST gdk4-wayland-sys-0.6.3.crate 3447 BLAKE2B a65facdce57e79ad1c3f85e62fc923e38d0848dff80f55c6b305e1e3c1e3bb4879b1f8833ad95ff60e6201611d412e5995f919024e97227af4b78331f286a813 SHA512 ae3f8190b91e1ca14471cd341d97d8aae2469644a3803d0effd18b8b34de719eb3f00c3c2a091e4ada2473c70e03f5d2912c6ca4f43c1c7e0ce2da5c958d0bba
 | 
			
		||||
DIST gdk4-x11-0.6.3.crate 9973 BLAKE2B 6a88a4142a719547c475c64faa97342051f0b4833d181578c0c36abe32eeeae8bc69c4f44fb526b7798feb1c8ce9247f715ffaf785e3ad7551697c0993a4d64c SHA512 6996e67065bee41d0fa2892f0ec585ce065d241ca1e57a011b159879a48deab184428f8d4e66db50dba1425a94dabd060391b5b2a066823142f8588db180867f
 | 
			
		||||
DIST gdk4-x11-sys-0.6.3.crate 6564 BLAKE2B 791bcaef43aed8df3da51be53b6a77a5c2f22fbe0d7a0a58ce76ab2ad8202288dd741d78205e07ed2a0c2805dcac1c2f623d9339fc50555cffdc49dc46e5bf1b SHA512 6c6fbd53fca57fabe6dfe4507a6f46176e31a96b76597a5d0f138ae1e157a54211b0ecd1386cdb16c257b409fa32bd5c1958c743a8e3cd88ad4a5797c07736ee
 | 
			
		||||
DIST generic-array-0.14.7.crate 15950 BLAKE2B e74c785e3127095625951da192a018281ea9976aaeb11019f9088c3f27748c5fed1ef25d577150864486dc48b5138d6892e42f99979339f711a66fc70756c82b SHA512 363a7b04e4102f9ca63d429721c1ada6272be6bf0a2e97da681faf76381f73f0e3acb86623b9ce2dae441de9fda704088391779b9769ec02b3c8c9f9f35f897d
 | 
			
		||||
DIST getrandom-0.2.9.crate 34457 BLAKE2B ccf7232ece1047000140ed6bb9a1afa784be87b5cf83e2f58dff77abcd79e34120b45336cb05e47fbfde36407957fe9da8b04971092ec05f67b321fde9142d29 SHA512 48e341125223945d1c02c4dfc54df303ae27d3ceca0d5a30b42065f5e40da600cb2010bb59e88af6b990d54b5eb4bf83ae5bbd27e13e56363f5f68be03ea9082
 | 
			
		||||
DIST gettext-rs-0.7.0.crate 14816 BLAKE2B 1aa76215ea30beacf9f047aab393ff55c434d84be7e3798bfb316fbfd3275d221245afa246488c497f7ab76e7c03c41b9d68d8006541db5024743ede7a6b4475 SHA512 650526a5f08430d2f4de5109ef87797d8be3eb14cb6cb21fe17ff11f1d631903649590f0d74e8ed5d5ce0556a26a48831168b86d9783735082162b427cba87e8
 | 
			
		||||
DIST gettext-sys-0.21.3.crate 6501658 BLAKE2B cc7a29f1159e92daee55755cd5d720231bdd51979a94941dca31b22b4b12b2dd9e389002452f21cbafdb7f34eb25fa416a300359751adfdaf41ef2a1f8df3fd0 SHA512 b88873f92951875f21ede2bcafbd35ac317f6a8fd7502319f7522c02fa3e4157a53ac574bc22274ba565dc704780b32c1c6ce4b7e09e4f2f9e56e25bcaeb9e41
 | 
			
		||||
DIST gio-0.17.9.crate 211582 BLAKE2B 54dbf12fbb021f5f99fc0324012e3aa2a259adb7dafb1f698afec225a99b76e74131e8d97a6c2274bdf27a8087bde4a37a3964a0732e9bcd93a9994b6ad58ac4 SHA512 f6d6b68c47c94b27191112ea72a6f3d442cbaf7740dee6e964973deb99e3ec5408d17a7d1c5939c2903fc7d2800b0865f197ff9103e71d61e0cba3cfc8b29bee
 | 
			
		||||
DIST gio-sys-0.17.4.crate 81307 BLAKE2B 18edec393776d29cbaf11f52e2958773249d1cc18f80aecc22c76f293ea99034cd9e8939dfa7ea993ba1d56efd4ea472e9458f5406245e9a025a13cb9c356e8f SHA512 e92ace0a3d5c3f373a953297e7450685e245e03a2ea20fa8ad6ceb731d5f6ac8f1498b3eca35c3bce7142a540b626cbf829ca8854f93420c29b1fc220163d22a
 | 
			
		||||
DIST glib-0.17.9.crate 258857 BLAKE2B c24d5507f028e226d0ce3cd481c39081a44985e147fc6ab2644e5171e17f7ea222922c8098a2b2e5732798e9725cbeb9712ca8f3449ad3a2dc62e1694f3ee05c SHA512 18e7e3767a15885ea7187566889a9db0d52b146f8548fd2221a6d71db1df7538d3fb574bd1d7b085fdded7051ac1856cd1bd2014decddcc93c88b77b03f0b91a
 | 
			
		||||
DIST glib-macros-0.17.9.crate 47720 BLAKE2B 9c4c2f5c9d746927485f978098eabbcfb25882c89afc167494f31ab862392f644414e5670debf11f2eb79a6229b84a8f14988c862400e29697b2d874568e4ae0 SHA512 a4164655ef18d5afb33d8f4c92481f87c7add89f32314e15e6688bc5e76a2ce41a4f2ddbeffd0764ec1fd30945c5c170d0edc39f1e8c5dff792bb88370d0ca39
 | 
			
		||||
DIST glib-sys-0.17.4.crate 60120 BLAKE2B 6651b77f9342a1811d19f46a40024a9487d757a3f076edbff471091d043dbb667e19cda4a94b061c40623193b83411bc12d0944393d90003d68784d3c81a314f SHA512 e8545837a6cf7dc50bc18566cdecfb07074ff12bfd3e2f4657583f07e4f2274a48afd8f083db8ae2294484ed3166b165aa2b6ae071dd633bacadaca8bf33d1c0
 | 
			
		||||
DIST gobject-sys-0.17.4.crate 18632 BLAKE2B 92f04fc0ecffc8a652cead4eb2e720cd7396cda685a8f04d5096820dfa937b84ab111bdccf897bdf8b843629e9bbff682c52d5efec783466b385c5136170e8d6 SHA512 56a65fd7a43b626df50b6bc0ec35844b380dd55e2d02dc061027ce188df7dbbe035429366a0295d9352917d558c59af4b9350ceb511c365da1881ad921b006df
 | 
			
		||||
DIST graphene-rs-0.17.1.crate 17612 BLAKE2B 1a689e9a709fe55f827baf0286538df89e1d44f3b2d57d814d04620138063c28c69feabe74bb79fc61c9d94d2e8e08569bcbc39803057c7bda6086dc80d06ec4 SHA512 95dbcf681bdbab80a404897890c4e0d4d23a799a8fd731110e15bd802eea0981e51c9287a28455e80b2e47968c126fca70f3fa3ad9fa57db7f10653b13cafdbf
 | 
			
		||||
DIST graphene-sys-0.17.0.crate 11489 BLAKE2B 73230d6622573939aa3d698ddda0a7a2062cf6d4ad491d5c41167376a74fb552896a2b34b6607260084158567801a5af93ad35c166872de922998a10a18804ad SHA512 0617686f505d786ce17fe4067cc7a7f4f61a013f7ab0191a5a47e804da91bddbc4e9b833184975a8fb512b69397b2c667aa393ee5993a47c543cf478061862ea
 | 
			
		||||
DIST gsk4-0.6.3.crate 26706 BLAKE2B 354dce1dd0ceddee0611c31578f6e1c9b2a8f3dc8162f9d85ff72f188cd3331783b7a38e091d5a127e923747e9cfa1cf61a379bb69202f31cdf305b3eef0e51e SHA512 608e85c19191f820e877e868bfc25110d2ac0db7b55e5d25e95ead8d1d813a9d3eff830a6d6298ebd4ef24ab09bf19afb87286c2dfc85625ecfa4b89bb451adf
 | 
			
		||||
DIST gsk4-sys-0.6.3.crate 12299 BLAKE2B 0264906adeac06ef6491d5cdf8e3b9533b549d54c0866ab7df6fc2edc0a11a4d87f6e270b3caf7d3b10f148c480ccd727f01302e9899bda4794c7c188d34f8fe SHA512 2d7de6b179bf7f1331d15bf4a261c03a0c604bacf3dbf81045abc64ab8348f35a53716d2537f53fc73c841ecfd3d336761f99f2a39a2ca4e5737f71a90d0944d
 | 
			
		||||
DIST gst-plugin-gtk4-0.10.5.crate 27414 BLAKE2B dd2b092ad9c8c35b467943254a9193616a959e8d1399f695dc146cece9a97d76b8c5b2d9e77a6aaa412acd9309b312377e56b0752ff79b849818c6705e50730e SHA512 a69a74813fec9862cbc7830ce1ab457d650deef0b6119c298251dcd2841b0eb3b8b3d306e18412c66a8015ab4fed1b88bf82ae99d69acd56a72ec7aa479bf29a
 | 
			
		||||
DIST gst-plugin-version-helper-0.7.5.crate 3891 BLAKE2B ab12295118775db1eb1ff74845c3f9ba8dbc850c8991b5a5860cdf639c91b00a1b5688a506fc456128f48535923bce089e40ed03b7f8d1bff4d9cb45c9025648 SHA512 d7a84ac27105a7c5aee18fdbd82341d5c8ed0f24909bd62a96a25b91c8f56bb86d29a36dffe19e61b86797edf5f1ec32184472abfde4299da6777fd347c75329
 | 
			
		||||
DIST gstreamer-0.20.5.crate 309908 BLAKE2B 4820b37ed2423c4d767bab8f4f93efa0d97e80e40e45e647d0a3d326ecdedf5689beef6185d87174c7b05ec9b0cc1ad19b87d0bcc207a860c8ea16408aa8ecab SHA512 91975c965607c7a6b953f7353851b415cd03ef5af6261d5c92284dc77dcab63e067fa99786fcbefa54d3a858e55477e1589d1c76927aae0db10fcfe2b589380f
 | 
			
		||||
DIST gstreamer-audio-0.20.4.crate 70392 BLAKE2B 3c0dea51a089df7682c33fe907d7193a734a0fb0430769a647245ea4972f0c2aed56e25555c398890e31859366f3b6aa4a7832e1a7cb2ad551a00e8e236f306a SHA512 d544eed0ef2eb87b3ce47ef1e955501f00f93c22fb22a0435a42badbd46086ae6108a7e9742206b338d78c1b85c7e7a402ce5b20b56dd81b718495c5d67d4bc3
 | 
			
		||||
DIST gstreamer-audio-sys-0.20.0.crate 44141 BLAKE2B c79c85f318167e6f5286f9b3bcda3e52da36aa73f37b39d4ef1981136f72a0deb2ce8d50653cfb1472df32649b952aea013fc385d7763b6ffb5eae1353d5862d SHA512 68239acd0314017ca68afb51948f567e498ddfaa60ea6942f582a42babbea2609fb13c13683fdd2ecb78477fad368a07f65dee4d146ad5b48eec1696901de55d
 | 
			
		||||
DIST gstreamer-base-0.20.5.crate 64650 BLAKE2B 5f0b721fa0d3e9cfed82011cecd7f4145971fe507542e2f6c277e2ae4baac9373dbd58b07eb32402b03ccc95716541bcc4fc5e29279f9b66e6695a5978607886 SHA512 ce5e01767428fee441a30960e67cd61c502605bbed33191b2d52e848cf11266dce241eba7ed1435036de45cf7895dc53af79147ca748daa76589470ec939d1cb
 | 
			
		||||
DIST gstreamer-base-sys-0.20.0.crate 40094 BLAKE2B dfafa059f2e11bf302ee590ee5b850bc68188e24c2ab22cef261469b0bc49fc9e2042dbad9774a24495706ff12536b91a3c5c9d6e269c28497fb18c7042e7ce8 SHA512 476ce1c896c9355071ab264d56e0e04dbd5a30e8489117cf8c7675d3823ae306fdc1893e9a9eacb4d9fd8bfc88890fc7ccb60d688bf72bb4d4a33a07939c9133
 | 
			
		||||
DIST gstreamer-gl-0.20.0.crate 59723 BLAKE2B 872894dbc234031434f83754fe826dfbf46881f08fe786c991d599478cf2653581dd06e487c3f4b7fe515e651ddadf01153ba8b0dc1eea26b3dd9cc213236126 SHA512 296b6d1e35f2e978cbdb3edd44514306972532c73bc9298f63508cfbc77cd9326c215b0d56febe8ccf86e056e6e465bbaeed75848ca6e673b0a8d840b4c1d4d1
 | 
			
		||||
DIST gstreamer-gl-egl-0.20.0.crate 28772 BLAKE2B b74af665d0d8938b8499ff62d6fcb53dbba88a6bdf38f6805e27c733c9eb8ad8c37137f2b963ff01e0c4298dff8933ca0a8c8a2375a9e4925e6badfcd4212073 SHA512 1f09ef8f7674cedd8456722d5276424cc15ee48cf5220642bae07799ad609e81d877935ce3446d860ea1c9a1ef3c44aec46e5b443f3846ec9b9149b0fc7d8e4e
 | 
			
		||||
DIST gstreamer-gl-egl-sys-0.20.0.crate 28404 BLAKE2B 3b93f7e0c4f9cb186e0942ba23cdf87093f429e52807eb01db77605649d68bae8f76c5b69656fc7b0e08f7ab82cd6d9bf17a08868a28a0f69d9d7b9af85a4995 SHA512 a0fc5947af3a6fd7b10d82e0fe7c4c7e03a73885136c034f1a7d2e1bb2029cc64169f4fb0e81b5b9b152f332912e2887a0425f7486f292241ae71e12d2fdeed9
 | 
			
		||||
DIST gstreamer-gl-sys-0.20.0.crate 45426 BLAKE2B b365234a4ec6f92f3e294384ce53f3f30811bb9b1a01b93282701fbfcd90f1ddfd12c8822f6ca376ed1ba373e8f2c6f093813e18dec0ff3b7538df9cc2660c7c SHA512 992bb9bea6f0d8ac0345a62fb13d9701263ecf17286d50db1aec61d5e781e6afbb703fe2c2e902bc0d846a2948ac11fdd2a95d7160689a844f8beefb52309956
 | 
			
		||||
DIST gstreamer-gl-wayland-0.20.0.crate 28617 BLAKE2B 71619b0d9c4b36a977e2db513e7b235116920d905ec8c9e5c777081aa445d9714450b4f74ad6c4c6e692d2a53f8f74cbe071aa34632f5e18d5d1fdee0ea86ad6 SHA512 e65bc8094047790eec08701a60321924a9113d9443618863f8d24045215cf9528d4ecf75fd75a25d438696119f6ce8b8270e7f980e05306194c40ef4506bef7f
 | 
			
		||||
DIST gstreamer-gl-wayland-sys-0.20.0.crate 28398 BLAKE2B e3ae68381614d9962c63b98fddca3119818e5866939bee5112efe0886f9809c20ffef5507b3bc3b0a1f77d6e1a5f8d570d81c44ad5bcb155c7974bda717c5763 SHA512 8eb2cd5fab05b8c27705e1c3950420677d31b7728eb590efcb7fb133a90ce2335a7f0a2011831dbf51d4bc2c41592000dc169186ce0369587d9091da3658b4b4
 | 
			
		||||
DIST gstreamer-gl-x11-0.20.0.crate 28593 BLAKE2B b6cb214aebf1704e8c88aeb319749e74c21e274ff7b64ba652912ee8a42f5ef045d6ecf84521cbe6cf337281bd0d5f1ca449bc440fc9ce2f1f12abdd85c6dc31 SHA512 e72a15e6c4463510e8e4b8faafc30ed12fbb89ad821b9bbf175ec692a172bedce38abd1aee4e154829b9efa71eaf89799092c9dbdb2dc03dbac1dbbaeb285ffc
 | 
			
		||||
DIST gstreamer-gl-x11-sys-0.20.0.crate 28315 BLAKE2B 5fa303dcd4618460a61b1ac6cb829fda8792f48a9ce0db87c569117ef5dbbb838444a706508a0e3f80377a125aea3ef0647a6b07e77fe2444c9a64dc8924ad23 SHA512 592a39c6f81640ac78da1ea734f8bb30ed8c270158f8c0ba50886d21a93b0434cbc6955a1d01888eb9bf6d1716bbd2743703cb8cd2f78209053f1d8b133d1131
 | 
			
		||||
DIST gstreamer-pbutils-0.20.5.crate 52683 BLAKE2B fc62ccb425d8415308e9c8a5a636408cfda2b32c7b2dafe9929eceb1c1887899ca1a32bcb1b881e48716284d36b2b4aaaee608c45aac3fd3701fc3d3018c6c97 SHA512 607f602bd001ff8a1af38ba4efb260c297f572ff3c6de81180e0e79f13e72936459db75b907eadb32d0783c7817cedf7c0bfeaa5feee22686865314d59e1920a
 | 
			
		||||
DIST gstreamer-pbutils-sys-0.20.0.crate 35285 BLAKE2B 4523f83d4fcbd0ccfa891cf8650e705872fd47442fd3a5ead3f0eed2934335b07b6ddbdb25550083354df5cfe54b11cdba375fadae7e15c0afec35ae93a6806b SHA512 7c9e8f5010474c471aeb6e3d08f4017c1f01b44e62ea9b98a874353e9b521987809f392c81c77ba0f1237d53849949e773f2cf1e8426cdd275e0eb09368ef614
 | 
			
		||||
DIST gstreamer-sys-0.20.0.crate 89479 BLAKE2B eb2924ccafd2bc90148317efabde05e7ff58a4fa703bf5f61fe8aeb5c1d8e7e34c3e51ba5e7e8627fabe0c26b60826cb9c67700b559480ad27bf1f0ae280d949 SHA512 bd556cf59ace243fc9a6398fa8c2b13204f496a1b596674143a8ccd52f71df203cd7dc08838d6a747bc7eed912466b9c82b2939ff5c58a20e2054853d94d1924
 | 
			
		||||
DIST gstreamer-video-0.20.4.crate 111327 BLAKE2B 7695ab1162cecff006729b74c05bcc8d321b151d4170cbd39d36760252b3f334f45351a160226e369b34a9e45d2f1e4c496675959f94607cd0683409771b94d0 SHA512 bd9ce331a69aa88b3d4b2120ad583643ed0455371be33c6e787e67cf0992bca3fad27a6e1e90077718de02ca764119f2c64e1247a03105aafe642e94c7b5988d
 | 
			
		||||
DIST gstreamer-video-sys-0.20.0.crate 59182 BLAKE2B a6f0dd62d5c5b8d8fd3bfebf98511b432c731f31db3f088d74e9f174971109f65f72f22ceaca1698fd3757b8bc5d929220e1d06a461d9756846ff93526407f78 SHA512 1cfd2ad5a57f8c5fb77d90f2856c43c4acde24b855ba978b35565360f8c8364ec61c0bd82b02946ff90444f9100ee0bede6e70865beb54db1b0823f86aefbe1e
 | 
			
		||||
DIST gtk4-0.6.6.crate 473518 BLAKE2B a704feeda484b4bf07fb0eb1b9fdbaf65077f0bdbe150f76630a9ca36d685ba92dd6b6e8a1419ccab9bcb5712f2e8834bc1878be9382fb4d67837d2ceaf811a8 SHA512 443f901891a14e8e1b25a5da26e9f3467309b0095aed99a5971630c02a8755c4ca1cb08e5c26eccd446948c2ce4f767560b176f92c8a95fe03ab9a01a9df09a1
 | 
			
		||||
DIST gtk4-macros-0.6.6.crate 16725 BLAKE2B 0cc252cc2facab3822250e6a44c2436de925842f8a2a673c8f22d246be83a6e9c4d920aad24a656e3b12afc65583964bff8f2c932517a62abe26944b7ae3b239 SHA512 36c1d6123396363238b2125edb7b50471ae00bdca94d1081502b978c21abf5f02be5cd9be15151909f96b0785091920714998376d186e3403341659a83dc41a3
 | 
			
		||||
DIST gtk4-sys-0.6.3.crate 104419 BLAKE2B 570dac69476225ed8adf6e79b965549539626591550c821e4ebf362375ff7c2890bad403a795e8b7f4df8d1e2b91760636c303fcaa80f032a78d8f07162ba6bb SHA512 b97b719e56e840cd4fb3aa742ca00727935e15911bf59c10ac843a96277954ffe8ed03477baf35252a306e9eeac4d3d23ee09ffed434b346b50f5ab7ee5d02e0
 | 
			
		||||
DIST hashbrown-0.12.3.crate 102968 BLAKE2B 492072f27eaec45abd2c5d7405c614c0c6a8221425e901bb6174bfa1688ee524408a618650126d6c683b7285b9bf0a21dcdbff7347e4d8f97bf7111defa1b7e5 SHA512 b3700fcd659a21a6b9b3777c18b37a83bf25542b4e8f2b963779a122f5d22e1742c064cfc03e649583e7dd5c6e90ca8407f8c51a0e8755f6a108682853022f76
 | 
			
		||||
DIST heck-0.4.1.crate 11567 BLAKE2B 520aeea740cfa30b0cca12f73594ffa655f32959673b1c9caaca1ea0162e455546ae3033881394c0ba0516bcd5c9a997da02162e1585522d665813b9096eabd9 SHA512 8c80e959d2f10a2893f9a71994720f90747742bb5b61fc0a539eed3ea5679b140c48fd7f7690d7122cd6af5f7f20a19d412e3569fe741c6d31f6b2ce1e0b80e8
 | 
			
		||||
DIST hex-0.4.3.crate 13299 BLAKE2B deab49bf3d97f6fd7c0a0855b50232422443b226362bc7a4a19e57c2e662fff2cb046d4c5bd7618ddd523045f3d8c78754508f862f9a8ca29ca9247da6d6ec79 SHA512 fd8ff33b68eea2d6f2c6b02a6d82a2807cbcdc209ca5a76e3e3e5d006917ee151f236b6d18e2646cc9a9674bcdda1d6ce6ee363a89cadd99bef00d0eea9989e6
 | 
			
		||||
DIST iana-time-zone-0.1.56.crate 19517 BLAKE2B 88a83a65b2e17afff6491953c1ec508168e3cb0d720992c7958aa98ffec263d3b32f4ad07664703b1e429d96faa211a50c557d5a1398a849c45ab9df796f8e4c SHA512 d1bc3ccc17c6d3abc44f8662a15b5c84f5381f90dceb5e14a826595706178ba0f8cbf7cfa86d3b7e967a51ef75a27cb868fda7a3531be9bd6e77e813580131e8
 | 
			
		||||
DIST idna-0.3.0.crate 271128 BLAKE2B cf8a2c43760f03e94953c6692423a12f28fe763aabea8785b93cd247b3aedd2aeef2cd99978a027186290016ed924db39d19fe7d397da1ab570be9646bbb630a SHA512 9b7cee27811ee52ed9bb39fe82f724742eef2e5370642b6c756bd134c8cbc20bb6faa9f296053672dba8a66f7356a08b2ca99f176407b173e2d566d85d066441
 | 
			
		||||
DIST indexmap-1.9.3.crate 54653 BLAKE2B 7bc1768589e74020dc15d3dd064009edaaef39b7aeb682d0ca8e49944e3f020b9c04d64feb102e88b22feb40863479dfaf4722d6a77b5d19e7ca553f4bf64c1b SHA512 2aa8069eb07a814c8fa3e11296c9f032ef60963520d7786ad20cca5cb7e73b8f76d97722a994d65295bb713020aadce5008cd3df5e99d8bd968ef1979f910a37
 | 
			
		||||
DIST io-lifetimes-1.0.10.crate 37294 BLAKE2B 9b8836c4bf30e6d102fd9973ac66f067c3ff8bc2806e55f26368ebdc9854f2e9cc6eecc8014f9a0b22a968a6eea8be243fcb7a641d2d0dfc747ee08a6a1450bb SHA512 4b2cde9522780a408c5d4e6406286bc5dd3a0de1a99675129e9856e5d889498a127fd5dd7c937a7542135abc2213b60bfb6258b7871b8709dcdd79d60455bea9
 | 
			
		||||
DIST kv-log-macro-1.0.7.crate 16842 BLAKE2B ad3c028863d78730e4b2bb2e8cb980581b13d741b5dd2b76435ae91f5a7498a1e9f99178a0c9370b693a3af6a95c0682ff0d63e81a2515a267c6564d50ec3683 SHA512 aa7d79ae599930dcbca06f77590d9623dce461b118435dae1a4128fa8f38149a820109fe4bd1f19944b67285cf1b41bbf78e94b47e561dff1af683953c55a697
 | 
			
		||||
DIST lazy_static-1.4.0.crate 10443 BLAKE2B 25b2e61bbac48f0dcbc79c81d7bf01f2403d8269ecb6be3ea6147bd00f7a588df15a91f44dfc18ada19b21faa71de4637c7d493a8628cbecd0e547d74e616a23 SHA512 e124c0521ec7c950f3c4a066821918da7a9c6e711115d98009ae7c351928fdddead852e7596fea5937a9c30e4e4ce8eee7099b20248b5d6e3b2494b6a6d88cb8
 | 
			
		||||
DIST libadwaita-0.4.1.crate 86716 BLAKE2B 4e486291b7530d65863f052aadbe34aeea217f3cc810581ede674fc2f64f9cce7f59818f639f89090a98748a985744a726c4145bbce008a3adb35fbcad9f5a65 SHA512 08f5508c2c7b051a21df1197fd8d503b7db866171f5e9ad61e08c8a88abfc3cfc719df672e9caef88152b116ca8afb4cd5bbc81d34062c36e41fef5752dc5ce2
 | 
			
		||||
DIST libadwaita-sys-0.4.1.crate 21787 BLAKE2B ed59898ea78e2b298243adfcda80ae102d4205fe1abe2b336b44af6bb7f2cf571f98abd16815cb45faccf1edf024bd60d27cc7602f1c6ee59444361575863d79 SHA512 7d07e11caa7372952425f69ba2fc09b06691a183f18cee1b9a3462e5e96c869de94e28deb1fecce0b071ba13b945de7ced3b8e6cfd31daea5c08259f33688f21
 | 
			
		||||
DIST libc-0.2.142.crate 679343 BLAKE2B 4168a8c3766bbc4f5adbd4babd84757cb81bb3c8cc806b8b5c1381a88ddccbb8bf55ae84f2879ab26adda09a3d44d21e2708dc9bce5d4868663fad8dd0f0e086 SHA512 8eb465fea8bfa865aa592185ea2dd89a6d89252b0e44fb7398ae82c9fa031d501fc3a1c37e50d1971be528c6e1a4ca416da224ba82e5a8766ec598464593afdd
 | 
			
		||||
DIST libloading-0.7.4.crate 27580 BLAKE2B 491faef2659270b10bb88ac46e0453f747f35e78d7f28b7d6d9151177b4c7a7aec0a1efdf702eda0988c31e9dafff2990eba4e6a9b0b695c535ea9086ccf36e7 SHA512 34439d9eca68bac8fcbe2bc94a70e07550e7e95d713ab74ed60ba6736ec807fd9c9135c178d436fbeb39afb074b2a9b05775d953340845c088f5f8712f5f56a1
 | 
			
		||||
DIST linux-raw-sys-0.3.4.crate 1007150 BLAKE2B c13475f95b539992e3675b9c59a46f649501ef19a7c83342c4b6195d4444d34c3861d677f40720fe17a362469c9065bbfa5c0fc884c48da45edfe35bc26cdc10 SHA512 fa058a39be583baf32f0425e7f3ed2a2f51dced89af7f9864ac3f172c1dd5708f75f5a4ca4e124c9b4fb78025417a4c119234c5493a59ebf76c05314594f1a84
 | 
			
		||||
DIST locale_config-0.3.0.crate 20808 BLAKE2B 68b0519639c816af82b941a417d4a74896033e9c5110081d495e1cc3a3e7613ddaf2a665770c6199749b89be131a35592dc4cd7cc2789928199b22205300aa9d SHA512 c7d77156e957559172f589f90405b2e9f5306041887990a60a31630af2de81c00fbba2bcdf52bd163fe431f85694dc6d2d380671f38f2724d7e4d178d89998da
 | 
			
		||||
DIST log-0.4.17.crate 38028 BLAKE2B b46be3719fc0a53e50b1f342762e188587e9f1ceb692c72473ce2663edfb8253742d30024e68c1444780ab7fc0e2d5b0601b8ea7228dc3405a9342a57548e605 SHA512 2477d88db42b1d92c30708d88823212e236f613b3465e85eb425f83f8d16fadfaf0352f06c2999a1852102edd2f6ffb10ecb539d8a3b6c48f552a25622ccffa2
 | 
			
		||||
DIST memchr-2.5.0.crate 65812 BLAKE2B 57966413a1f933dcb2d2d4ccb29c247070f65a83299b2a9f5aa83f5a48a5c5f1c4c7c632fa63bd19f9508e9291e7258db2f16e2813a56fd84e0856f70f1e67ab SHA512 444a163b484c233e78c0e2e4d51f01ce2da93d7d29f516a95e4b0866b20bdfd3f34137653abed53eb70387991ee3e2b5937d8d4360a85bbcb50a93005a75defa
 | 
			
		||||
DIST memoffset-0.7.1.crate 8556 BLAKE2B 1ef270f1c8dba32e66cf47a1835f10c342024762c0e56953f16e82d575250028154054d4c42b1324c60f955a40fad3bbb1c5fced147c11c9a4ad62f6f0e948c3 SHA512 40ca3c4b1fb929bec75bfcde0135037f81a6c5aa80181bc7dd7bbcd9c0946288eea8d23fca95e296567ccb02155ed0f66c7c23644b5cb3e6d3932be9f9742157
 | 
			
		||||
DIST memoffset-0.8.0.crate 8912 BLAKE2B 19ad3abed21fc39461b0382b15a8cc312378aba36f042b1e5335012115d31b350a4e3bc720f1eea300d7d19b9b317f75a28d4ccd78ff3b31defd9e4b3147899c SHA512 47adcae0848ff967035e10543ea599c7af9c5bad387023eb4dc77c9e8d875994ec8139b9941b3ecc4fc17214d80944a47a3be174a45b334661914a5a7382dfbe
 | 
			
		||||
DIST muldiv-1.0.1.crate 4901 BLAKE2B cbb30434b4a264867b31246c685d6b576d1227b61888d5d8795e4a48cc129630a82eae1acaeb21f9fac3fdf79f5ce0180a364833049c15e1446d391b5a3a16ae SHA512 387c201722bf279d4cfd8f326ab0aa43314581d02ad2341b7c5784ffe57d568fe9eea5a2b89c985fe2cf283aa91ca22fdf14b7bae0031d6ef29baa95009e427e
 | 
			
		||||
DIST nix-0.26.2.crate 277973 BLAKE2B 86adcbeda37edda784593196c390e92ee069761d283f706c0390bf8983ba8841a51486a98a1869f910fe4d518afba5572490e9c69a021e12c598d094b41361ad SHA512 abf2d0a4eb83cd4bd43836e8b533f0f07f07979619c86c11302a2df0800d569f33f0dda0bc2c4136d36c79789d175eaf5d3928ecf16286319aabf93c720a1704
 | 
			
		||||
DIST nu-ansi-term-0.46.0.crate 24311 BLAKE2B d2e678e0eab5ad48534e686b1a4af344996d1b07a0fa40839072df3061bd7e5bc9341363403ea3ef8d19c7725ba3b7a8ed540c63e2209123b1b93f69418288b6 SHA512 b4f37786dc85e0596e2b7b261a5a9fe0265bf1651c39efb358dd649b926b12c3093f307b98bf0c4df3899f0a7cb1854f2596bd5c3e22fbbef42f912ab2eb5043
 | 
			
		||||
DIST num-integer-0.1.45.crate 22529 BLAKE2B 4da3e801f71ba8f92c692497e200bfc8d32183c94eaad91260683b09f4697c03175fec7cff5a9ff3782d5db5d514d74f22f7a61a102c0f0d2e67a7a4b4f29222 SHA512 731bdc09c3af7f9d8b171041f2957aa60facef93b06886000d8ba60d410aabbbee358d700bf31b2588b2e077464f290f24a0b712df7bb7f12972675b6c9bd735
 | 
			
		||||
DIST num-rational-0.4.1.crate 27889 BLAKE2B c6db5b2165eb341268cc8b81df44caf25a18242d0ff1cc0959444ed9a51ba9985c1238d6d79433c3927267ceb181da6d491bf282560db6bafd7768b79ec65842 SHA512 a7547ca663543e9da9e18dd079762cde371b85d55874a54d6b343ba775a9373392c85cebad511c53b5af5db298bd5d57ccef6161c1c28587a6c9fa2c5962a0bd
 | 
			
		||||
DIST num-traits-0.2.15.crate 49262 BLAKE2B 942ab170b2acce1cb40e6847f766bf810a79edd293d34f3a27864f464c16fe2b99fb13171ba429cc6d584248de879434beaadf1b231a4001b0e8389ed6c1be04 SHA512 5228498af0f15daeac3c9210f3e6e71cfaaeb30beea81dd37f8eb06b9592c8bf3226a47597cd8592ad4c513964a9a40f1ab2c33102ef3dfe3800d22c8d4528e8
 | 
			
		||||
DIST once_cell-1.17.1.crate 32856 BLAKE2B 8bde2aaaf9ef45d1f6b8458686179f1fe9295ee8faea269e9b49779583ce26ab9dafe988c3584e841a9e5d05e28430ca967ef3b25e755f48f0120d9c99cdb7bc SHA512 1302d51801e38bfee23e74c0046f1ecb1d3c27309b5fe11c2b6c99553b357db502ce1718695602f9d8b10429e8ff03f91c016d5d604957083728293824c05904
 | 
			
		||||
DIST option-operations-0.5.0.crate 19262 BLAKE2B 28bcdc8ffbe8327872932721dbb6a1ee2b48e1f7c7f0d9f8cb0d434c586fce507c2e770026a29fcb89aa974d2fc4d8585a7fd28751ec82250ace685928bbf1d5 SHA512 f27d066ff3a9925c488475945515a2b22784d6b6c526461e70146e55a94c799763eb472dfa1a95012dc36df856c3b0ba32d3e6b240dbaba585480494f4453b23
 | 
			
		||||
DIST ordered-stream-0.2.0.crate 19077 BLAKE2B 581285d32136bb9c2134f405c5a2d67c952a36eb3613912be029f2826b847919188e1b479506b46f20e0b63d371f476b99d9e7e1ee8d47ddef7b4f48451b0e3e SHA512 99976f90637f0daedeae05d4270d33bc03fad1c06a85bcf2cd7140b149f76c7560d5e60becf05a633a62dc82f7f65900eb8f510c62aea4e630b78c45dc76d83e
 | 
			
		||||
DIST overload-0.1.1.crate 24439 BLAKE2B acb2dfa6c6c22ea95cf58079f6ec56a2bb5e297a055ce717d40633b789b0d005be2bfd6616448cac61bd032e74aa6eed212f1677461907cea2f7f7cf536c157f SHA512 f79bc3321f45df5e3d0e5fa9c4e60524e4e28dd3729a09956766738adcf99ca42c187a01d48701ebe23d39aee00a19d4a07da798edc781b942e866b339613532
 | 
			
		||||
DIST pango-0.17.4.crate 47702 BLAKE2B 1b434f8209d3eef4ed1354c24e07b9676a87b9c93ece1035b4fa2965e7ca67aec90d58c2289ea90ed0578fe45439e9c8422262ace2941ed32e18bd8b3824ac0e SHA512 8f30a6d418dbd3d084be64af3c1d3e01b3f42c001b108d5691e4c95a72e729d2b980bcdb460de8e0928879cd81c8389be6f08a9218143e745f73fc177f4be862
 | 
			
		||||
DIST pango-sys-0.17.0.crate 24749 BLAKE2B 4ca7ff7d505ec9c800d5a3ae297cf79ec8a92175c754db32598b046fc04e8f699eaa1a0f0229553f96bac27980004c5792a6191bc4b54cd42c70a00b2db6b361 SHA512 d90f9421fa284318935c7fdbfa1c5cee7c78588af5e0ed6850da169c4b6b4e0ff98867934c6a92f431a431d13c302c5701b9c4db5c72dc3610e1fafe4b58b0bc
 | 
			
		||||
DIST parking-2.1.0.crate 9491 BLAKE2B c65653dbb00796d86bd6540e4d501f0a0e1ebc255c0fe5b5c96fc67ecfd6fdda5b3bd267dac31811ebe334603fc1a26622ea41dbe39621ce12e24e151ca4ebaa SHA512 2cf5741c137df3c7bcbc20208ccd9d1aa580ae25917766db1725a13b692ae7c6fcd212bd572cd7c00b7ed09f3f88ee303e8ecedf84b393c22b02239c3571baa4
 | 
			
		||||
DIST paste-1.0.12.crate 18156 BLAKE2B ab4426f9f588de4c50114421c4f9a0bb2fb5f144e9cde5d0d8ab14b3a451ff5219a99ee1cfa82dd48cae86f70d205dd8fef591651e443ba118bb27f7446e601b SHA512 fa75129e5463347ebb871f2e409463d2f164e1d9cf7160aca044dd280582354cb3286df05d56acc209174e371b577996a5b99ff35f12810610172bd9de21f98e
 | 
			
		||||
DIST percent-encoding-2.2.0.crate 10075 BLAKE2B 397e59acc3953868c709244b89a2e0db3304c0b574ecba761026b570a485f2cb5b0b2a0159586d1f342ec395ef02ace536da3bc1c72093e1cf93f8b37b26b0ec SHA512 890a5256d2b4290e12e04a02c3529f3a017faa2b6016a4dd0f08b36509f0b1107eacfcb4702024d6a21ff8852a11f263c1adc096b16ef8d12c45a734c087fe68
 | 
			
		||||
DIST pin-project-lite-0.2.9.crate 27713 BLAKE2B d6985b5add432fb6287d1b0c9fb0cc91a195f82c5a748a9ea430e4ba884717ec7b16d730b5ea62de5b2bfead1771da2d115b3776e12e605f70f2538f374a28fa SHA512 cef0b77233adca712db1183f780732ea577cf1b27c2643de221d54c837c75ce749f907e24a967be7474812c7682cba613a3fc5d553a9578a1b80569da0e562e4
 | 
			
		||||
DIST pin-utils-0.1.0.crate 7580 BLAKE2B 457e1287202f16d1873b24bf4f1de1828300128c4ba3131758e64f9784d36d47365f22d85493c3a85d854f0d8dbb4c6cef3a0f5b064014dc03943e58b7ba9178 SHA512 828422b8440cc82ac6b0743e0112fa7540d437aed457564999092b1462cd7672cd6b1f0201b67075431aeedd3d9c5127468a3dd028744109944f7f023c82fd70
 | 
			
		||||
DIST pkg-config-0.3.26.crate 18662 BLAKE2B 2ad92dfdc8ac0414b12a61dd30ea4ac5f142bbb55d0555ecfa3a53e750367e1b11766a693ef11f8cbe5a2ddb978327632458b2bcf75be7aa8f973262033349ee SHA512 509c4d1494cccc20de6a62d9d037c63ff77ebee8d907747c57ba0926d177b08fcac0231ccdda14511b453deb0b76ddd10f8fbdf63ff94257d72a12a889546435
 | 
			
		||||
DIST polling-2.8.0.crate 43554 BLAKE2B 8fc5986db7c34989954bbe84bd69d1f61c59b890d4e5fd21a20f3861bad750aafe2d1a89b3181df97f3659f1a6c980a92e43dcb9ef9e1de3881518024caa6f58 SHA512 c22dc35f39f374f21483c987d43108472dbfc291508e3f5e1d76e2c466f40b396b1ba7c222db5e5a2c0e670e83b4c34e0fbb5c3e93d86435b8a2ebb0890471a2
 | 
			
		||||
DIST ppv-lite86-0.2.17.crate 22242 BLAKE2B 48c4a31a3b555fa37072c4de083580bb769747c7668748541af472778b5b58c3e7ab2b5e178760f542f973774f09910bdd4058ae5fb9d6b10c103eb76cfd0d3d SHA512 539d916e7e5869d832045c1aa88aec519bd000227f9b01d4dd0bfc9ffb640d5f5eb21b05eba718174773c97192a655ad3cb31b53ceb914dd19179a6699b3583a
 | 
			
		||||
DIST pretty-hex-0.3.0.crate 6677 BLAKE2B 67cb77ce1d2ffb17f03aba1da53f88b5f2b08e84fd98d367fc236b97f194c1c59e25eeda914b3b4a76dc6d550af393b22cef7d6ead289a2219b4445e90c159b0 SHA512 f6712b51429130950d47049cff5d98859c8b326d297c84f1c733964f2d22ce9b1b077c105a70ad4a3aa0b8e3a94b7239c7118581d523b982a62e170cfb0ff872
 | 
			
		||||
DIST proc-macro-crate-1.3.1.crate 9678 BLAKE2B ed617a1930bf28a26e865f6477229566a0c4ade7f2c1e8f70d628c5536985f03c7533c561490415e207c0f58b4885367e7f54ddcf10b058711829f78a34d68a9 SHA512 5306f017933ffa89eb6111ee00b0536179c5cfab56529440630a0bec86b62194ff16f57ebb471b233e88cd886b7b9871de8402ed29073b23e5ca98193e513659
 | 
			
		||||
DIST proc-macro-error-1.0.4.crate 25293 BLAKE2B ef918c5efaf2545ab38787c8d0c07315af00431139e4dff66346bf798e3a429f91d12a79776c150412fdda0b158a72badd5e1044ac4d6917f8482d4b5a7110b7 SHA512 8a47bc9d3e24e9561d1e384d8f5a633284c2cf9b5e6733c5f9d1dbfe1870ccc8e2152482852e50b551cecb68e009148585b910ffb0508a7b4875598eaf8657db
 | 
			
		||||
DIST proc-macro-error-attr-1.0.4.crate 7971 BLAKE2B 98e2925881c2be186e22c2c439697e91d43f807eb61a5d13e3b0b4321ed50a74f3d699942c04b89b6fea0f156bb5d19ebcf22f9cd4b98a7e6917c437600ed823 SHA512 2606afa9ec78d7dad4500c98d3a5ecbd02c6b53ab829c742bed7f57b322a95238ab4e01cf268746815f1424fd9b02eddfa30e72f98c66106f57765f3d3116495
 | 
			
		||||
DIST proc-macro2-1.0.56.crate 44454 BLAKE2B b2a1f28979245a784a4b3a0af8cb04bd01ef3e7aba32c45122fc05a6cceddb1b7303890827f1a2cb99b0b2ae013cd772bffd6e94ea226f0030cde867d6c22aad SHA512 511fd8332eca47ed834736d405e18d53d83642cf528bebb8fd67fa5561e19b0a43c359b3e8020ecd28f9fafdb065c484ca360abc0287a0f97e94d4f779145f03
 | 
			
		||||
DIST quick-xml-0.23.1.crate 161488 BLAKE2B b347b9309fe0da813ae1e9ff6de100bb99f7e7b08ac46252dc305653a827087bb1fa003bbf86d1d5a6c8fad3250df3d43fa602752d57d538a4dacb25f86ce95a SHA512 885477b984ba86d4d42c563a4a0af4c5b5a272f75289e45e5ab891ed44b0bfb4d5bf5e15553e245473c115f648fafbb86ca2b96897260c0ec14910aea537d688
 | 
			
		||||
DIST quote-1.0.26.crate 28397 BLAKE2B b468a5e9350843ea81e540d17c9fcb302b46fbd450e10280c5fff6fd7c98a439df8c3d3d47e551bc6d67ed02052b5b5c65d215d5ff8ee34f045747e75c1ba37e SHA512 6fcfe4d31f601aa60beb858c25df217421b0a184d185eebc7a4cb9fbf97c687992b77bebd8671a9e6193716387c3e926fed9b75a08684eb2d9a5b155fbc321a5
 | 
			
		||||
DIST rand-0.8.5.crate 87113 BLAKE2B 516f26bb2a969d0d79e957818133f35d2c0b4d9f1b401098ea23c5b80d27599e842b9298c0c5e46e2a6cb6953857bf8a9fb71ec9366c5ce6708cf17df14f179c SHA512 8b33a8988906ba5e2057a9a84bdd11f867a5536c22f5056eec59ed4ec4e3a6da2fd773da4c0510d343762e5a4ea0f007db4c4a7cef87a47f90e36c1a84d86fb2
 | 
			
		||||
DIST rand_chacha-0.3.1.crate 15251 BLAKE2B 645771b2c3e274f085e0837a20306b1d59f6e9032fba8eb38a6d1b30180d15e2f89ffa2a162bf6358da41e030098242d81e71dab4321980d0a4f6ddfc2974ce3 SHA512 8198c580b1b9b0429758ffa49cd8138fa3ce724f0dcf73c767ea7e55611d6a2e4c7cad9950896510def500ce4062b594386c947ac3d89425b4e5c9b04d0b8075
 | 
			
		||||
DIST rand_core-0.6.4.crate 22666 BLAKE2B 8b6b66d50aade877f2779c006f8038db450f808c66d73d79efa66c4178dc03db06f12201bf0e7930181c4b0f4030c49b20cce6eb7839763cf2217cad9710789a SHA512 36c67eb845aa2ccca49d6d680f28d418229bbc5a050729e487fe6b9f9f384fdd7b8d67fc6508b90b79ffb3c26688e72feceb3ecae57d3d7f59338aeb62296f79
 | 
			
		||||
DIST regex-1.8.1.crate 248412 BLAKE2B 4f1355104def09ec8f7a7d604fb08d0a39af36cdbb5160c63329e8c06ef2d2ad1063fc7280c90ba3748e1766b65f52fd6da24e439d5262209a6137bcbe2eda9c SHA512 fe83c2497b786314cbd9ead0d85a39ca87ae92225e444a41ba381fe80aa381a88806e2c20e1c468b8b59503fdf1c2b7e5bf6eaae0ddf9f14a70c1ca2773e8830
 | 
			
		||||
DIST regex-syntax-0.7.1.crate 339705 BLAKE2B 59dcdb9e0f5a2008db491756fb353745bf4dbaba0d3a8a6782960c990065e1870cc120d7a7e220991b78f89053aa63b1a9c326f5ae3526d47679e4ae30ae5e66 SHA512 ff61e4a075550fce3a16e516f8222a489dfe2bdf9431220c98c33b1f9e6b19da7bc1ca6bf34031235d6f1ad06882b63d606874a14d2e27c615701ecc2f4cdd9a
 | 
			
		||||
DIST rustc_version-0.4.0.crate 12175 BLAKE2B 6fda2ce03eab45d7193fa0d70175cc7ffb56b7be85fb1314092bdcfd3948ea145420569ace3a47218a4a2a6e44a818862cea6dd8cfb945475496f63b591c29da SHA512 f66da7c6efe431db06cd01180d84ba67fcd38f8cd6ef693762957c00ccc2211f23c08079d7f184776e08f28d2d6ca3bdb5f5016f7de245c6193d4722891ba1db
 | 
			
		||||
DIST rustix-0.37.15.crate 315957 BLAKE2B 5408272b771078203261aaad4c3329e3f1eb7631c239beb0bac5d884ad74867629a690fe841d31d79e7b4939abacdd979af26dae7aa91989ca4f9f430624145d SHA512 cad1f85061670cc391226a93a387439f2ea8cde9279297105efe2961dac53d1ca4941ae57b5b1eeda897f19e7ebd12a9f84c243516a1d68205552309dc20efae
 | 
			
		||||
DIST scoped-tls-1.0.1.crate 8202 BLAKE2B 20be49f0546691bcff3f0fc257345e432e200836a60b297ff3fe698699ef6a2fe8a5dc6977902a08f7dc63c578aa27607dae0f1889b849c257c59c48a458e1ed SHA512 342f43d53edd33ea3e2197faf5dce37bfbeb0b20b6f0febad4dc6244c3185df127b2c10488e95561260a0ef968f32707460f2d0d23667cebece19b167c0a0c25
 | 
			
		||||
DIST semver-1.0.17.crate 29685 BLAKE2B b9beb685eb9f6cffe557d1185997e1a93d0e50ecd8e9719d9855347f12dd430ed1020df81839b7924a984596437ae7fb2951e7ae44c5540692a7f37b591bee2e SHA512 5199923757e675506d68c252182b10f55955e47054880492e5471a0a0f9ad13ef25d552d2ab9bd68fba37121b8026d9989bf15db67e95265b3aa53d06377fda7
 | 
			
		||||
DIST serde-1.0.160.crate 77010 BLAKE2B 45d2585bd7e5dcd368b72c29046bd595c577826da4aea6d019adaf07d23adc096db7aba952037dfdac9dbf08a1e92ababd44cc784ace557fe2cfe83beca446cf SHA512 b03eb453ac01a483843829952462de4e8f6d0fa4a244d38a6f476a911e2e991a508121265befd108134ae7cce8a7a40c4d217f80f3e025f9a612a0bf80862306
 | 
			
		||||
DIST serde_derive-1.0.160.crate 55081 BLAKE2B 851cbd173bd758d46c9f545f05a17f65f7b0a2cd353cc75a985072e3772ca6d8395b63208d845dfba231d7cb5fcee97ec0df0bd0df010096577d618fad8bffb0 SHA512 14b2a2ad7131efa7ec95d5a6e7633a9d1e991b046c0b00cce9c3681edd73cb53ff477aa52a430d8465aa8b362696244ea80f12ffbf0e6f98e35605fe4c60f407
 | 
			
		||||
DIST serde_repr-0.1.12.crate 9549 BLAKE2B 03f1fecd3edd4c2e14f936db0c1a4452784da327eae63af4086d38323a56ef06b34bf49bd10ca4afe35afa67db4cfd119cdcf98532a57d6badd055bc931f4dff SHA512 c0897efb6ee046b29c810bfa28c6aa5d8cf10ab33e220ee7e1747e9abd2ea0721585f267060cf0a1b03c8f3e5588a48d344079bee2fc9d7472ba2ed61461c714
 | 
			
		||||
DIST serde_spanned-0.6.1.crate 7828 BLAKE2B 78d39bca0850b78f0835167ca7786c0bf356d668389aaaf3ace946e91d9a7db8dcba895e833d87e88502b2ba969cac9aad6c1a053c5ecb37f845ebb3b0bb5b32 SHA512 6271aa2af243021002a10cdbd16cb081bf10ab53a61cace104182eb4f28e0c0d7c447b7dcedb350ce78debf5ed6ce6502cb823ae9177d98c5288310094eb22d9
 | 
			
		||||
DIST sha1-0.10.5.crate 12146 BLAKE2B 476a0c365ab639a0ce427856787595865a60339fd6b81a45f879ff9b9112021d2c3a62e0a817b4555951131a7fe257d0c30988631ddddc3d217274c46c79ebe6 SHA512 1046b91a9ea64b90098ee6e16c63f0620dc7c2dc847d200972a3da3c8d1ac61fa9030682099a411cdd24717b64d488e0b1be1cbe8f7bfee26b8c15cf4f8e5e9b
 | 
			
		||||
DIST sharded-slab-0.1.4.crate 52479 BLAKE2B 766d81761909006ac740cce13e8361734c3c7072cd07c8c8f611f09772e16f11aa93cabdc5273b9446f5da391b26b7e7d619be523488d8b3558c64c18f20d591 SHA512 123a9ddb126d1adf41a30a632604264d66a06bacc497db6373e9dd36164197f8321f2fc826a16247674f0f69d9f6e30aca37810f787693c4a5c2cee8c5887c55
 | 
			
		||||
DIST slab-0.4.8.crate 16928 BLAKE2B f20603e1331a767c3f55b56d58bbdb9fc126794a116db128fce6d204122c420e9a65478f9f10a26f86c045dbd55a62556862f4339f3a41419f810bcfa9fd145d SHA512 1d713a217b3816a1e6c230d4bb52c32c90f600e64520f0c339ea8255ee8aefd887d969fa23497f1bd8b2b1f7dcb4b220957889746f04dc3453240b5f28517192
 | 
			
		||||
DIST smallvec-1.10.0.crate 31564 BLAKE2B e3e46a0781d3a7892a739b001592d462d0704f010363984c439e3fe4f75aecb9720648aa1e9bcc56bb3be848dd40cee578212439f78f07a807c9441c3c3e0147 SHA512 a09110184582dcc01d7a0d3fa8f74c17bf726935126d3654667b8e9c4bc43ad16ccfd8fa94feae7d9b31913aa7ee030fe5936e4b44a36302b6ce5fe37372a7ae
 | 
			
		||||
DIST snapshot-44.2.tar.gz 419609 BLAKE2B 7c260ea2b32d48c3e48d5017cd2a142b0516b7c3d49dfa6586f36b495d2f393b31658e8f38e3b9d540690a2eae17517bef15a4482abc7e1bc13ab7cf97cff90e SHA512 f5d13afacbfd70349bdba20200d7817d676b2ba4a182f6115a092463b987b77f1b115f14d81b94f439e3b944d325eb451edb094e14f491c8bfd92328d8451dfb
 | 
			
		||||
DIST socket2-0.4.9.crate 45421 BLAKE2B 19c296b1b42839086793a29234f604a6c94ed1b9d30c4eb1ec695a76acfa266840f482e64b4ee2d5b4520f70849fbaf88984020ac25ec393918b89b2682d2541 SHA512 6cb2aabc409fc7d9942afc2073a36ad8730c06dcdab1866b9d3d72dc55afc643be6a2ca1f38c2e19fbfe782ae584512a1ab357c0f4974f98967a4f489e65331f
 | 
			
		||||
DIST static_assertions-1.1.0.crate 18480 BLAKE2B 358dd5ac413d06f62da0388e2016c5fcb8ec68fd7dceb0dbbcb97665c032b7509b7e083c20701648b6a9174485f117c02682ae4bde7ef037e80a85cdf6a0c86e SHA512 46d0e35f77941dee6f60f574c130472248063dc38494c1c4f84f7c048244cc2a58a86fe17c0990e3f0f01406b75ed385a13d00058612b27cf0e867c8d31c92ee
 | 
			
		||||
DIST syn-1.0.109.crate 237611 BLAKE2B e827445d00c79a8eeb91eacde472f1987addd6ce9e1df95d7abf6446a77ff4173a8006845f3ae71c1da47193cfb72e0ead9a6d6bad2573be12c17e90735d9ad9 SHA512 12816b9e8cf984024b2fbce9f0ae14cf94d4d2c06f08cc54fb793ce78770bb4cc1288eb7df0ba5e8e937756e1e8e295c53fe07a0c5dde1ea8ddba03b6203b37d
 | 
			
		||||
DIST syn-2.0.15.crate 240785 BLAKE2B ee2a2250e7083770f8fcb5ac0b387a28bab041e56dc9a835bdc366d39830cbd464aec156b47947331864220d78856f74e94c24061bd0c4fc908584efd355bce6 SHA512 19520d13b417ad2cabaf7e31f45271d41f26158607d0ab21e76a04e824133c64f4acba0f8c044c675028832563ed7cc73fd88d519520ef3834008dbb3d04663b
 | 
			
		||||
DIST system-deps-6.0.5.crate 23032 BLAKE2B 9a7bab9847b03eeeadb0cf181baf04d6beb0e5c6a5138b316b4943db538ed306627930b9e1e9051c3e30c98ab695c0d257d564840281101d0e43bc8807251328 SHA512 64797ca5eab3b6715604debad332b60d934792ca3f6bfef8d5904e3e5888f1517337e553fee82b459732a57709e204e948004035aa99c55ed026992f894d746d
 | 
			
		||||
DIST target-lexicon-0.12.7.crate 24402 BLAKE2B 3715b15649566b9f26fe02aad818325a43b54512008e4ea9fcda9ea15a87b8f4baf4ffd7343fc12456c97d8a6b1e121158c4cb61997de0e2d24d1bce93d86850 SHA512 0f3cdbd7515141315934b6ca61c5666f3bf60e259711f68ed3c33468e2bd400cedf824db7158a80fa07e78cc7ac2a0a1eed2df199352176148e9df34b06511a2
 | 
			
		||||
DIST temp-dir-0.1.11.crate 5743 BLAKE2B d73fb783b750a16061e325a3564dd62b1e7561d9d3d7ea93d8a75e01588e2633ccd11617595662cab647c52de6eafc25e9e97a3ea43564dc55656284bda57e74 SHA512 1946df8b4c93bc5517a18c05ecebddf0935cf2d3cae390a7ce9befff9516a29df3f19d2edc3407ace12184c36be75fd35f3d436957ee48c6f128923496c19060
 | 
			
		||||
DIST thiserror-1.0.40.crate 18709 BLAKE2B 8057ebcd11546f8b3ae5d760c1dd1764386f3c29dc43bc7a4aef20604970c65356daef137734e80260051d41e39979943bfda496459696b924a95f455159704c SHA512 db1b1fab3aa61dc6bbc672670eb70cee2f838fa713d3a927022900eddde253108d123bded1aa6df8d314e1aa2f8ff37bc72fc9b0803fe3a56447a64290ab2a91
 | 
			
		||||
DIST thiserror-impl-1.0.40.crate 15138 BLAKE2B 7590428b5a97efde6a823440a9c91e1d1835b20df4ad8a700c1eeddd98516f1203605853fc6dc65528c5fd92480d04f9a8412aa7c20a524cb94435b0a0032f1d SHA512 9027f2d4127864c34d2d92ad3b2753a95893d26f5b2dcdec869884a98232c5304db1700a38112ced258e5f3832218cdea3a4bb21223098e1b20d06af1fd7edd2
 | 
			
		||||
DIST thread_local-1.1.7.crate 13585 BLAKE2B f497dbcdfaf7dbc8b4b0dd97f77ba93df15b63303e7894c9032c9822a5b8111e0a21db2fa8cfdce5a503f70959ac9cdf48c840b925bdd850dc15e8436ba72379 SHA512 3772452c2a349fb564d29bb06e13c8ae64807db27c3ee217fa04fd0e9847e94adeea582b82ffc2d9116f31ff478eb088550caf1346c263de49b55fa17b431c31
 | 
			
		||||
DIST tinyvec-1.6.0.crate 45991 BLAKE2B e9699d4d80a78978f0ebfd049f5b33d7f23d401cf4f4439ccb168e8c0e322473ad0ea7e2ff0ff69e9aac3e5c4c9ae5a7102185533bfbf96dbe77b3526e700bc9 SHA512 e5acaf353c58c60ae5556130a934f1048abb79cf6668ae467d308bac44b689d8a9997227ea879f4b5fe50f29cde8761801b088d7149bcd063b973056c381921c
 | 
			
		||||
DIST tinyvec_macros-0.1.1.crate 5865 BLAKE2B 2bf4f68ca11dc19c72232951605a4c809b34ff38ee365ee4f592a3c41360e23c9330cfba961e2692a0ad568fef4aaaac51c40808d491178cf7a0c4b5a1c5d484 SHA512 10008c7b3a3d50c94b9c370015b76ee082f5dfb6dcacf014dc2f2dbe92f903618d10d0202b21f48fcf98a94ae76fb712db55a5e8ad353645d378cf0e6ec74f7e
 | 
			
		||||
DIST toml-0.7.3.crate 47227 BLAKE2B 8e0709bfe7c26e15b0c5ed4f3f908977242a52cf813e6175195b662792baa91f104da357876b711158d4b55b2426228e278cb9a2057de26d9b167d99208d7d04 SHA512 4f3f7534d07e4f5bc14310c4030b89ae3d42c9e6d7a5d3aefa33ff9bab3d73625367fe9c74fd1ccb8350b7bb3a78f1181654e69736cb7280b89e632c29aa81b5
 | 
			
		||||
DIST toml_datetime-0.6.1.crate 10765 BLAKE2B d31627732a1a70dce5142ecf6dafa2b52e56b7df7d865b64dc477affbb2cdf148fe4acdba84373c4fa1b8bb8de06380e2a105c10fe34e7591683697d78b17c78 SHA512 024fc32f5c3b8efa764bc3fc59af710627513ba2e536f01f227d36661eaee099ed78320ea65b15a15e39c0fc30ff2b44c501f96d5a2618034daeb290524694e0
 | 
			
		||||
DIST toml_edit-0.19.8.crate 94457 BLAKE2B 8fb45302a44f48a5a75db4dd6e3c7c2b3e4cbc357d67e247da36fe631ba66ee64a6786c8a2f9d915a260aa15bafe986ea8085f9dbce5e03fce92330c782b8b65 SHA512 467454b0b55514e039e8049bfe41ffbee7677a0c4fed4cacd96cd8d91d14cbbb2ce77ba3f356d486ddd8deee9b9939ebf519dcb087aa3d5413eb709f7f003ff6
 | 
			
		||||
DIST tracing-0.1.38.crate 75832 BLAKE2B a137f5c9453d0dea73832cb4d75a7130d4e3aaedb6a7a6e16254fbe02349ac84dedb0c2eff0c480d352cbf3cce7a364c0f33a960dbfac49e6d566ae2088ab9ee SHA512 e73a5b31e767815d623d4cae0dc0bb18fbb7ea8cf0c378151c949c2b7e261fb9203a34acc25493237fa49e9eb8a53d313f61eb865b5ca8d7908e96f6912c76cf
 | 
			
		||||
DIST tracing-attributes-0.1.24.crate 31841 BLAKE2B 8473fcad6bfd2f7df0fc4db41a5f71c4c128f4a0b485d21803aa421119afb3d9d5782515332c8c3349c24324c97449a80041a7f6d185c9dc48650b5b9182d585 SHA512 925bb3840ccb093dea2625802e5ee3a5f4bc3eafe2a8715670b1f14d2f4a01eff0c50f11368507247bcade02748eee8585975d156f5d2c932231c6e2ed89c0f5
 | 
			
		||||
DIST tracing-core-0.1.30.crate 60351 BLAKE2B eadd1ad68830f4fa9972d207fac3b5be6b0f6d3d2ee4299f2fcd6d03313db6850ae0bb278ae618615e0bc2cd83ffbde0928857fe8e01dd9591a9e80114e0ff88 SHA512 9a14edf6338eff6636473f4ea844dfe337e434c14f40e7b9af6d7e6cf25f745f37bbe372bc63c01043667bea2f5b248b8afa8d6aae4cac3dc5193e3383ef1c65
 | 
			
		||||
DIST tracing-log-0.1.3.crate 20549 BLAKE2B 1e2b5f1d96983b0dcf3e61f71132536e21dc19af0d532dcff7cc91db45e60cbdc1f8b5b7a7b2c13214dda4e3becd4f3d62262def1b608a99fa330ccf1d716323 SHA512 440cb8ddd5823cd0d86b68bbbf29f6886d5800f95d0aaa9477f98f188013fd009c2b9bc982b17efd08abd071bc70ca511f988b9db8c21d8e3d323fb67614d289
 | 
			
		||||
DIST tracing-subscriber-0.3.17.crate 191711 BLAKE2B f55c8e8c70ca67f57cb3c8a411519f317b9961620e3f7db3a3933d549cb64a5871624c21231bd6a0974c94ecaee2904d2304ac9fde3aa8463f0fcbf99f94b5f9 SHA512 53a2a760d833f729e042b4f76b56c93ff7c50ddba968dfa9294f24425fe9a3dfc6c3b95a526ebd78df852b48b76c85d2f4f7be9170d75a6eea8734f77218e727
 | 
			
		||||
DIST typenum-1.16.0.crate 42477 BLAKE2B acc6dcd4521493c438a8a3d997ab0456fdbff3db66aee9b81ba219714d47522c3ca8fe26f8ce84edfda416ff9a22747caf3ecc9cc4bcd1e7647ac351d5aef407 SHA512 93da3ed62573acbc9d5d31257fb72ae9cfc7d59e4040c1f32d93e8fec94795e1aa20a3bf76ddc64c4b383184306bb2a66e51fd61b64dd4ce46a1bca8238b57b2
 | 
			
		||||
DIST unicode-bidi-0.3.13.crate 44477 BLAKE2B 90d80e7c57e93aa9aaa83e7c3c1a93bb6e4d51047803e61ed3f7c80361987947b2029a2b679bd301e8a0766ee8ea7f080e9b9b6ebcbb4354e19813a0f7da2abc SHA512 fb094fcfd907d90fa7232432aca0143209446e4c5c73d8a0fe6d2dc44b9dbb5b8b926c59b5e3f9a5a0a36f91c04613509b6e430c9c4adf526e7445e6e8d7a3d9
 | 
			
		||||
DIST unicode-ident-1.0.8.crate 41962 BLAKE2B 3e3394a421460b0cdd56f96e1149b3816651ffd7064f9ec85c12050917d0b271eeee4bc3f6d3f0a3c1596635df3dac54bd610243d34e459743fe29b3b931a237 SHA512 8104999c6fff002c5aa109e2ca75ce3eaf772155d31dff87bcf39e3eb3da58b6cb543717be7b55acdb0cb1a4bd2a3d2e9c9974f7f75b6528668f5ef665ef4088
 | 
			
		||||
DIST unicode-normalization-0.1.22.crate 122604 BLAKE2B 3f3430b279cc0ce1595392c869442ce676ab097154c688779ebcf726e10c497df59be2cd7bb2f84f99499a9df0654760a10ac92224c17d74775aeebe291241e1 SHA512 a5810d5e9cd93dbb80e013997aa9d38e60834619483a6623eb2859ec5d59a5aec3fc4db123dc7f4e2fe9f2b8799cf6af48bdff22d69a00a23707240e8bf3bb3c
 | 
			
		||||
DIST url-2.3.1.crate 72777 BLAKE2B 6ca0e537baf373b92269b2531945c1cdf360f1566cae4734dfb96f05a605e5c6c82e3192a1b9dde0ff22b92b87aba2d56e32a1bf17882b4de15efd7cdf52bc76 SHA512 8224010bef067574481e5d84100d944782d52b49db7c396ae2b4dfc145ed58769c15440d97a0fed4d2f9857592a8601417cc5b1bdea959c47a3e7a1f7182ed0d
 | 
			
		||||
DIST value-bag-1.0.0-alpha.9.crate 26630 BLAKE2B 300e33ff2a397ee1d5463c868740a0a8baa007be023a5cf7bc4836acc5babd4d529c136fc7d968556397f9bac6b884259222a92d292b659fc24df0520a7da58f SHA512 52ae5b11c2f9befe58c28274f0596ba5b5a59e64f60be715967693600b94adf8329471e0db45c7abcd7d13bcf8a8dbf6f7818de253509ce6f87e04d6af084709
 | 
			
		||||
DIST version-compare-0.1.1.crate 13224 BLAKE2B 4bb1e7db6a4a5b30f4ef950234fa939bd562e8d5693aad42a5dadddde7caee01b4dc42b28d8ef61a769cf573440e57c0dc321f8a8b4b3dfc0cc035507bfed886 SHA512 efc9441440f702518867e2056c0ab066cd2fa6949112479e463802610f25a4d50c4411eb5fd0ba6ca9b187e358fce8d99579188e0ed9ba0297191172ab7af408
 | 
			
		||||
DIST version_check-0.9.4.crate 14895 BLAKE2B fa1fa4008af165bfc1fdbe560488afd9d232cfafee94104fbcc4cbc52f234849bff9ddfa88109a1ac682f6d9c1d86b0459893d223f64e65adc08966aaf93dc89 SHA512 b172dc9a3759a4a683ffc39b9a40b03b9974b626a088217de87090466cef695226557c226cf3e469b2b25ee7297b7eb0d7719878cab42457f80146a81943c0c8
 | 
			
		||||
DIST waker-fn-1.1.0.crate 7114 BLAKE2B e510eec0490f0caca3930000cecccde209ad387d1657c380f95122c68ccc15fcbe0684315d0aea28f094f2c65f7b7b08ae62f6ec95e0d67fc47e6af0ba4589e9 SHA512 80f612597534d9f8bdcd5e6bdff740805efe28242822bc6db360e114a23cb47ff88c74b8ab855bc764f0a73545e85a69d76bce1441e5899a36e41ca270695dc5
 | 
			
		||||
DIST wayland-backend-0.1.2.crate 68748 BLAKE2B 2454c85cf8dfb7cb1ba30be3bc4835241000d3c994049ce7614e108d9da17248d389af25e950126cdf61cb93462783d44e64a5f9312657b9f993054b04eb91e0 SHA512 3ec299448f17eb75c00ccd5cb1f3f5d7378dd7849cd547a2b1eb0389226f32b16ed55c7f1a1932fa2d5af39686b893a792736e2f02b776ae89e26b4fd085623f
 | 
			
		||||
DIST wayland-client-0.30.1.crate 64634 BLAKE2B cd65435782f891476e6506d99d1ade2332c4b83aa58cb42c3b3bd6fbbb73171ba4bac08ba9571488b9582aed4d43612174337721fbbf5985c79f160fb07ddbfb SHA512 516cf0882cf7df71f444ed53615b7adcbcd90553c0218fc1c67c1ef080a67e5902c1caf9557829f385a6061b2cab37967141eff988858eedd4c729f5cc3d0679
 | 
			
		||||
DIST wayland-scanner-0.30.0.crate 34206 BLAKE2B ba3a6cd4da25f72319310ea0fd6601a83055ae28bc2978f735ddf370c55b5ee0c7ff68d16452b911ff83f3e4ab76bddc63f608ab0eb38169c7a19c28be3be018 SHA512 35bd4cf5a03d5867f0c4ba071ac4fcbbd74438d4544ea5e97425cd98e5bff42dc7e1d42d4aa81b726cf789da2da90493e4a505332d5e4d677807fb17b35d44d0
 | 
			
		||||
DIST wayland-sys-0.30.1.crate 8358 BLAKE2B bf64423e9bc99bdb0009cffdf35132a8a6961196ce85235b9ca29831d3af8e1dfa75aacbbc1b01f6daa66138507eb746744afa3863d674ddde25751e256ac78d SHA512 a34b759c6360728339a0416d546f9e22df8423dc0141a0379b76ffbbe7004a25ae27972ec246353115bd16e9cbdb531f844f650a314fa68066cda4ddd097ed39
 | 
			
		||||
DIST winnow-0.4.1.crate 138177 BLAKE2B 9fb55dc5dbca2250c5921aebc42fd8dff7da6fc70656d5690475cf9d81d569b01e68c5134401f70759a9edbe1704cf76727efe5442961b1d220827130497b735 SHA512 390b3da6688d61d90d9bb221d95c7243968209b692737999b13326204954d1e916b390ac8a3a0e0864695ad9a073ed8a79e592ca565be374cc6e909b4166d52a
 | 
			
		||||
DIST xdg-home-1.0.0.crate 3310 BLAKE2B 9ca30a8daabf4e48aa3266f382c8d33313388057d7cc0b837130229b342df4da8b712831df6ed4b71f55014e0b6acef482849735c82957e71fffcdb4eb781f63 SHA512 943414b1238be9cb0785987e45e90412ea1df6f838ec845147555e09e2433966b2635b59884f9adc13f79820661062f13c1368fa959f785897a2617ffad0bc23
 | 
			
		||||
DIST zbus-3.12.0.crate 144160 BLAKE2B 9f3ee37bc181a775ffc882a5773b00d2fa71750ee6dea0b60be9530b58d15d3f7f8ff952edca3395471b87c3d7f6165d479d2c7dd1e35e52f78c05cc8d5ef236 SHA512 5ad55f5c439905e64f85ff6045f765cc867bad27b9374b895fbb52bf6b77d45a5a8bbd6200e2161442952418be44e9d1dffdc3c5f267122e8a24e74037ce9a1f
 | 
			
		||||
DIST zbus_macros-3.12.0.crate 25823 BLAKE2B a46927b647d46aa9986257f803e54facf38d94cb86ee1f783b333f86f94747b809ee42da06ae6f617f8ee41768466e5d9430e2d12a28b186fbb9bc630b2d38cc SHA512 10455510e5e81676cd013d087c97aaac3d91d13bea498a1357c0b2c9c148ea294240936d8d85b91fb205a88fc87ed2c683cbb4470c683fb79a352e9742dc9dfe
 | 
			
		||||
DIST zbus_names-2.5.0.crate 9861 BLAKE2B c171980b661d97142abc873eaa0acbf21300ac0165aa9e28012e798c79db871e10c52336e7eb73a568359d7e9b395e5782457530da509fb81afc767d0180fb17 SHA512 7a42f274e2d9d6dd452d8ca47b22d3b1e2e13bf0708693cfd71293ecffc7a13fa957175aa0dc78b8d17251933faf04d6e2250bb9edb2034eff7bba99392076e8
 | 
			
		||||
DIST zvariant-3.12.0.crate 71199 BLAKE2B 7e847bf9ff922ac3fb7c17540243b6bc4dfe0a4d07630eef9e618d5c9090f8de7b4515ed77cff86ac6b51acde28126e410e1832d96451b642bb29d2de8207cef SHA512 42661d7681b24e0fddc8db6df944abedd60a9d656133c3ec704dec7f248b2c843e01032bd46cc6fddf8aa56e2a0970a5a10248bd3117f832b67677e3a81f9ab6
 | 
			
		||||
DIST zvariant_derive-3.12.0.crate 10828 BLAKE2B ec1f15c8770ccabb24c02b3cd5117b1ea60d735a2f827d2dd59fda09ced27445707278250394bf57ce93db2521a43470a15432a0e6011ae3bb591d2aeb42fe0e SHA512 c8ffb416ef2f4d4246973a75a00c9f614e6f7b634f76df801058a1586e39e66ee20129ac0f489c135bfc1864116c7115b8870e78301da9f86df785622c41e2b9
 | 
			
		||||
DIST zvariant_utils-1.0.0.crate 6230 BLAKE2B cf0176e9187d493cee4d2f33945754695dcfc5c1fb56bf750667c9dcf1dd4d15c4896407225cfe26a6f63b9bd0d3511193d7bae8a11bfa3fa6f50884c79b6bb2 SHA512 51febffe7d013bf74ab9d57257d7db0ba86bb94a0bf8d5c55125de6a329903f07a7906103ed53b1705b1ba364c38b4f6aad7cadb53761f740fce6bf957e174aa
 | 
			
		||||
@@ -1,239 +0,0 @@
 | 
			
		||||
# Copyright 1999-2022 Gentoo Authors
 | 
			
		||||
# Distributed under the terms of the GNU General Public License-2
 | 
			
		||||
 | 
			
		||||
EAPI=8
 | 
			
		||||
CRATES="
 | 
			
		||||
  autocfg-1.1.0
 | 
			
		||||
  cfg-if-1.0.0
 | 
			
		||||
  pin-utils-0.1.0
 | 
			
		||||
  dlib-0.5.0
 | 
			
		||||
  field-offset-0.3.5
 | 
			
		||||
  form_urlencoded-1.1.0
 | 
			
		||||
  ctor-0.1.26
 | 
			
		||||
  crypto-common-0.1.6
 | 
			
		||||
  scoped-tls-1.0.1
 | 
			
		||||
  cairo-sys-rs-0.17.0
 | 
			
		||||
  async-recursion-1.0.4
 | 
			
		||||
  proc-macro-error-1.0.4
 | 
			
		||||
  serde_repr-0.1.12
 | 
			
		||||
  version_check-0.9.4
 | 
			
		||||
  serde_spanned-0.6.1
 | 
			
		||||
  sha1-0.10.5
 | 
			
		||||
  gsk4-sys-0.6.3
 | 
			
		||||
  memoffset-0.8.0
 | 
			
		||||
  gdk-pixbuf-sys-0.17.0
 | 
			
		||||
  quote-1.0.26
 | 
			
		||||
  futures-core-0.3.28
 | 
			
		||||
  gdk4-wayland-0.6.3
 | 
			
		||||
  xdg-home-1.0.0
 | 
			
		||||
  muldiv-1.0.1
 | 
			
		||||
  thread_local-1.1.7
 | 
			
		||||
  futures-io-0.3.28
 | 
			
		||||
  memoffset-0.7.1
 | 
			
		||||
  graphene-sys-0.17.0
 | 
			
		||||
  temp-dir-0.1.11
 | 
			
		||||
  gdk4-x11-sys-0.6.3
 | 
			
		||||
  async-trait-0.1.68
 | 
			
		||||
  async-lock-2.7.0
 | 
			
		||||
  bitflags-1.3.2
 | 
			
		||||
  tracing-log-0.1.3
 | 
			
		||||
  tinyvec_macros-0.1.1
 | 
			
		||||
  rand_chacha-0.3.1
 | 
			
		||||
  proc-macro-error-attr-1.0.4
 | 
			
		||||
  downcast-rs-1.2.0
 | 
			
		||||
  gdk4-wayland-sys-0.6.3
 | 
			
		||||
  pretty-hex-0.3.0
 | 
			
		||||
  zbus_names-2.5.0
 | 
			
		||||
  waker-fn-1.1.0
 | 
			
		||||
  wayland-sys-0.30.1
 | 
			
		||||
  event-listener-2.5.3
 | 
			
		||||
  futures-executor-0.3.28
 | 
			
		||||
  iana-time-zone-0.1.56
 | 
			
		||||
  futures-macro-0.3.28
 | 
			
		||||
  graphene-rs-0.17.1
 | 
			
		||||
  lazy_static-1.4.0
 | 
			
		||||
  gstreamer-gl-x11-0.20.0
 | 
			
		||||
  gobject-sys-0.17.4
 | 
			
		||||
  hex-0.4.3
 | 
			
		||||
  zvariant_utils-1.0.0
 | 
			
		||||
  async-global-executor-2.3.1
 | 
			
		||||
  zvariant_derive-3.12.0
 | 
			
		||||
  gstreamer-gl-egl-0.20.0
 | 
			
		||||
  generic-array-0.14.7
 | 
			
		||||
  thiserror-impl-1.0.40
 | 
			
		||||
  parking-2.1.0
 | 
			
		||||
  concurrent-queue-2.2.0
 | 
			
		||||
  enumflags2-0.7.7
 | 
			
		||||
  semver-1.0.17
 | 
			
		||||
  num-integer-0.1.45
 | 
			
		||||
  gstreamer-gl-wayland-sys-0.20.0
 | 
			
		||||
  libloading-0.7.4
 | 
			
		||||
  version-compare-0.1.1
 | 
			
		||||
  gstreamer-gl-x11-sys-0.20.0
 | 
			
		||||
  heck-0.4.1
 | 
			
		||||
  toml_datetime-0.6.1
 | 
			
		||||
  locale_config-0.3.0
 | 
			
		||||
  async-fs-1.6.0
 | 
			
		||||
  gstreamer-gl-egl-sys-0.20.0
 | 
			
		||||
  enumflags2_derive-0.7.7
 | 
			
		||||
  thiserror-1.0.40
 | 
			
		||||
  static_assertions-1.1.0
 | 
			
		||||
  gdk-pixbuf-0.17.0
 | 
			
		||||
  futures-channel-0.3.28
 | 
			
		||||
  crossbeam-utils-0.8.15
 | 
			
		||||
  futures-task-0.3.28
 | 
			
		||||
  indexmap-1.9.3
 | 
			
		||||
  slab-0.4.8
 | 
			
		||||
  pin-project-lite-0.2.9
 | 
			
		||||
  async-channel-1.8.0
 | 
			
		||||
  byteorder-1.4.3
 | 
			
		||||
  io-lifetimes-1.0.10
 | 
			
		||||
  atomic-waker-1.1.1
 | 
			
		||||
  ordered-stream-0.2.0
 | 
			
		||||
  ppv-lite86-0.2.17
 | 
			
		||||
  libadwaita-sys-0.4.1
 | 
			
		||||
  unicode-ident-1.0.8
 | 
			
		||||
  pango-sys-0.17.0
 | 
			
		||||
  nu-ansi-term-0.46.0
 | 
			
		||||
  gstreamer-base-sys-0.20.0
 | 
			
		||||
  atomic_refcell-0.1.10
 | 
			
		||||
  overload-0.1.1
 | 
			
		||||
  option-operations-0.5.0
 | 
			
		||||
  serde_derive-1.0.160
 | 
			
		||||
  toml-0.7.3
 | 
			
		||||
  digest-0.10.6
 | 
			
		||||
  num-rational-0.4.1
 | 
			
		||||
  percent-encoding-2.2.0
 | 
			
		||||
  socket2-0.4.9
 | 
			
		||||
  zbus_macros-3.12.0
 | 
			
		||||
  pkg-config-0.3.26
 | 
			
		||||
  system-deps-6.0.5
 | 
			
		||||
  derivative-2.2.0
 | 
			
		||||
  unicode-bidi-0.3.13
 | 
			
		||||
  typenum-1.16.0
 | 
			
		||||
  smallvec-1.10.0
 | 
			
		||||
  async-io-1.13.0
 | 
			
		||||
  glib-macros-0.17.9
 | 
			
		||||
  gstreamer-base-0.20.5
 | 
			
		||||
  anyhow-1.0.70
 | 
			
		||||
  getrandom-0.2.9
 | 
			
		||||
  target-lexicon-0.12.7
 | 
			
		||||
  once_cell-1.17.1
 | 
			
		||||
  rand-0.8.5
 | 
			
		||||
  pango-0.17.4
 | 
			
		||||
  tracing-attributes-0.1.24
 | 
			
		||||
  value-bag-1.0.0-alpha.9
 | 
			
		||||
  memchr-2.5.0
 | 
			
		||||
  proc-macro-crate-1.3.1
 | 
			
		||||
  serde-1.0.160
 | 
			
		||||
  gstreamer-audio-0.20.4
 | 
			
		||||
  wayland-scanner-0.30.0
 | 
			
		||||
  polling-2.8.0
 | 
			
		||||
  gio-sys-0.17.4
 | 
			
		||||
  wayland-client-0.30.1
 | 
			
		||||
  paste-1.0.12
 | 
			
		||||
  gstreamer-pbutils-0.20.5
 | 
			
		||||
  gstreamer-pbutils-sys-0.20.0
 | 
			
		||||
  gstreamer-video-sys-0.20.0
 | 
			
		||||
  gstreamer-sys-0.20.0
 | 
			
		||||
  gstreamer-gl-0.20.0
 | 
			
		||||
  gtk4-sys-0.6.3
 | 
			
		||||
  proc-macro2-1.0.56
 | 
			
		||||
  tracing-core-0.1.30
 | 
			
		||||
  hashbrown-0.12.3
 | 
			
		||||
  glib-sys-0.17.4
 | 
			
		||||
  async-task-4.4.0
 | 
			
		||||
  num-traits-0.2.15
 | 
			
		||||
  cfg-expr-0.15.1
 | 
			
		||||
  gdk4-sys-0.6.3
 | 
			
		||||
  wayland-backend-0.1.2
 | 
			
		||||
  url-2.3.1
 | 
			
		||||
  cc-1.0.79
 | 
			
		||||
  libadwaita-0.4.1
 | 
			
		||||
  futures-lite-1.13.0
 | 
			
		||||
  tinyvec-1.6.0
 | 
			
		||||
  sharded-slab-0.1.4
 | 
			
		||||
  cairo-rs-0.17.0
 | 
			
		||||
  gstreamer-video-0.20.4
 | 
			
		||||
  rand_core-0.6.4
 | 
			
		||||
  gstreamer-gl-sys-0.20.0
 | 
			
		||||
  tracing-0.1.38
 | 
			
		||||
  zvariant-3.12.0
 | 
			
		||||
  ashpd-0.4.0
 | 
			
		||||
  gdk4-0.6.3
 | 
			
		||||
  kv-log-macro-1.0.7
 | 
			
		||||
  gstreamer-audio-sys-0.20.0
 | 
			
		||||
  gst-plugin-gtk4-0.10.5
 | 
			
		||||
  futures-sink-0.3.28
 | 
			
		||||
  toml_edit-0.19.8
 | 
			
		||||
  async-executor-1.5.1
 | 
			
		||||
  async-broadcast-0.5.1
 | 
			
		||||
  blocking-1.3.1
 | 
			
		||||
  log-0.4.17
 | 
			
		||||
  gsk4-0.6.3
 | 
			
		||||
  chrono-0.4.24
 | 
			
		||||
  gtk4-macros-0.6.6
 | 
			
		||||
  futures-util-0.3.28
 | 
			
		||||
  block-buffer-0.10.4
 | 
			
		||||
  gstreamer-gl-wayland-0.20.0
 | 
			
		||||
  cpufeatures-0.2.7
 | 
			
		||||
  rustc_version-0.4.0
 | 
			
		||||
  unicode-normalization-0.1.22
 | 
			
		||||
  fastrand-1.9.0
 | 
			
		||||
  gettext-rs-0.7.0
 | 
			
		||||
  gio-0.17.9
 | 
			
		||||
  gst-plugin-version-helper-0.7.5
 | 
			
		||||
  gdk4-x11-0.6.3
 | 
			
		||||
  winnow-0.4.1
 | 
			
		||||
  zbus-3.12.0
 | 
			
		||||
  idna-0.3.0
 | 
			
		||||
  aho-corasick-1.0.1
 | 
			
		||||
  quick-xml-0.23.1
 | 
			
		||||
  tracing-subscriber-0.3.17
 | 
			
		||||
  nix-0.26.2
 | 
			
		||||
  syn-2.0.15
 | 
			
		||||
  glib-0.17.9
 | 
			
		||||
  regex-1.8.1
 | 
			
		||||
  async-std-1.12.0
 | 
			
		||||
  syn-1.0.109
 | 
			
		||||
  rustix-0.37.15
 | 
			
		||||
  regex-syntax-0.7.1
 | 
			
		||||
  gstreamer-0.20.5
 | 
			
		||||
  gtk4-0.6.6
 | 
			
		||||
  libc-0.2.142
 | 
			
		||||
  linux-raw-sys-0.3.4
 | 
			
		||||
  gettext-sys-0.21.3
 | 
			
		||||
"
 | 
			
		||||
 | 
			
		||||
inherit cargo gnome2-utils meson toolchain-funcs xdg
 | 
			
		||||
 | 
			
		||||
DESCRIPTION="Gnome Camera Application"
 | 
			
		||||
HOMEPAGE="https://gitlab.gnome.org/GNOME/Incubator/snapshot"
 | 
			
		||||
SRC_URI="https://gitlab.gnome.org/GNOME/Incubator/snapshot/-/archive/${PV}/snapshot-${PV}.tar.gz"
 | 
			
		||||
SRC_URI+=" $(cargo_crate_uris ${CRATES})"
 | 
			
		||||
 | 
			
		||||
#RESTRICT="network-sandbox"
 | 
			
		||||
 | 
			
		||||
LICENSE="GPL-3"
 | 
			
		||||
SLOT="0"
 | 
			
		||||
KEYWORDS="~amd64 ~arm64"
 | 
			
		||||
 | 
			
		||||
DEPEND="
 | 
			
		||||
	>=x11-libs/gtk+-3.0
 | 
			
		||||
	>=gui-libs/libadwaita-1.4.0_alpha
 | 
			
		||||
	>=media-libs/gstreamer-1.20.0
 | 
			
		||||
	media-video/wireplumber
 | 
			
		||||
	media-video/pipewire[gstreamer]
 | 
			
		||||
"
 | 
			
		||||
RDEPEND="${DEPEND}"
 | 
			
		||||
BDEPEND=""
 | 
			
		||||
 | 
			
		||||
pkg_postinst() {
 | 
			
		||||
	xdg_pkg_postinst
 | 
			
		||||
	gnome2_schemas_update
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pkg_postrm() {
 | 
			
		||||
	xdg_pkg_postrm
 | 
			
		||||
	gnome2_schemas_update
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user