Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package gnome-remote-desktop for 
openSUSE:Factory checked in at 2023-10-02 20:07:06
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gnome-remote-desktop (Old)
 and      /work/SRC/openSUSE:Factory/.gnome-remote-desktop.new.28202 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gnome-remote-desktop"

Mon Oct  2 20:07:06 2023 rev:21 rq:1114709 version:45.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/gnome-remote-desktop/gnome-remote-desktop.changes    
    2023-09-20 13:24:09.907845132 +0200
+++ 
/work/SRC/openSUSE:Factory/.gnome-remote-desktop.new.28202/gnome-remote-desktop.changes
     2023-10-02 20:09:48.858028421 +0200
@@ -1,0 +2,13 @@
+Thu Sep 28 12:22:12 UTC 2023 - Bjørn Lie <[email protected]>
+
+- Update to version 45.0:
+  + vnc: Also include DRM format modifiers when resizing PipeWire
+    stream.
+  + rdp: Also include DRM format modifiers when resizing PipeWire
+    stream.
+  + Updated translations.
+- Change compression of tarball in service and spec to zst from xz.
+- Drop dbus-1-daemon Requires, only needed for tests, and we are
+  not building them currently.
+
+-------------------------------------------------------------------

Old:
----
  gnome-remote-desktop-45.rc.obscpio

New:
----
  gnome-remote-desktop-45.0.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gnome-remote-desktop.spec ++++++
--- /var/tmp/diff_new_pack.5uV2jx/_old  2023-10-02 20:09:49.990069132 +0200
+++ /var/tmp/diff_new_pack.5uV2jx/_new  2023-10-02 20:09:49.994069276 +0200
@@ -22,13 +22,13 @@
 %define gstreamer_version  1.10.0
 
 Name:           gnome-remote-desktop
-Version:        45.rc
+Version:        45.0
 Release:        0
 Summary:        GNOME Remote Desktop screen sharing service
 License:        GPL-2.0-or-later
 Group:          System/Management
 URL:            https://gitlab.gnome.org/GNOME/gnome-remote-desktop
-Source0:        %{name}-%{version}.tar.xz
+Source0:        %{name}-%{version}.tar.zst
 
 BuildRequires:  asciidoc
 BuildRequires:  meson >= 0.36.0
@@ -67,8 +67,6 @@
 %{?systemd_ordering}
 
 Requires:       pipewire >= 0.3.0
-# Needed for tests
-Requires:       dbus-1-daemon
 
 %description
 GNOME Remote Desktop is a remote desktop and screen sharing service for the

++++++ _service ++++++
--- /var/tmp/diff_new_pack.5uV2jx/_old  2023-10-02 20:09:50.022070283 +0200
+++ /var/tmp/diff_new_pack.5uV2jx/_new  2023-10-02 20:09:50.026070428 +0200
@@ -3,14 +3,14 @@
   <service name="obs_scm" mode="manual">
     <param 
name="url">https://gitlab.gnome.org/GNOME/gnome-remote-desktop.git</param>
     <param name="scm">git</param>
-    <param name="revision">refs/tags/45.rc</param>
+    <param name="revision">refs/tags/45.0</param>
     <param name="versionformat">@PARENT_TAG@</param>
 <!-- <param name="changesgenerate">enable</param> -->
   </service>
   <service mode="buildtime" name="tar" />
   <service mode="buildtime" name="recompress">
     <param name="file">*.tar</param>
-    <param name="compression">xz</param>
+    <param name="compression">zst</param>
   </service>
   <service mode="manual" name="set_version" />
 </services>

++++++ gnome-remote-desktop-45.rc.obscpio -> gnome-remote-desktop-45.0.obscpio 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-remote-desktop-45.rc/meson.build 
new/gnome-remote-desktop-45.0/meson.build
--- old/gnome-remote-desktop-45.rc/meson.build  2023-09-03 22:32:53.000000000 
+0200
+++ new/gnome-remote-desktop-45.0/meson.build   2023-09-28 07:25:23.000000000 
+0200
@@ -1,5 +1,5 @@
 project('gnome-remote-desktop', 'c',
-        version: '45.rc',
+        version: '45.0',
         meson_version: '>= 0.57.0',
         default_options: ['warning_level=1',
                           'buildtype=debugoptimized'])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-remote-desktop-45.rc/po/LINGUAS 
new/gnome-remote-desktop-45.0/po/LINGUAS
--- old/gnome-remote-desktop-45.rc/po/LINGUAS   2023-09-03 22:32:53.000000000 
+0200
+++ new/gnome-remote-desktop-45.0/po/LINGUAS    2023-09-28 07:25:23.000000000 
+0200
@@ -9,6 +9,7 @@
 de
 el
 en_GB
