From 3d2e4a21fc3f4dfabf25e68bcd745e156729cf8e Mon Sep 17 00:00:00 2001 From: halfmexican Date: Fri, 30 Jun 2023 11:20:19 -0500 Subject: [PATCH 01/17] library: add Camera Entry --- src/Library/demos/Camera/main.blp | 36 ++++++++++ src/Library/demos/Camera/main.js | 102 +++++++++++++++++++++++++++++ src/Library/demos/Camera/main.json | 10 +++ 3 files changed, 148 insertions(+) create mode 100644 src/Library/demos/Camera/main.blp create mode 100644 src/Library/demos/Camera/main.js create mode 100644 src/Library/demos/Camera/main.json diff --git a/src/Library/demos/Camera/main.blp b/src/Library/demos/Camera/main.blp new file mode 100644 index 000000000..5f7ee2e55 --- /dev/null +++ b/src/Library/demos/Camera/main.blp @@ -0,0 +1,36 @@ +using Gtk 4.0; +using Adw 1; + +Adw.StatusPage { + title: "Camera"; + description: _("Access your Camera"); + margin-top: 48; + + Box { + orientation: vertical; + halign: center; + + Box { + + Picture output { + margin-bottom: 30; + width-request: 360; + height-request: 240; + } + } + + Button button { + label: _("Access Camera"); + margin-bottom: 42; + halign: center; + styles ["suggested-action"] + } + + LinkButton { + label: "API Reference"; + uri: "https://libportal.org/method.Portal.access_camera.html"; + } + } +} + + diff --git a/src/Library/demos/Camera/main.js b/src/Library/demos/Camera/main.js new file mode 100644 index 000000000..b05224aae --- /dev/null +++ b/src/Library/demos/Camera/main.js @@ -0,0 +1,102 @@ +import Gtk from "gi://Gtk"; +import Xdp from "gi://Xdp"; +import XdpGtk from "gi://XdpGtk4"; +import GObject from "gi://GObject"; +import Gst from "gi://Gst"; + +const portal = new Xdp.Portal(); +const parent = XdpGtk.parent_new_gtk(workbench.window); +const output = workbench.builder.get_object("output"); +const button = workbench.builder.get_object("button"); + +button.connect("clicked", () => { + if (portal.is_camera_present) { + portal.access_camera( + parent, + Xdp.CameraFlags.NONE, + null, + async (portal, result) => { + try { + if (portal.access_camera_finish(result)) { + try { + await on_clicked(); + } catch (error) { + console.error("Error in on_clicked:", error); + } + } else { + console.log("Permission denied"); + } + } catch (error) { + console.error("Failed to request camera access:", error); + } + }, + ); + } else { + console.log("No Camera detected"); + } +}); + +async function on_clicked() { + const pwRemote = await portal.open_pipewire_remote_for_camera(); + console.log("Pipewire remote opened for camera"); + + Gst.init(null); + + // Create the pipeline + const pipeline = new Gst.Pipeline(); + + // Create elements + const source = Gst.ElementFactory.make("pipewiresrc", "source"); + const queue = Gst.ElementFactory.make("queue", "queue"); // add a queue element + const paintable_sink = Gst.ElementFactory.make( + "gtk4paintablesink", + "paintable_sink", + ); + const glsinkbin = Gst.ElementFactory.make("glsinkbin", "glsinkbin"); + + // Set up and Link Pipeline + + source.set_property("fd", pwRemote); // pwRemote is the file descriptor obtained from libportal + glsinkbin.set_property("sink", paintable_sink); + + pipeline.add(source); + pipeline.add(queue); + pipeline.add(glsinkbin); + source.link(queue); + queue.link(glsinkbin); + + const paintable = new GObject.Value(); + paintable_sink.get_property("paintable", paintable); + output.paintable = paintable.get_object(); + + // Start the pipeline + pipeline.set_state(Gst.State.PLAYING); + + // Handle cleanup on application exit + output.connect("destroy", () => { + pipeline.set_state(Gst.State.NULL); + }); + + // Set up the bus + const bus = pipeline.get_bus(); + bus.add_signal_watch(); + bus.connect("message", (bus, message) => { + // Check the message type + const messageType = message.type; + + // Handle different message types + switch (messageType) { + case Gst.MessageType.ERROR: { + const errorMessage = message.parse_error(); + console.error(errorMessage[0].toString()); + break; + } + case Gst.MessageType.EOS: { + console.log("End of stream"); + break; + } + } + }); +} + + diff --git a/src/Library/demos/Camera/main.json b/src/Library/demos/Camera/main.json new file mode 100644 index 000000000..2dddcbf52 --- /dev/null +++ b/src/Library/demos/Camera/main.json @@ -0,0 +1,10 @@ +{ + "name": "Camera", + "category": "platform", + "description": "Access your Camera", + "panels": [ + "code", + "preview" + ], + "autorun": true +} From 5377b22f95eff30fc888f9e2db20c7d0df97f47a Mon Sep 17 00:00:00 2001 From: halfmexican Date: Fri, 30 Jun 2023 11:30:10 -0500 Subject: [PATCH 02/17] update devel manifest --- re.sonny.Workbench.Devel.json | 36 +++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/re.sonny.Workbench.Devel.json b/re.sonny.Workbench.Devel.json index 01233f95a..45aa4976e 100644 --- a/re.sonny.Workbench.Devel.json +++ b/re.sonny.Workbench.Devel.json @@ -5,11 +5,16 @@ "sdk": "org.gnome.Sdk", "sdk-extensions": [ "org.freedesktop.Sdk.Extension.vala", - "org.gnome.Sdk.Docs" + "org.gnome.Sdk.Docs", + "org.freedesktop.Sdk.Extension.rust-stable" ], "build-options": { "append-path": "/usr/lib/sdk/vala/bin", - "append-ld-library-path": "/usr/lib/sdk/vala/lib" + "append-ld-library-path": "/usr/lib/sdk/vala/lib", + "env": { + "CARGO_HOME": "/run/build/cargo-c/cargo" + }, + "append-path": "/usr/lib/sdk/rust-stable/bin" }, "command": "workbench", "finish-args": [ @@ -17,6 +22,7 @@ "--socket=fallback-x11", "--socket=wayland", "--device=dri", + "--device=all", "--share=network" ], "cleanup": [ @@ -71,6 +77,32 @@ } ] }, + { + "name": "cargo-c", + "buildsystem": "simple", + "build-commands": ["cargo install cargo-c --root /app"], + "build-options": { + "build-args": ["--share=network"] + }, + "cleanup": ["*"] + }, + { + "name": "gst-plugins-rs", + "buildsystem": "simple", + "sources": [ + { + "type": "git", + "url": "https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs", + "branch": "main" + } + ], + "build-options": { + "build-args": ["--share=network"] + }, + "build-commands": [ + "cargo cinstall --features wayland,x11glx,x11egl -p gst-plugin-gtk4 --prefix=/app" + ] + }, { "name": "vte", "buildsystem": "meson", From fb9aa7fd3ad6ca8e81f62d3098cbea3b10a9e29c Mon Sep 17 00:00:00 2001 From: halfmexican Date: Fri, 30 Jun 2023 11:52:35 -0500 Subject: [PATCH 03/17] update manifest --- re.sonny.Workbench.json | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/re.sonny.Workbench.json b/re.sonny.Workbench.json index 55db093d2..29c9f1224 100644 --- a/re.sonny.Workbench.json +++ b/re.sonny.Workbench.json @@ -5,11 +5,16 @@ "sdk": "org.gnome.Sdk", "sdk-extensions": [ "org.freedesktop.Sdk.Extension.vala", - "org.gnome.Sdk.Docs" + "org.gnome.Sdk.Docs", + "org.freedesktop.Sdk.Extension.rust-stable" ], "build-options": { "append-path": "/usr/lib/sdk/vala/bin", - "append-ld-library-path": "/usr/lib/sdk/vala/lib" + "append-ld-library-path": "/usr/lib/sdk/vala/lib", + "env": { + "CARGO_HOME": "/run/build/cargo-c/cargo" + }, + "append-path": "/usr/lib/sdk/rust-stable/bin" }, "command": "workbench", "finish-args": [ @@ -71,6 +76,32 @@ } ] }, + { + "name": "cargo-c", + "buildsystem": "simple", + "build-commands": ["cargo install cargo-c --root /app"], + "build-options": { + "build-args": ["--share=network"] + }, + "cleanup": ["*"] + }, + { + "name": "gst-plugins-rs", + "buildsystem": "simple", + "sources": [ + { + "type": "git", + "url": "https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs", + "branch": "main" + } + ], + "build-options": { + "build-args": ["--share=network"] + }, + "build-commands": [ + "cargo cinstall --features wayland,x11glx,x11egl -p gst-plugin-gtk4 --prefix=/app" + ] + }, { "name": "vte", "buildsystem": "meson", From ac3a0df3c856192acdbb2ac6796793c185e8702e Mon Sep 17 00:00:00 2001 From: halfmexican Date: Fri, 30 Jun 2023 11:52:47 -0500 Subject: [PATCH 04/17] remove box --- src/Library/demos/Camera/main.blp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/Library/demos/Camera/main.blp b/src/Library/demos/Camera/main.blp index 5f7ee2e55..002c2c2c8 100644 --- a/src/Library/demos/Camera/main.blp +++ b/src/Library/demos/Camera/main.blp @@ -10,13 +10,10 @@ Adw.StatusPage { orientation: vertical; halign: center; - Box { - - Picture output { - margin-bottom: 30; - width-request: 360; - height-request: 240; - } + Picture output { + margin-bottom: 30; + width-request: 360; + height-request: 240; } Button button { From 2888b31c36b4b44560f0725abdb5f105c41af9ff Mon Sep 17 00:00:00 2001 From: halfmexican Date: Fri, 30 Jun 2023 11:52:54 -0500 Subject: [PATCH 05/17] add comment --- src/Library/demos/Camera/main.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Library/demos/Camera/main.js b/src/Library/demos/Camera/main.js index b05224aae..e34dc3e9f 100644 --- a/src/Library/demos/Camera/main.js +++ b/src/Library/demos/Camera/main.js @@ -1,3 +1,5 @@ +// This demo requires the "--device=all" permission + import Gtk from "gi://Gtk"; import Xdp from "gi://Xdp"; import XdpGtk from "gi://XdpGtk4"; @@ -55,7 +57,6 @@ async function on_clicked() { const glsinkbin = Gst.ElementFactory.make("glsinkbin", "glsinkbin"); // Set up and Link Pipeline - source.set_property("fd", pwRemote); // pwRemote is the file descriptor obtained from libportal glsinkbin.set_property("sink", paintable_sink); From fe08a6e38943d43a971d3887be20753e25b24773 Mon Sep 17 00:00:00 2001 From: halfmexican Date: Fri, 30 Jun 2023 11:53:54 -0500 Subject: [PATCH 06/17] main.js: use snake case --- src/Library/demos/Camera/main.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Library/demos/Camera/main.js b/src/Library/demos/Camera/main.js index e34dc3e9f..c37943965 100644 --- a/src/Library/demos/Camera/main.js +++ b/src/Library/demos/Camera/main.js @@ -83,10 +83,10 @@ async function on_clicked() { bus.add_signal_watch(); bus.connect("message", (bus, message) => { // Check the message type - const messageType = message.type; + const message_type = message.type; // Handle different message types - switch (messageType) { + switch (message_type) { case Gst.MessageType.ERROR: { const errorMessage = message.parse_error(); console.error(errorMessage[0].toString()); From 47ed0ee9d4905a4c90d63d859be14ba7a73b3e50 Mon Sep 17 00:00:00 2001 From: halfmexican Date: Sat, 1 Jul 2023 10:21:36 -0500 Subject: [PATCH 07/17] main.js: use snake case --- src/Library/demos/Camera/main.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Library/demos/Camera/main.js b/src/Library/demos/Camera/main.js index c37943965..bc9e94828 100644 --- a/src/Library/demos/Camera/main.js +++ b/src/Library/demos/Camera/main.js @@ -39,7 +39,7 @@ button.connect("clicked", () => { }); async function on_clicked() { - const pwRemote = await portal.open_pipewire_remote_for_camera(); + const pw_remote = await portal.open_pipewire_remote_for_camera(); console.log("Pipewire remote opened for camera"); Gst.init(null); @@ -57,7 +57,7 @@ async function on_clicked() { const glsinkbin = Gst.ElementFactory.make("glsinkbin", "glsinkbin"); // Set up and Link Pipeline - source.set_property("fd", pwRemote); // pwRemote is the file descriptor obtained from libportal + source.set_property("fd", pw_remote); // pw_remote is the file descriptor obtained from libportal glsinkbin.set_property("sink", paintable_sink); pipeline.add(source); From 0befd9b78e042be360128c82102af4e951dd51b3 Mon Sep 17 00:00:00 2001 From: halfmexican <103920890+halfmexican@users.noreply.github.com> Date: Mon, 3 Jul 2023 17:21:03 -0500 Subject: [PATCH 08/17] Apply suggestions from code review Co-authored-by: Sonny Piers --- src/Library/demos/Camera/main.blp | 4 ++-- src/Library/demos/Camera/main.js | 2 +- src/Library/demos/Camera/main.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Library/demos/Camera/main.blp b/src/Library/demos/Camera/main.blp index 002c2c2c8..448bfc406 100644 --- a/src/Library/demos/Camera/main.blp +++ b/src/Library/demos/Camera/main.blp @@ -2,8 +2,8 @@ using Gtk 4.0; using Adw 1; Adw.StatusPage { - title: "Camera"; - description: _("Access your Camera"); + title: _("Camera"); + description: _("Access the Camera"); margin-top: 48; Box { diff --git a/src/Library/demos/Camera/main.js b/src/Library/demos/Camera/main.js index bc9e94828..6e434e5bb 100644 --- a/src/Library/demos/Camera/main.js +++ b/src/Library/demos/Camera/main.js @@ -38,7 +38,7 @@ button.connect("clicked", () => { } }); -async function on_clicked() { +async function handleCamera () { const pw_remote = await portal.open_pipewire_remote_for_camera(); console.log("Pipewire remote opened for camera"); diff --git a/src/Library/demos/Camera/main.json b/src/Library/demos/Camera/main.json index 2dddcbf52..f726d4e09 100644 --- a/src/Library/demos/Camera/main.json +++ b/src/Library/demos/Camera/main.json @@ -1,7 +1,7 @@ { "name": "Camera", "category": "platform", - "description": "Access your Camera", + "description": "Access the Camera", "panels": [ "code", "preview" From f0b869971533fd7141dbd734a8bdddd7902f4852 Mon Sep 17 00:00:00 2001 From: halfmexican Date: Mon, 3 Jul 2023 18:34:32 -0500 Subject: [PATCH 09/17] main.js: apply code review suggestions --- src/Library/demos/Camera/main.js | 55 ++++++++++++++++---------------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/src/Library/demos/Camera/main.js b/src/Library/demos/Camera/main.js index 6e434e5bb..7b14cddcc 100644 --- a/src/Library/demos/Camera/main.js +++ b/src/Library/demos/Camera/main.js @@ -1,10 +1,12 @@ -// This demo requires the "--device=all" permission - import Gtk from "gi://Gtk"; +import Gio from "gi://Gio"; import Xdp from "gi://Xdp"; import XdpGtk from "gi://XdpGtk4"; import GObject from "gi://GObject"; import Gst from "gi://Gst"; +Gst.init(null); + +Gio._promisify(Xdp.Portal.prototype, "access_camera", "access_camera_finish"); const portal = new Xdp.Portal(); const parent = XdpGtk.parent_new_gtk(workbench.window); @@ -12,38 +14,38 @@ const output = workbench.builder.get_object("output"); const button = workbench.builder.get_object("button"); button.connect("clicked", () => { - if (portal.is_camera_present) { - portal.access_camera( - parent, - Xdp.CameraFlags.NONE, - null, - async (portal, result) => { + if (!portal.is_camera_present()) { + console.log("No Camera detected"); + return; + } + + portal.access_camera( + parent, + Xdp.CameraFlags.NONE, + null, + async (portal, result) => { + try { + if (!portal.access_camera_finish(result)) { + console.log("Permission denied"); + return; + } + try { - if (portal.access_camera_finish(result)) { - try { - await on_clicked(); - } catch (error) { - console.error("Error in on_clicked:", error); - } - } else { - console.log("Permission denied"); - } + await handleCamera(); } catch (error) { - console.error("Failed to request camera access:", error); + console.error("Error in handleCamera:", error); } - }, - ); - } else { - console.log("No Camera detected"); - } + } catch (error) { + console.error("Failed to request camera access:", error); + } + }, + ); }); -async function handleCamera () { +async function handleCamera() { const pw_remote = await portal.open_pipewire_remote_for_camera(); console.log("Pipewire remote opened for camera"); - Gst.init(null); - // Create the pipeline const pipeline = new Gst.Pipeline(); @@ -100,4 +102,3 @@ async function handleCamera () { }); } - From d82c08c56b0cb8d4287af5ff59d04582ba62b6c1 Mon Sep 17 00:00:00 2001 From: halfmexican Date: Mon, 3 Jul 2023 18:34:44 -0500 Subject: [PATCH 10/17] start fixing manifest --- re.sonny.Workbench.Devel.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/re.sonny.Workbench.Devel.json b/re.sonny.Workbench.Devel.json index 45aa4976e..5f8a3c911 100644 --- a/re.sonny.Workbench.Devel.json +++ b/re.sonny.Workbench.Devel.json @@ -22,7 +22,6 @@ "--socket=fallback-x11", "--socket=wayland", "--device=dri", - "--device=all", "--share=network" ], "cleanup": [ @@ -93,14 +92,14 @@ { "type": "git", "url": "https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs", - "branch": "main" + "branch": "0.10" } ], "build-options": { "build-args": ["--share=network"] }, "build-commands": [ - "cargo cinstall --features wayland,x11glx,x11egl -p gst-plugin-gtk4 --prefix=/app" + "cargo cinstall --features wayland,x11egl -p gst-plugin-gtk4 --prefix=/app" ] }, { From 6911a3c56b55d3b6113be894b674735c208d40f3 Mon Sep 17 00:00:00 2001 From: halfmexican Date: Mon, 3 Jul 2023 18:36:03 -0500 Subject: [PATCH 11/17] rename pw_remote --- src/Library/demos/Camera/main.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Library/demos/Camera/main.js b/src/Library/demos/Camera/main.js index 7b14cddcc..7d8f3c57d 100644 --- a/src/Library/demos/Camera/main.js +++ b/src/Library/demos/Camera/main.js @@ -43,7 +43,7 @@ button.connect("clicked", () => { }); async function handleCamera() { - const pw_remote = await portal.open_pipewire_remote_for_camera(); + const fd_pipewire_remote = await portal.open_pipewire_remote_for_camera(); console.log("Pipewire remote opened for camera"); // Create the pipeline @@ -59,7 +59,7 @@ async function handleCamera() { const glsinkbin = Gst.ElementFactory.make("glsinkbin", "glsinkbin"); // Set up and Link Pipeline - source.set_property("fd", pw_remote); // pw_remote is the file descriptor obtained from libportal + source.set_property("fd", fd_pipewire_remote); // fd_pipewire_remote is the file descriptor obtained from libportal glsinkbin.set_property("sink", paintable_sink); pipeline.add(source); From d685771b1f867ee58d3303e2b1d6c2f17d99d21d Mon Sep 17 00:00:00 2001 From: halfmexican Date: Mon, 3 Jul 2023 18:37:20 -0500 Subject: [PATCH 12/17] remove await --- src/Library/demos/Camera/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Library/demos/Camera/main.js b/src/Library/demos/Camera/main.js index 7d8f3c57d..d8b3014ad 100644 --- a/src/Library/demos/Camera/main.js +++ b/src/Library/demos/Camera/main.js @@ -43,7 +43,7 @@ button.connect("clicked", () => { }); async function handleCamera() { - const fd_pipewire_remote = await portal.open_pipewire_remote_for_camera(); + const fd_pipewire_remote = portal.open_pipewire_remote_for_camera(); console.log("Pipewire remote opened for camera"); // Create the pipeline From 3441ff892c201fd1c85e4a550e7b771788c48615 Mon Sep 17 00:00:00 2001 From: halfmexican Date: Mon, 3 Jul 2023 18:41:04 -0500 Subject: [PATCH 13/17] add default case --- src/Library/demos/Camera/main.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Library/demos/Camera/main.js b/src/Library/demos/Camera/main.js index d8b3014ad..b8c8d1c47 100644 --- a/src/Library/demos/Camera/main.js +++ b/src/Library/demos/Camera/main.js @@ -98,6 +98,10 @@ async function handleCamera() { console.log("End of stream"); break; } + default: { + console.log(`Unhandled message type: ${message_type}`); + break; + } } }); } From cf15fc58041bb37d0f85e6492bf6bb3fe22a365a Mon Sep 17 00:00:00 2001 From: halfmexican Date: Mon, 3 Jul 2023 18:43:20 -0500 Subject: [PATCH 14/17] remove console.log statement --- src/Library/demos/Camera/main.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Library/demos/Camera/main.js b/src/Library/demos/Camera/main.js index b8c8d1c47..61da3a716 100644 --- a/src/Library/demos/Camera/main.js +++ b/src/Library/demos/Camera/main.js @@ -99,7 +99,6 @@ async function handleCamera() { break; } default: { - console.log(`Unhandled message type: ${message_type}`); break; } } From 24c76366946b77f1fa889d2e311399af2e99cd9e Mon Sep 17 00:00:00 2001 From: halfmexican Date: Mon, 3 Jul 2023 18:45:49 -0500 Subject: [PATCH 15/17] manifest: use latest release of gst-plugins-rs --- re.sonny.Workbench.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/re.sonny.Workbench.json b/re.sonny.Workbench.json index 29c9f1224..14921d7fe 100644 --- a/re.sonny.Workbench.json +++ b/re.sonny.Workbench.json @@ -92,7 +92,7 @@ { "type": "git", "url": "https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs", - "branch": "main" + "branch": "0.10" } ], "build-options": { From e2591d79fa1f3a19fdd525c9397bb16b39083493 Mon Sep 17 00:00:00 2001 From: Sonny Piers Date: Wed, 5 Jul 2023 17:17:38 +0200 Subject: [PATCH 16/17] small things --- re.sonny.Workbench.Devel.json | 6 ++--- re.sonny.Workbench.json | 6 ++--- src/Library/demos/Camera/main.js | 44 +++++++++++--------------------- 3 files changed, 21 insertions(+), 35 deletions(-) diff --git a/re.sonny.Workbench.Devel.json b/re.sonny.Workbench.Devel.json index 5f8a3c911..e311613d7 100644 --- a/re.sonny.Workbench.Devel.json +++ b/re.sonny.Workbench.Devel.json @@ -90,9 +90,9 @@ "buildsystem": "simple", "sources": [ { - "type": "git", - "url": "https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs", - "branch": "0.10" + "type": "archive", + "url": "https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/archive/0.10.9/gst-plugins-rs-0.10.9.tar.gz", + "sha512": "81140948e2be6a339d619d867e9b757c56e490aba81373c1df9bbeabe3103081d949718a8977f484dda159322d943c13ca5904a34282d1ce2cc25ed25c0a3994" } ], "build-options": { diff --git a/re.sonny.Workbench.json b/re.sonny.Workbench.json index 14921d7fe..44189a355 100644 --- a/re.sonny.Workbench.json +++ b/re.sonny.Workbench.json @@ -90,9 +90,9 @@ "buildsystem": "simple", "sources": [ { - "type": "git", - "url": "https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs", - "branch": "0.10" + "type": "archive", + "url": "https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/archive/0.10.9/gst-plugins-rs-0.10.9.tar.gz", + "sha512": "81140948e2be6a339d619d867e9b757c56e490aba81373c1df9bbeabe3103081d949718a8977f484dda159322d943c13ca5904a34282d1ce2cc25ed25c0a3994" } ], "build-options": { diff --git a/src/Library/demos/Camera/main.js b/src/Library/demos/Camera/main.js index 61da3a716..cc1cfbc76 100644 --- a/src/Library/demos/Camera/main.js +++ b/src/Library/demos/Camera/main.js @@ -1,46 +1,36 @@ -import Gtk from "gi://Gtk"; import Gio from "gi://Gio"; import Xdp from "gi://Xdp"; import XdpGtk from "gi://XdpGtk4"; import GObject from "gi://GObject"; import Gst from "gi://Gst"; -Gst.init(null); +Gst.init(null); Gio._promisify(Xdp.Portal.prototype, "access_camera", "access_camera_finish"); const portal = new Xdp.Portal(); const parent = XdpGtk.parent_new_gtk(workbench.window); + const output = workbench.builder.get_object("output"); const button = workbench.builder.get_object("button"); button.connect("clicked", () => { + accessCamera().catch(logError); +}); + +async function accessCamera() { if (!portal.is_camera_present()) { console.log("No Camera detected"); return; } - portal.access_camera( - parent, - Xdp.CameraFlags.NONE, - null, - async (portal, result) => { - try { - if (!portal.access_camera_finish(result)) { - console.log("Permission denied"); - return; - } - - try { - await handleCamera(); - } catch (error) { - console.error("Error in handleCamera:", error); - } - } catch (error) { - console.error("Failed to request camera access:", error); - } - }, - ); -}); + const success = portal.access_camera(parent, Xdp.CameraFlags.NONE, null); + if (!success) { + console.log("Permission denied"); + return; + } + + await handleCamera(); +} async function handleCamera() { const fd_pipewire_remote = portal.open_pipewire_remote_for_camera(); @@ -83,7 +73,7 @@ async function handleCamera() { // Set up the bus const bus = pipeline.get_bus(); bus.add_signal_watch(); - bus.connect("message", (bus, message) => { + bus.connect("message", (self, message) => { // Check the message type const message_type = message.type; @@ -98,10 +88,6 @@ async function handleCamera() { console.log("End of stream"); break; } - default: { - break; - } } }); } - From 8f71c500ef7816059872d6f22ce2cd48dca55daa Mon Sep 17 00:00:00 2001 From: Sonny Piers Date: Fri, 18 Aug 2023 09:46:05 +0200 Subject: [PATCH 17/17] missing await --- src/Library/demos/Camera/main.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Library/demos/Camera/main.js b/src/Library/demos/Camera/main.js index cc1cfbc76..291e01ac8 100644 --- a/src/Library/demos/Camera/main.js +++ b/src/Library/demos/Camera/main.js @@ -23,7 +23,12 @@ async function accessCamera() { return; } - const success = portal.access_camera(parent, Xdp.CameraFlags.NONE, null); + const success = await portal.access_camera( + parent, + Xdp.CameraFlags.NONE, + null, + ); + if (!success) { console.log("Permission denied"); return;