scratch-screen-share/notes.org

7.5 KiB

[2024-06-28 Fri]

well, i'm setting up sbcl and sly?

because i imagine using Common Lisp for my attempt at building screen sharing for the XR glasses

for the cool runtime access, right?

well, just flake shell and (use-package sly) is enough

for .lisp files to get stuff

yes, i'm still using C-M-f and stuff to move around sexps but things are fine

so, what's next? well, this is nice high level description dbus https://www.freedesktop.org/wiki/Software/dbus/

and here's something to start usage https://blog.macrolet.net/posts/DBus-and-PolicyKit-from-Common-Lisp.html from https://github.com/death/dbus

and even lots of examples, but i think i will need a big book on Common Lisp to learn new things?

[2024-06-29 Sat]

going through the dbus guide, sounds neat

https://develop.kde.org/docs/features/d-bus/introduction_to_dbus/

that qdbus and qdbus-viewer are in

$ nix shell nixpkgs#kdePackages.qttools

now let's read about calling methods

the receiving of the signals

all the different tabs i had

searching github for 'get-managed-objects usage

searchin github for 'define-singlan-handler usage examples

https://github.com/search?q=dbus%3Adefine-dbus-signal-handler&type=code

example in cl-notify of calling a method 'with-introspected-object

https://github.com/Lautaro-Garcia/cl-notify/blob/main/src/dbus-protocol.lisp#L27

  (defmacro with-dbus-method-inovaction ((result-var method &rest args) &body body)
  (alexandria:with-gensyms (bus notifications-object)
    `(dbus:with-open-bus (,bus (dbus:session-server-addresses))
       (dbus:with-introspected-object (,notifications-object ,bus "/org/freedesktop/Notifications" "org.freedesktop.Notifications")
         (let ((,result-var (,notifications-object "org.freedesktop.Notifications" ,method ,@args)))
          ,@body)))))

example in cl-notify of working with signals

https://github.com/Lautaro-Garcia/cl-notify/blob/main/src/signals.lisp

they register single handler, and add callbacks dynamically & call them from the registered function

dbus library example for publishing objects

my request for help with interactive async calls

old ticket on dbus repo about enabling introspection

big article about iolib

https://pages.cs.wisc.edu/~psilord/blog/data/iolib-tutorial/tutorial.html

it's the one that's used to create multiplexer for communication i tried to figure out what it means to have event-loops

docs on dbus type system

https://dbus.freedesktop.org/doc/dbus-specification.html#type-system

i.e how to understand types of methods and properties

  CL-USER> (dbus:sigexp "xsaysas")
(:INT64 :STRING (:ARRAY :BYTE) :STRING (:ARRAY :STRING))

function signature explanation can show what should lisp types be https://github.com/death/dbus/issues/17#issuecomment-418920440

repo for xdg-portal for wayland

the python snippet to check that ScreenCast via xdg-portal works

[2024-07-20 Sat]

and now i want to try to get display of stuff into gtk window, i guess

well, i guess i could go and try to read guide on pipewire with C examples

https://docs.pipewire.org/page_tutorial.html this is tutorial for the system

and here is example program that maybe does similar thing https://docs.pipewire.org/video-play_8c-example.html

[2024-07-28 Sun]

ok, now i'm trying to get frames from the pipewire 'out' node

and one option i'm exploring is gstreamer

which is a framework for creating applications that stream video / audio with some kind of ability to define \ declare pipeline and then start and then use api somehow

there's c api, and gobject accessibility layer so either c to common lisp, or gobject common lisp thingy maybe exist

more readin

gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink this is test for how it's installed

needed to add plugins

https://nixos.wiki/wiki/GStreamer

i guess i can try to go with the tutorials?

https://gstreamer.freedesktop.org/documentation/tutorials/index.html?gi-language=c

but with common lisp over gobject? i think i'm already using this in the gtk bindings playground? maybe not https://cl-gtk2.common-lisp.dev/doc/gobject/Creating-GObjects-classes-and-implementing-GInterfaces.html

GObject binding at the moment provides only limited scenarios of creating GObject classes.

[2024-08-15 Thu]

getting back after a long while.

so, i was at the creating a window, not knowing how to stream video from pipewire out node so. what to do, huh i think gtk3 bindings library was separate from gobject and glib

but maybe it doesn't matter? or maybe i should figure out glib bindings and use gtk3 though it?

well, there's something simple with opening a window

gtk-playground.lisp::defun example-window-simple (

and something extra simple with gstreamer opening separate window for test video source

maybe try to open gstreamer window with screen share?

ok, when i try example of pipewire window on screenshare source i get error that pipewiresrc is not found and that's right, i used system-wide gst-launch-1.0 and when i tried with one in flake shell - it also didn't work

so. tried removing all from shell env, then not found namespace Gst (defvar gstreamer (gir:require-namespace "Gst"))

so. yeah. maybe i need to install dev headers or something?