+eo
 es
 eu
 fa
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-remote-desktop-45.rc/po/eo.po 
new/gnome-remote-desktop-45.0/po/eo.po
--- old/gnome-remote-desktop-45.rc/po/eo.po     1970-01-01 01:00:00.000000000 
+0100
+++ new/gnome-remote-desktop-45.0/po/eo.po      2023-09-28 07:25:23.000000000 
+0200
@@ -0,0 +1,273 @@
+# Esperanto translation for gnome-remote-desktop.
+# Copyright (C) 2023 gnome-remote-desktop's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-remote-desktop 
package.
+# Kristjan SCHMIDT <[email protected]>, 2023.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-remote-desktop master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-remote-desktop/";
+"issues\n"
+"POT-Creation-Date: 2023-09-03 20:59+0000\n"
+"PO-Revision-Date: 2023-09-14 13:55+0200\n"
+"Last-Translator: Kristjan SCHMIDT <[email protected]>\n"
+"Language-Team: Esperanto <[email protected]>\n"
+"Language: eo\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"X-Generator: Gtranslator 42.0\n"
+
+#: src/grd-daemon.c:612
+msgid "GNOME Remote Desktop"
+msgstr "GNOME Defora Labortablo"
+
+#: src/grd-prompt.c:124
+#, c-format
+msgid "Do you want to share your desktop?"
+msgstr "Ĉu vi volas kunhavigi vian labortablon?"
+
+#: src/grd-prompt.c:125
+#, c-format
+msgid ""
+"A user on the computer '%s' is trying to remotely view or control your "
+"desktop."
+msgstr ""
+"Uzanto sur la komputilo '%s' provas defore rigardi aÅ­ regi vian labortablon."
+
+#: src/grd-prompt.c:131
+msgid "Refuse"
+msgstr "Rifuzi"
+
+#: src/grd-prompt.c:136
+msgid "Accept"
+msgstr "Akcepti"
+
+#: src/grd-ctl.c:53
+#, c-format
+msgid "Usage: %s [OPTIONS...] COMMAND [SUBCOMMAND]...\n"
+msgstr "Uzo: %s [OPCIOJ...] KOMANDO [SUBKOMANDO]...\n"
+
+#: src/grd-ctl.c:461
+msgid "Commands:\n"
+msgstr "Komandoj:\n"
+
+#: src/grd-ctl.c:466
+msgid ""
+"  rdp                                        - RDP subcommands:\n"
+"    enable                                   - Enable the RDP backend\n"
+"    disable                                  - Disable the RDP backend\n"
+"    set-tls-cert <path-to-cert>              - Set path to TLS certificate\n"
+"    set-tls-key <path-to-key>                - Set path to TLS key\n"
+"    set-credentials <username> <password>    - Set username and password\n"
+"                                               credentials\n"
+"    clear-credentials                        - Clear username and password\n"
+"                                               credentials\n"
+"    enable-view-only                         - Disable remote control of "
+"input\n"
+"                                               devices\n"
+"    disable-view-only                        - Enable remote control of "
+"input\n"
+"                                               devices\n"
+"\n"
+msgstr ""
+"  rdp                                        - RDP-subkomandoj:\n"
+"    enable                                   - Aktivigi la internan RDP-"
+"interfacon\n"
+"    disable                                  - Malebligi la internan RDP-"
+"interfacon\n"
+"    set-tls-cert <vojo-al-cert>              - Meti vojon al TLS-a atestilo\n"
+"    set-tls-key <vojo-al-ŝlosilo>            - Meti vojon al TLS-a 
ŝlosilo\n"
+"    set-credentials <uzantnomo> <pasvorto>   - Meti uzantnomon kaj "
+"pasvorton\n"
+"                                               poŝtokredencojn\n"
+"    clear-credentials                        - Forigi uzantnomo- kaj "
+"pasvorto-\n"
+"                                               akreditaĵojn\n"
+"    enable-view-only                         - Malebligi foran regon de "
+"eniga\n"
+"                                               aparatoj\n"
+"    disable-view-only                        - Ebligi foran regon de eniga\n"
+"                                               aparatoj\n"
+"\n"
+
+#: src/grd-ctl.c:485
+msgid ""
+"  vnc                                        - VNC subcommands:\n"
+"    enable                                   - Enable the VNC backend\n"
+"    disable                                  - Disable the VNC backend\n"
+"    set-password <password>                  - Set the VNC password\n"
+"    clear-password                           - Clear the VNC password\n"
+"    set-auth-method password|prompt          - Set the authorization method\n"
+"    enable-view-only                         - Disable remote control of "
+"input\n"
+"                                               devices\n"
+"    disable-view-only                        - Enable remote control of "
+"input\n"
+"                                               devices\n"
+"\n"
+msgstr ""
+"  vnc                                        - VNC-subkomandoj:\n"
+"    enable                                   - Aktivigi la internan VNC-"
+"interfacon\n"
+"    disable                                  - Malebligi la internan VNC-"
+"interfacon\n"
+"    set-password <pasvorto>                  - Meti la VNC-pasvorton\n"
+"    clear-password                           - Forigi la VNC-pasvorton\n"
+"    set-auth-method password|prompt          - Meti la aÅ­tentiga metodon\n"
+"    enable-view-only                         - Malebligi foran regon de "
+"eniga\n"
+"                                               aparatoj\n"
+"    disable-view-only                        - Ebligi foran regon de eniga\n"
+"                                               aparatoj\n"
+"\n"
+
+#: src/grd-ctl.c:500
+msgid ""
+"  status [--show-credentials]                - Show current status\n"
+"\n"
+"Options:\n"
+"  --headless                                 - Use headless credentials "
+"storage\n"
+"  --help                                     - Print this help text\n"
+msgstr ""
+"  status [--montru-poŝtokredencojn]          - Montri la nunan staton\n"
+"\n"
+"Opcioj:\n"
+"  --headless                                 - Uzi senkapan poŝtokredencon\n"
+"  --help                                     - Montri ĉi tiun helptekston\n"
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:7
+msgid "Whether the RDP backend is enabled or not"
+msgstr "Ĉu la interna RDP-interfaco estas aktivigita aŭ ne"
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:8
+msgid "If set to 'true' the RDP backend will be initialized."
+msgstr "Se agordita al 'vera', la interna RDP-interfaco inicialiĝos."
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:14
+msgid "Screenshare mode of RDP connections"
+msgstr "Ekran-kunhaviga modo de RDP-konektoj"
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:15
+msgid ""
+"The screenshare mode specifies, whether the RDP backend mirrors the primary "
+"screen, or whether a virtual monitor is created. For the initial resolution "
+"of the virtual monitor, the RDP backend uses either the client core data "
+"([MS-RDPBCGR] 2.2.1.3.2) or the client monitor data ([MS-RDPBCGR] "
+"2.2.1.3.6), depending on what is available. When using a remote desktop "
+"session with a virtual monitor, clients can resize the resolution of the "
+"virtual monitor during a session with the Display Update Virtual Channel "
+"Extension ([MS-RDPEDISP]). Allowed screenshare modes include: * mirror-"
+"primary - Record the primary monitor of the current user session. * extend - "
+"Create a new virtual monitor and use it for the remote desktop session. The "
+"resolution of this virtual monitor is derived from the monitor "
+"configuration, submitted by the remote desktop client."
+msgstr ""
+"La ekran-kunhaviga modo difinas, ĉu la RDP-interfacon specigas la primaran "
+"ekranon, aŭ ĉu estas kreita virtuala ekrano. Por la unua rezolucio de la "
+"virtuala ekrano, la RDP-interfacon uzas aÅ­ la datumojn de la kliento de la "
+"kerno ([MS-RDPBCGR] 2.2.1.3.2) aÅ­ la datumojn de la klienta ekrano ([MS-"
+"RDPBCGR] 2.2.1.3.6), depende de la disponebleco. Dum uzado de fora "
+"labortablo-sesio kun virtuala ekrano, klientoj povas ŝanĝi la rezolucion de 
"
+"la virtuala ekrano dum sesio kun la Ekranĉanĝa Virtua Kanalo Kromprodukto "
+"([MS-RDPEDISP]). Permesataj ekran-kunhavigaj modoj inkluzivas: * mirror-"
+"primary - Registri la primaran ekranon de la aktuala uzantlabortablo. * "
+"extend - Krei novan virtualan ekranon kaj uzi ĝin por la fora labortablo-"
+"sesio. La rezolucio de ĉi tiu virtuala ekrano derivas de la ekranoagordoj, "
+"transdonitaj de la fora labortablo-kliento."
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:41
+msgid "Path to the certificate file"
+msgstr "Pado al la atestila dosiero"
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:42
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:50
+msgid ""
+"In order to be able to use RDP with TLS Security, both the private key file "
+"and the certificate file need to be provided to the RDP server."
+msgstr ""
+"Precipe por uzi RDP kun TLS-sekureco, la dosiero de la privata ŝlosilo kaj "
+"la atestila dosiero devas esti provizitaj al la RDP-servilo."
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:49
+msgid "Path to the private key file"
+msgstr "Pado al la privata ŝlosila dosiero"
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:57
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:74
+msgid "Only allow remote connections to view the screen content"
+msgstr "Nur permesi forajn konektojn vidi la ekransenhavon"
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:58
+msgid ""
+"When view-only is true, remote RDP connections cannot manipulate input "
+"devices (e.g. mouse and keyboard)."
+msgstr ""
+"Kiam nurvido estas vera, foraj RDP-konektoj ne povas manipuli enigajn "
+"aparatojn (ekz., muson kaj klavaron)."
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:67
+msgid "Whether the VNC backend is enabled or not"
+msgstr "Ĉu la VNC-fonendaĵo estas aktivigita aŭ ne"
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:68
+msgid "If set to 'true' the VNC backend will be initialized."
+msgstr "Se agordita al 'vera', la VNC-interfaco inicialiĝos."
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:75
+msgid ""
+"When view-only is true, remote VNC connections cannot manipulate input "
+"devices (e.g. mouse and keyboard)."
+msgstr ""
+"Kiam nurvido estas vera, foraj VNC-konektoj ne povas manipuli enigajn "
+"aparatojn (ekz., muson kaj klavaron)."
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:82
+msgid "Method used to authenticate VNC connections"
+msgstr "Metodo uzata por aÅ­tentigi VNC-konektojn"
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:83
+msgid ""
+"The VNC authentication method describes how a remote connection is "
+"authenticated. It can currently be done in two different ways: * prompt - by "
+"prompting the user for each new connection, requiring a person with physical "
+"access to the workstation to explicitly approve the new connection. * "
+"password - by requiring the remote client to provide a known password"
+msgstr ""
+"La metodo de VNC-a aÅ­tentigo priskribas kiel fora konekto estas 
aÅ­tentigita. "
+"Ĝi nun povas esti farita per du malsamaj manieroj: * prompt - per montrado "
+"de demandoj al la uzanto por ĉiu nova konekto, postulante ke persono kun "
+"fizika alirrajto al la laborstacio eksplite aprobu la novan konekton. * "
+"password - per postulo ke la fora kliento provizu konatan pasvorton"
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:95
+msgid "Screenshare mode of VNC connections"
+msgstr "Ekran-kunhaviga modo de VNC-konektoj"
+
+#: src/org.gnome.desktop.remote-desktop.gschema.xml.in:96
+msgid ""
+"The screenshare mode specifies, whether the VNC backend mirrors the primary "
+"screen, or whether a virtual monitor is created. For the initial resolution "
+"of the virtual monitor, the VNC backend uses a default size of 1920x1080 "
+"pixels. When using a remote desktop session with a virtual monitor, clients "
+"can resize the resolution of the virtual monitor during a session with the "
+"setDesktopSize PDU. Allowed screenshare modes include: * mirror-primary - "
+"Record the primary monitor of the current user session. * extend - Create a "
+"new virtual monitor and use it for the remote desktop session. The initial "
+"monitor resolution of this virtual monitor is set to 1920x1080 pixels. "
+"Clients can override the initial resolution with subsequent monitor "
+"configuration updates."
+msgstr ""
+"La ekran-kunhaviga modo difinas, ĉu la VNC-fonendaĵo kongruas kun la 
primara "
+"ekrano, aŭ ĉu estas kreata virtuala ekrano. Por la unua rezolucio de la "
+"virtuala ekrano, la VNC-fonendaĵo uzas defaŭltan grandon de 1920x1080 "
+"bildopunktoj. Dum uzado de fora labortablo-sesio kun virtuala ekrano, "
+"klientoj povas ŝanĝi la rezolucion de la virtuala ekrano dum sesio kun la "
+"Dosieraktuala Krome de Ekranĉanĝo (setDesktopSize PDU). Permesataj ekran-"
+"kunhavigaj modoj inkluzivas: * mirror-primary - Registri la primaran montron "
+"de la aktuala uzanto-sesio. * extend - Krei novan virtualan ekranon kaj uzi "
+"ĝin por la fora labortablo-sesio. La unua ekranorezolucio de ĉi tiu 
virtuala "
+"ekrano estas agordita al 1920x1080 bildopunktoj. Klientoj povas anstataÅ­igi "
+"la unuan rezolucion per postaj ekranoagordoj."
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-remote-desktop-45.rc/src/grd-rdp-pipewire-stream.c 
new/gnome-remote-desktop-45.0/src/grd-rdp-pipewire-stream.c
--- old/gnome-remote-desktop-45.rc/src/grd-rdp-pipewire-stream.c        
2023-09-03 22:32:53.000000000 +0200
+++ new/gnome-remote-desktop-45.0/src/grd-rdp-pipewire-stream.c 2023-09-28 
07:25:23.000000000 +0200
@@ -40,6 +40,7 @@
 #include "grd-utils.h"
 
 #define DEFAULT_BUFFER_POOL_SIZE 5
