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,
®istry_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