+#define MAX_FORMAT_PARAMS 2
 
 enum
 {
@@ -293,28 +294,151 @@
   g_free (rdp_pointer);
 }
 
+static void
+add_common_format_params (struct spa_pod_builder     *pod_builder,
+                          enum spa_video_format       spa_format,
+                          const GrdRdpVirtualMonitor *virtual_monitor,
+                          uint32_t                    refresh_rate)
+{
+  struct spa_rectangle min_rect;
+  struct spa_rectangle max_rect;
+  struct spa_fraction min_framerate;
+  struct spa_fraction max_framerate;
+
+  min_rect = SPA_RECTANGLE (1, 1);
+  max_rect = SPA_RECTANGLE (INT32_MAX, INT32_MAX);
+  min_framerate = SPA_FRACTION (1, 1);
+  max_framerate = SPA_FRACTION (refresh_rate, 1);
+
+  spa_pod_builder_add (pod_builder,
+                       SPA_FORMAT_mediaType,
+                       SPA_POD_Id (SPA_MEDIA_TYPE_video), 0);
+  spa_pod_builder_add (pod_builder,
+                       SPA_FORMAT_mediaSubtype,
+                       SPA_POD_Id (SPA_MEDIA_SUBTYPE_raw), 0);
+  spa_pod_builder_add (pod_builder,
+                       SPA_FORMAT_VIDEO_format,
+                       SPA_POD_Id (spa_format), 0);
+
+  if (virtual_monitor)
+    {
+      struct spa_rectangle virtual_monitor_rect;
+
+      virtual_monitor_rect = SPA_RECTANGLE (virtual_monitor->width,
+                                            virtual_monitor->height);
+      spa_pod_builder_add (pod_builder,
+                           SPA_FORMAT_VIDEO_size,
+                           SPA_POD_Rectangle (&virtual_monitor_rect), 0);
+    }
+  else
+    {
+      spa_pod_builder_add (pod_builder,
+                           SPA_FORMAT_VIDEO_size,
+                           SPA_POD_CHOICE_RANGE_Rectangle (&min_rect,
+                                                           &min_rect,
+                                                           &max_rect), 0);
+    }
+  spa_pod_builder_add (pod_builder,
+                       SPA_FORMAT_VIDEO_framerate,
+                       SPA_POD_Fraction (&SPA_FRACTION (0, 1)), 0);
+  spa_pod_builder_add (pod_builder,
+                       SPA_FORMAT_VIDEO_maxFramerate,
+                       SPA_POD_CHOICE_RANGE_Fraction (&min_framerate,
+                                                      &min_framerate,
+                                                      &max_framerate), 0);
+}
+
+static uint32_t
+add_format_params (GrdRdpPipeWireStream        *stream,
+                   const GrdRdpVirtualMonitor  *virtual_monitor,
+                   struct spa_pod_builder      *pod_builder,
+                   const struct spa_pod       **params,
+                   uint32_t                     n_available_params)
+{
+  GrdSession *session = GRD_SESSION (stream->session_rdp);
+  GrdContext *context = grd_session_get_context (session);
+  GrdEglThread *egl_thread = grd_context_get_egl_thread (context);
+  struct spa_pod_frame format_frame;
+  enum spa_video_format spa_format = SPA_VIDEO_FORMAT_BGRx;
+  gboolean need_fallback_format = FALSE;
+  uint32_t n_params = 0;
+
+  g_assert (stream->rdp_surface);
+  g_assert (n_available_params >= 2);
+
+  spa_pod_builder_push_object (pod_builder, &format_frame,
+                               SPA_TYPE_OBJECT_Format,
+                               SPA_PARAM_EnumFormat);
+  add_common_format_params (pod_builder, spa_format, virtual_monitor,
+                            stream->rdp_surface->refresh_rate);
+
+  if (egl_thread)
+    {
+      uint32_t drm_format;
+      int n_modifiers;
+      g_autofree uint64_t *modifiers = NULL;
+
+      grd_get_spa_format_details (spa_format, &drm_format, NULL);
+      if (grd_egl_thread_get_modifiers_for_format (egl_thread, drm_format,
+                                                   &n_modifiers,
+                                                   &modifiers))
+        {
+          struct spa_pod_frame modifier_frame;
+          int i;
+
+          spa_pod_builder_prop (pod_builder,
+                                SPA_FORMAT_VIDEO_modifier,
+                                (SPA_POD_PROP_FLAG_MANDATORY |
+                                 SPA_POD_PROP_FLAG_DONT_FIXATE));
+
+          spa_pod_builder_push_choice (pod_builder, &modifier_frame,
+                                       SPA_CHOICE_Enum, 0);
+          spa_pod_builder_long (pod_builder, modifiers[0]);
+
+          for (i = 0; i < n_modifiers; i++)
+            {
+              uint64_t modifier = modifiers[i];
+
+              spa_pod_builder_long (pod_builder, modifier);
+            }
+          spa_pod_builder_long (pod_builder, DRM_FORMAT_MOD_INVALID);
+          spa_pod_builder_pop (pod_builder, &modifier_frame);
+
+          need_fallback_format = TRUE;
+        }
+    }
+
+  params[n_params++] = spa_pod_builder_pop (pod_builder, &format_frame);
+
+  if (need_fallback_format)
+    {
+      spa_pod_builder_push_object (pod_builder, &format_frame,
+                                   SPA_TYPE_OBJECT_Format,
+                                   SPA_PARAM_EnumFormat);
+      add_common_format_params (pod_builder, spa_format, virtual_monitor,
+                                stream->rdp_surface->refresh_rate);
+      params[n_params++] = spa_pod_builder_pop (pod_builder, &format_frame);
+    }
+
+  return n_params;
+}
+
 void
 grd_rdp_pipewire_stream_resize (GrdRdpPipeWireStream *stream,
                                 GrdRdpVirtualMonitor *virtual_monitor)
 {
-  struct spa_rectangle virtual_monitor_rect;
   uint8_t params_buffer[1024];
   struct spa_pod_builder pod_builder;
-  const struct spa_pod *params[1];
-
-  virtual_monitor_rect = SPA_RECTANGLE (virtual_monitor->width,
-                                        virtual_monitor->height);
+  const struct spa_pod *params[MAX_FORMAT_PARAMS] = {};
+  uint32_t n_params = 0;
 
   pod_builder = SPA_POD_BUILDER_INIT (params_buffer, sizeof (params_buffer));
 
-  params[0] = spa_pod_builder_add_object (
-    &pod_builder,
-    SPA_TYPE_OBJECT_Format, SPA_PARAM_EnumFormat,
-    SPA_FORMAT_VIDEO_size, SPA_POD_Rectangle (&virtual_monitor_rect),
-    0);
+  n_params += add_format_params (stream, virtual_monitor, &pod_builder,
+                                 params, MAX_FORMAT_PARAMS);
 
-  pw_stream_update_params (stream->pipewire_stream,
-                           params, G_N_ELEMENTS (params));
+  g_assert (n_params > 0);
+  pw_stream_update_params (stream->pipewire_stream, params, n_params);
 }
 
 static gboolean
@@ -1075,76 +1199,16 @@
   .process = on_stream_process,
 };
 
-static void
-add_common_format_params (struct spa_pod_builder     *pod_builder,
-                          enum spa_video_format       spa_format,
-                          const GrdRdpVirtualMonitor *virtual_monitor,
-                          uint32_t                    refresh_rate)
-{
-  struct spa_rectangle min_rect;
-  struct spa_rectangle max_rect;
-  struct spa_fraction min_framerate;
-  struct spa_fraction max_framerate;
-
-  min_rect = SPA_RECTANGLE (1, 1);
-  max_rect = SPA_RECTANGLE (INT32_MAX, INT32_MAX);
-  min_framerate = SPA_FRACTION (1, 1);
-  max_framerate = SPA_FRACTION (refresh_rate, 1);
-
-  spa_pod_builder_add (pod_builder,
-                       SPA_FORMAT_mediaType,
-                       SPA_POD_Id (SPA_MEDIA_TYPE_video), 0);
-  spa_pod_builder_add (pod_builder,
-                       SPA_FORMAT_mediaSubtype,
-                       SPA_POD_Id (SPA_MEDIA_SUBTYPE_raw), 0);
-  spa_pod_builder_add (pod_builder,
-                       SPA_FORMAT_VIDEO_format,
-                       SPA_POD_Id (spa_format), 0);
-
-  if (virtual_monitor)
-    {
-      struct spa_rectangle virtual_monitor_rect;
-
-      virtual_monitor_rect = SPA_RECTANGLE (virtual_monitor->width,
-                                            virtual_monitor->height);
-      spa_pod_builder_add (pod_builder,
-                           SPA_FORMAT_VIDEO_size,
-                           SPA_POD_Rectangle (&virtual_monitor_rect), 0);
-    }
-  else
-    {
-      spa_pod_builder_add (pod_builder,
-                           SPA_FORMAT_VIDEO_size,
-                           SPA_POD_CHOICE_RANGE_Rectangle (&min_rect,
-                                                           &min_rect,
-                                                           &max_rect), 0);
-    }
-  spa_pod_builder_add (pod_builder,
-                       SPA_FORMAT_VIDEO_framerate,
-                       SPA_POD_Fraction (&SPA_FRACTION (0, 1)), 0);
-  spa_pod_builder_add (pod_builder,
-                       SPA_FORMAT_VIDEO_maxFramerate,
-                       SPA_POD_CHOICE_RANGE_Fraction (&min_framerate,
-                                                      &min_framerate,
-                                                      &max_framerate), 0);
-}
-
 static gboolean
 connect_to_stream (GrdRdpPipeWireStream        *stream,
                    const GrdRdpVirtualMonitor  *virtual_monitor,
-                   uint32_t                     refresh_rate,
                    GError                     **error)
 {
-  GrdSession *session = GRD_SESSION (stream->session_rdp);
-  GrdContext *context = grd_session_get_context (session);
   struct pw_stream *pipewire_stream;
   uint8_t params_buffer[1024];
   struct spa_pod_builder pod_builder;
-  const struct spa_pod *params[2];
-  struct spa_pod_frame format_frame;
-  GrdEglThread *egl_thread;
-  enum spa_video_format spa_format = SPA_VIDEO_FORMAT_BGRx;
-  gboolean need_fallback_format = FALSE;
+  const struct spa_pod *params[MAX_FORMAT_PARAMS] = {};
+  uint32_t n_params = 0;
   int ret;
 
   pipewire_stream = pw_stream_new (stream->pipewire_core,
@@ -1153,60 +1217,8 @@
 
   pod_builder = SPA_POD_BUILDER_INIT (params_buffer, sizeof (params_buffer));
 
-  spa_pod_builder_push_object (&pod_builder, &format_frame,
-                               SPA_TYPE_OBJECT_Format,
-                               SPA_PARAM_EnumFormat);
-  add_common_format_params (&pod_builder, spa_format, virtual_monitor,
-                            refresh_rate);
-
-  egl_thread = grd_context_get_egl_thread (context);
-  if (egl_thread)
-    {
-      uint32_t drm_format;
-      int n_modifiers;
-      g_autofree uint64_t *modifiers = NULL;
-
-      grd_get_spa_format_details (spa_format, &drm_format, NULL);
-      if (grd_egl_thread_get_modifiers_for_format (egl_thread, drm_format,
-                                                   &n_modifiers,
-                                                   &modifiers))
-        {
-          struct spa_pod_frame modifier_frame;
-          int i;
-
-          spa_pod_builder_prop (&pod_builder,
-                                SPA_FORMAT_VIDEO_modifier,
-                                (SPA_POD_PROP_FLAG_MANDATORY |
-                                 SPA_POD_PROP_FLAG_DONT_FIXATE));
-
-          spa_pod_builder_push_choice (&pod_builder, &modifier_frame,
-                                       SPA_CHOICE_Enum, 0);
-          spa_pod_builder_long (&pod_builder, modifiers[0]);
-
-          for (i = 0; i < n_modifiers; i++)
-            {
-              uint64_t modifier = modifiers[i];
-
-              spa_pod_builder_long (&pod_builder, modifier);
-            }
-          spa_pod_builder_long (&pod_builder, DRM_FORMAT_MOD_INVALID);
-          spa_pod_builder_pop (&pod_builder, &modifier_frame);
-
-          need_fallback_format = TRUE;
-        }
-    }
-
-  params[0] = spa_pod_builder_pop (&pod_builder, &format_frame);
-
-  if (need_fallback_format)
-    {
-      spa_pod_builder_push_object (&pod_builder, &format_frame,
-                                   SPA_TYPE_OBJECT_Format,
-                                   SPA_PARAM_EnumFormat);
-      add_common_format_params (&pod_builder, spa_format, virtual_monitor,
-                                refresh_rate);
-      params[1] = spa_pod_builder_pop (&pod_builder, &format_frame);
-    }
+  n_params += add_format_params (stream, virtual_monitor, &pod_builder,
+                                 params, MAX_FORMAT_PARAMS);
 
   stream->pipewire_stream = pipewire_stream;
 
@@ -1215,12 +1227,13 @@
                           &stream_events,
                           stream);
 
+  g_assert (n_params > 0);
   ret = pw_stream_connect (stream->pipewire_stream,
                            PW_DIRECTION_INPUT,
                            stream->src_node_id,
                            (PW_STREAM_FLAG_RT_PROCESS |
                             PW_STREAM_FLAG_AUTOCONNECT),
-                           params, need_fallback_format ? 2 : 1);
+                           params, n_params);
   if (ret < 0)
     {
       g_set_error_literal (error, G_IO_ERROR, g_io_error_from_errno (-ret),
@@ -1338,7 +1351,7 @@
                             &stream->pipewire_registry_listener,
                             &registry_events, stream);
 
-  if (!connect_to_stream (stream, virtual_monitor, rdp_surface->refresh_rate, 
error))
+  if (!connect_to_stream (stream, virtual_monitor, error))
     return NULL;
 
   stream->buffer_pool = grd_rdp_buffer_pool_new (egl_thread,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-remote-desktop-45.rc/src/grd-vnc-pipewire-stream.c 
new/gnome-remote-desktop-45.0/src/grd-vnc-pipewire-stream.c
--- old/gnome-remote-desktop-45.rc/src/grd-vnc-pipewire-stream.c        
2023-09-03 22:32:53.000000000 +0200
+++ new/gnome-remote-desktop-45.0/src/grd-vnc-pipewire-stream.c 2023-09-28 
07:25:23.000000000 +0200
@@ -34,6 +34,8 @@
 #include "grd-utils.h"
 #include "grd-vnc-cursor.h"
 
+#define MAX_FORMAT_PARAMS 2
+
 enum
 {
   CLOSED,
@@ -174,28 +176,148 @@
   g_free (vnc_pointer);
 }
 
+static void
+add_common_format_params (struct spa_pod_builder     *pod_builder,
+                          enum spa_video_format       spa_format,
+                          const GrdVncVirtualMonitor *virtual_monitor)
+{
+  struct spa_rectangle min_rect;
+  struct spa_rectangle max_rect;
+  struct spa_fraction min_framerate;
+  struct spa_fraction max_framerate;
+
+  min_rect = SPA_RECTANGLE (1, 1);
+  max_rect = SPA_RECTANGLE (INT32_MAX, INT32_MAX);
+  min_framerate = SPA_FRACTION (1, 1);
+  max_framerate = SPA_FRACTION (30, 1);
+
+  spa_pod_builder_add (pod_builder,
+                       SPA_FORMAT_mediaType,
+                       SPA_POD_Id (SPA_MEDIA_TYPE_video), 0);
+  spa_pod_builder_add (pod_builder,
+                       SPA_FORMAT_mediaSubtype,
+                       SPA_POD_Id (SPA_MEDIA_SUBTYPE_raw), 0);
+  spa_pod_builder_add (pod_builder,
+                       SPA_FORMAT_VIDEO_format,
+                       SPA_POD_Id (spa_format), 0);
+
+  if (virtual_monitor)
+    {
+      struct spa_rectangle virtual_monitor_rect;
+
+      virtual_monitor_rect = SPA_RECTANGLE (virtual_monitor->width,
+                                            virtual_monitor->height);
+      spa_pod_builder_add (pod_builder,
+                           SPA_FORMAT_VIDEO_size,
+                           SPA_POD_Rectangle (&virtual_monitor_rect), 0);
+    }
+  else
+    {
+      spa_pod_builder_add (pod_builder,
+                           SPA_FORMAT_VIDEO_size,
+                           SPA_POD_CHOICE_RANGE_Rectangle (&min_rect,
+                                                           &min_rect,
+                                                           &max_rect), 0);
+    }
+
+  spa_pod_builder_add (pod_builder,
+                       SPA_FORMAT_VIDEO_framerate,
+                       SPA_POD_Fraction (&SPA_FRACTION (0, 1)), 0);
+  spa_pod_builder_add (pod_builder,
+                       SPA_FORMAT_VIDEO_maxFramerate,
+                       SPA_POD_CHOICE_RANGE_Fraction (&min_framerate,
+                                                      &min_framerate,
+                                                      &max_framerate), 0);
+}
+
+static uint32_t
+add_format_params (GrdVncPipeWireStream        *stream,
+                   const GrdVncVirtualMonitor  *virtual_monitor,
+                   struct spa_pod_builder      *pod_builder,
+                   const struct spa_pod       **params,
+                   uint32_t                     n_available_params)
+{
+  GrdSession *session = GRD_SESSION (stream->session);
+  GrdContext *context = grd_session_get_context (session);
+  GrdEglThread *egl_thread = grd_context_get_egl_thread (context);
+  struct spa_pod_frame format_frame;
+  enum spa_video_format spa_format = SPA_VIDEO_FORMAT_BGRx;
+  gboolean need_fallback_format = FALSE;
+  uint32_t n_params = 0;
+
+  g_assert (n_available_params >= 2);
+
+  spa_pod_builder_push_object (pod_builder, &format_frame,
+                               SPA_TYPE_OBJECT_Format,
+                               SPA_PARAM_EnumFormat);
+  add_common_format_params (pod_builder, spa_format, virtual_monitor);
+
+  if (egl_thread)
+    {
+      uint32_t drm_format;
+      int n_modifiers;
+      g_autofree uint64_t *modifiers = NULL;
+
+      grd_get_spa_format_details (spa_format, &drm_format, NULL);
+      if (grd_egl_thread_get_modifiers_for_format (egl_thread, drm_format,
+                                                   &n_modifiers,
+                                                   &modifiers))
+        {
+          struct spa_pod_frame modifier_frame;
+          int i;
+
+          spa_pod_builder_prop (pod_builder,
+                                SPA_FORMAT_VIDEO_modifier,
+                                (SPA_POD_PROP_FLAG_MANDATORY |
+                                 SPA_POD_PROP_FLAG_DONT_FIXATE));
+
+          spa_pod_builder_push_choice (pod_builder, &modifier_frame,
+                                       SPA_CHOICE_Enum, 0);
+          spa_pod_builder_long (pod_builder, modifiers[0]);
+
+          for (i = 0; i < n_modifiers; i++)
+            {
+              uint64_t modifier = modifiers[i];
+
+              spa_pod_builder_long (pod_builder, modifier);
+            }
+          spa_pod_builder_long (pod_builder, DRM_FORMAT_MOD_INVALID);
+          spa_pod_builder_pop (pod_builder, &modifier_frame);
+
+          need_fallback_format = TRUE;
+        }
+    }
+
+  params[n_params++] = spa_pod_builder_pop (pod_builder, &format_frame);
+
+  if (need_fallback_format)
+    {
+      spa_pod_builder_push_object (pod_builder, &format_frame,
+                                   SPA_TYPE_OBJECT_Format,
+                                   SPA_PARAM_EnumFormat);
+      add_common_format_params (pod_builder, spa_format, virtual_monitor);
+      params[n_params++] = spa_pod_builder_pop (pod_builder, &format_frame);
+    }
+
+  return n_params;
+}
+
 void
 grd_vnc_pipewire_stream_resize (GrdVncPipeWireStream *stream,
                                 GrdVncVirtualMonitor *virtual_monitor)
 {
-  struct spa_rectangle virtual_monitor_rect;
   uint8_t params_buffer[1024];
   struct spa_pod_builder pod_builder;
-  const struct spa_pod *params[1];
-
-  virtual_monitor_rect = SPA_RECTANGLE (virtual_monitor->width,
-                                        virtual_monitor->height);
+  const struct spa_pod *params[MAX_FORMAT_PARAMS] = {};
+  uint32_t n_params = 0;
 
   pod_builder = SPA_POD_BUILDER_INIT (params_buffer, sizeof (params_buffer));
 
-  params[0] = spa_pod_builder_add_object (
-    &pod_builder,
-    SPA_TYPE_OBJECT_Format, SPA_PARAM_EnumFormat,
-    SPA_FORMAT_VIDEO_size, SPA_POD_Rectangle (&virtual_monitor_rect),
-    0);
+  n_params += add_format_params (stream, virtual_monitor, &pod_builder,
+                                 params, MAX_FORMAT_PARAMS);
 
-  pw_stream_update_params (stream->pipewire_stream,
-                           params, G_N_ELEMENTS (params));
+  g_assert (n_params > 0);
+  pw_stream_update_params (stream->pipewire_stream, params, n_params);
 }
 
 static void
@@ -769,76 +891,17 @@
   .process = on_stream_process,
 };
 
-static void
-add_common_format_params (struct spa_pod_builder     *pod_builder,
-                          enum spa_video_format       spa_format,
-                          const GrdVncVirtualMonitor *virtual_monitor)
-{
-  struct spa_rectangle min_rect;
-  struct spa_rectangle max_rect;
-  struct spa_fraction min_framerate;
-  struct spa_fraction max_framerate;
-
-  min_rect = SPA_RECTANGLE (1, 1);
-  max_rect = SPA_RECTANGLE (INT32_MAX, INT32_MAX);
-  min_framerate = SPA_FRACTION (1, 1);
-  max_framerate = SPA_FRACTION (30, 1);
-
-  spa_pod_builder_add (pod_builder,
-                       SPA_FORMAT_mediaType,
-                       SPA_POD_Id (SPA_MEDIA_TYPE_video), 0);
-  spa_pod_builder_add (pod_builder,
-                       SPA_FORMAT_mediaSubtype,
-                       SPA_POD_Id (SPA_MEDIA_SUBTYPE_raw), 0);
-  spa_pod_builder_add (pod_builder,
-                       SPA_FORMAT_VIDEO_format,
-                       SPA_POD_Id (spa_format), 0);
-
-  if (virtual_monitor)
-    {
-      struct spa_rectangle virtual_monitor_rect;
-
-      virtual_monitor_rect = SPA_RECTANGLE (virtual_monitor->width,
-                                            virtual_monitor->height);
-      spa_pod_builder_add (pod_builder,
-                           SPA_FORMAT_VIDEO_size,
-                           SPA_POD_Rectangle (&virtual_monitor_rect), 0);
-    }
-  else
-    {
-      spa_pod_builder_add (pod_builder,
-                           SPA_FORMAT_VIDEO_size,
-                           SPA_POD_CHOICE_RANGE_Rectangle (&min_rect,
-                                                           &min_rect,
-                                                           &max_rect), 0);
-    }
-
-  spa_pod_builder_add (pod_builder,
-                       SPA_FORMAT_VIDEO_framerate,
-                       SPA_POD_Fraction (&SPA_FRACTION (0, 1)), 0);
-  spa_pod_builder_add (pod_builder,
-                       SPA_FORMAT_VIDEO_maxFramerate,
-                       SPA_POD_CHOICE_RANGE_Fraction (&min_framerate,
-                                                      &min_framerate,
-                                                      &max_framerate), 0);
-}
-
 static gboolean
 connect_to_stream (GrdVncPipeWireStream        *stream,
                    const GrdVncVirtualMonitor  *virtual_monitor,
                    GError                     **error)
 {
-  GrdSession *session = GRD_SESSION (stream->session);
-  GrdContext *context = grd_session_get_context (session);
   struct pw_stream *pipewire_stream;
   uint8_t params_buffer[1024];
   struct spa_pod_builder pod_builder;
-  const struct spa_pod *params[2];
+  const struct spa_pod *params[MAX_FORMAT_PARAMS] = {};
+  uint32_t n_params = 0;
   int ret;
-  enum spa_video_format spa_format = SPA_VIDEO_FORMAT_BGRx;
-  GrdEglThread *egl_thread;
-  struct spa_pod_frame format_frame;
-  gboolean need_fallback_format = FALSE;
 
   pipewire_stream = pw_stream_new (stream->pipewire_core,
                                    "grd-vnc-pipewire-stream",
@@ -846,58 +909,8 @@
 
   pod_builder = SPA_POD_BUILDER_INIT (params_buffer, sizeof (params_buffer));
 
-  spa_pod_builder_push_object (&pod_builder, &format_frame,
-                               SPA_TYPE_OBJECT_Format,
-                               SPA_PARAM_EnumFormat);
-  add_common_format_params (&pod_builder, spa_format, virtual_monitor);
-
-  egl_thread = grd_context_get_egl_thread (context);
-  if (egl_thread)
-    {
-      uint32_t drm_format;
-      int n_modifiers;
-      g_autofree uint64_t *modifiers = NULL;
-
-      grd_get_spa_format_details (spa_format, &drm_format, NULL);
-      if (grd_egl_thread_get_modifiers_for_format (egl_thread, drm_format,
-                                                   &n_modifiers,
-                                                   &modifiers))
-        {
-          struct spa_pod_frame modifier_frame;
-          int i;
-
-          spa_pod_builder_prop (&pod_builder,
-                                SPA_FORMAT_VIDEO_modifier,
-                                (SPA_POD_PROP_FLAG_MANDATORY |
-                                 SPA_POD_PROP_FLAG_DONT_FIXATE));
-
-          spa_pod_builder_push_choice (&pod_builder, &modifier_frame,
-                                       SPA_CHOICE_Enum, 0);
-          spa_pod_builder_long (&pod_builder, modifiers[0]);
-
-          for (i = 0; i < n_modifiers; i++)
-            {
-              uint64_t modifier = modifiers[i];
-
-              spa_pod_builder_long (&pod_builder, modifier);
-            }
-          spa_pod_builder_long (&pod_builder, DRM_FORMAT_MOD_INVALID);
-          spa_pod_builder_pop (&pod_builder, &modifier_frame);
-
-          need_fallback_format = TRUE;
-        }
-    }
-
-  params[0] = spa_pod_builder_pop (&pod_builder, &format_frame);
-
-  if (need_fallback_format)
-    {
-      spa_pod_builder_push_object (&pod_builder, &format_frame,
-                                   SPA_TYPE_OBJECT_Format,
-                                   SPA_PARAM_EnumFormat);
-      add_common_format_params (&pod_builder, spa_format, virtual_monitor);
-      params[1] = spa_pod_builder_pop (&pod_builder, &format_frame);
-    }
+  n_params += add_format_params (stream, virtual_monitor, &pod_builder,
+                                 params, MAX_FORMAT_PARAMS);
 
   stream->pipewire_stream = pipewire_stream;
 
@@ -906,12 +919,13 @@
                           &stream_events,
                           stream);
 
+  g_assert (n_params > 0);
   ret = pw_stream_connect (stream->pipewire_stream,
                            PW_DIRECTION_INPUT,
                            stream->src_node_id,
                            (PW_STREAM_FLAG_RT_PROCESS |
                             PW_STREAM_FLAG_AUTOCONNECT),
-                           params, need_fallback_format ? 2 : 1);
+                           params, n_params);
   if (ret < 0)
     {
       g_set_error_literal (error, G_IO_ERROR, g_io_error_from_errno (-ret),

++++++ gnome-remote-desktop.obsinfo ++++++
--- /var/tmp/diff_new_pack.5uV2jx/_old  2023-10-02 20:09:50.246078339 +0200
+++ /var/tmp/diff_new_pack.5uV2jx/_new  2023-10-02 20:09:50.250078483 +0200
@@ -1,5 +1,5 @@
 name: gnome-remote-desktop
-version: 45.rc
-mtime: 1693773173
-commit: 691845d924276e1ee2216ee41d53c28d9c2bcb7c
+version: 45.0
+mtime: 1695878723
+commit: a7c4f2dd87fe09389dd93268b0ce3e32a6ceb6eb
 

Reply via email to