Accepting request 1172235 from multimedia:libs

OBS-URL: https://build.opensuse.org/request/show/1172235
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/wireplumber?expand=0&rev=36
This commit is contained in:
Dominique Leuenberger 2024-05-07 16:02:40 +00:00 committed by Git OBS Bridge
commit a88aec0b2f
6 changed files with 209 additions and 0 deletions

View File

@ -0,0 +1,34 @@
From 709eecb21f30a157b9a4aa8ab45a4c1ec608d628 Mon Sep 17 00:00:00 2001
From: Stefan Ursella <stefan.ursella@wolfvision.net>
Date: Fri, 26 Apr 2024 07:27:31 +0200
Subject: [PATCH] lua: json: fix error ouput
---
modules/module-lua-scripting/api/json.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/modules/module-lua-scripting/api/json.c b/modules/module-lua-scripting/api/json.c
index 242f0e410..5afa5c914 100644
--- a/modules/module-lua-scripting/api/json.c
+++ b/modules/module-lua-scripting/api/json.c
@@ -281,7 +281,7 @@ spa_json_array_new (lua_State *L)
break;
}
default:
- luaL_error (L, "Json does not support lua type ",
+ luaL_error (L, "Json does not support lua type %s",
lua_typename(L, lua_type(L, -1)));
break;
}
@@ -327,7 +327,7 @@ spa_json_object_new (lua_State *L)
break;
}
default:
- luaL_error (L, "Json does not support lua type ",
+ luaL_error (L, "Json does not support lua type %s",
lua_typename(L, lua_type(L, -1)));
break;
}
--
GitLab

View File

@ -0,0 +1,77 @@
From fd7a1af7ffec4be04348b4807a4a8f95777e2515 Mon Sep 17 00:00:00 2001
From: Stefan Ursella <stefan.ursella@wolfvision.net>
Date: Fri, 26 Apr 2024 07:26:52 +0200
Subject: [PATCH] lua: json: add method to merge json containers
---
modules/module-lua-scripting/api/json.c | 15 +++++++++++++++
tests/wplua/scripts/json.lua | 23 +++++++++++++++++++++++
2 files changed, 38 insertions(+)
diff --git a/modules/module-lua-scripting/api/json.c b/modules/module-lua-scripting/api/json.c
index 39f6b10f0..242f0e410 100644
--- a/modules/module-lua-scripting/api/json.c
+++ b/modules/module-lua-scripting/api/json.c
@@ -167,6 +167,20 @@ push_luajson (lua_State *L, WpSpaJson *json, gint n_recursions)
}
}
+static int
+spa_json_merge (lua_State *L)
+{
+ WpSpaJson *a = wplua_checkboxed (L, 1, WP_TYPE_SPA_JSON);
+ WpSpaJson *b = wplua_checkboxed (L, 2, WP_TYPE_SPA_JSON);
+
+ WpSpaJson *merge = wp_json_utils_merge_containers(a, b);
+ if(!merge)
+ luaL_error (L, "only Json container merge supported");
+
+ wplua_pushboxed (L, WP_TYPE_SPA_JSON, merge);
+ return 1;
+}
+
static int
spa_json_parse (lua_State *L)
{
@@ -340,6 +354,7 @@ static const luaL_Reg spa_json_methods[] = {
{ "is_array", spa_json_is_array },
{ "is_object", spa_json_is_object },
{ "parse", spa_json_parse },
+ { "merge", spa_json_merge },
{ NULL, NULL }
};
diff --git a/tests/wplua/scripts/json.lua b/tests/wplua/scripts/json.lua
index 52a8a3823..03e14ba6d 100644
--- a/tests/wplua/scripts/json.lua
+++ b/tests/wplua/scripts/json.lua
@@ -240,3 +240,26 @@ assert (type (val.args) == "table")
assert (type (val.args.test) == "table")
assert (val.args.test[1] == 0)
assert (val.args.test[2] == 1)
+
+json = Json.Array { "foo" }
+json2 = Json.Array { "bar" }
+json = json:merge(json2)
+assert (json:is_array())
+val = json:parse ()
+assert (val[1] == "foo")
+assert (val[2] == "bar")
+
+table = {}
+table["1"] = 1
+table["2"] = 2
+json = Json.Object (table)
+table = {}
+table["3"] = 3
+table["4"] = 4
+json2 = Json.Object (table)
+json = json:merge(json2)
+val = json:parse ()
+assert (val["1"] == 1)
+assert (val["2"] == 2)
+assert (val["3"] == 3)
+assert (val["4"] == 4)
--
GitLab

View File

@ -0,0 +1,58 @@
From e6a70db254585b2cd9f3265fdafc884a48c3682d Mon Sep 17 00:00:00 2001
From: George Kiagiadakis <george.kiagiadakis@collabora.com>
Date: Fri, 3 May 2024 15:54:37 +0300
Subject: [PATCH] json-utils: fix overriding of non-container values when
merging
Non-container values should always be overriden
Fixes: #653
---
lib/wp/json-utils.c | 4 ++--
tests/wplua/scripts/json.lua | 7 +++++++
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/lib/wp/json-utils.c b/lib/wp/json-utils.c
index 53d1b2b1b..936ad449e 100644
--- a/lib/wp/json-utils.c
+++ b/lib/wp/json-utils.c
@@ -211,12 +211,12 @@ merge_json_objects (WpSpaJson *a, WpSpaJson *b)
g_return_val_if_fail (wp_iterator_next (it, &item), NULL);
val = g_value_dup_boxed (&item);
- if (!override &&
+ if (!override && wp_spa_json_is_container (val) &&
(wp_spa_json_object_get (a, key_str, "J", &j, NULL) ||
wp_spa_json_object_get (a, override_key_str, "J", &j, NULL))) {
g_autoptr (WpSpaJson) merged = wp_json_utils_merge_containers (j, val);
if (!merged) {
- wp_warning ("skipping merge of %s as JSON values are not compatible",
+ wp_warning ("skipping merge of %s as JSON values are not compatible containers",
key_str);
continue;
}
diff --git a/tests/wplua/scripts/json.lua b/tests/wplua/scripts/json.lua
index 03e14ba6d..5489bab23 100644
--- a/tests/wplua/scripts/json.lua
+++ b/tests/wplua/scripts/json.lua
@@ -241,6 +241,7 @@ assert (type (val.args.test) == "table")
assert (val.args.test[1] == 0)
assert (val.args.test[2] == 1)
+-- merge
json = Json.Array { "foo" }
json2 = Json.Array { "bar" }
json = json:merge(json2)
@@ -263,3 +264,9 @@ assert (val["1"] == 1)
assert (val["2"] == 2)
assert (val["3"] == 3)
assert (val["4"] == 4)
+
+json = Json.Object { ["a"] = "foo" }
+json2 = Json.Object { ["a"] = "bar" }
+json = json:merge(json2)
+val = json:parse ()
+assert (val["a"] == "bar")
--
GitLab

View File

@ -13,6 +13,8 @@ lines = open('wireplumber.conf', 'r', encoding='utf-8').readlines()
is_in_device_monitor = False
main_config_content = ''
device_monitors_content = ''
main_profile_contents = ''
for line in lines:
if re.match(' *## Device monitors$', line):
main_config_content += line
@ -25,6 +27,10 @@ for line in lines:
if is_in_device_monitor:
device_monitors_content += line
else:
# Fixes wireplumber running the main profile when not having audio support (bsc#1223916)
if line in [' hardware.audio = required\n', ' hardware.bluetooth = required\n']:
main_profile_contents += line
line = line.replace('required', 'disabled')
main_config_content += line
config_sha256 = sha256_from_data(device_monitors_content.encode('utf-8'))
@ -38,6 +44,9 @@ if config_sha256 != verified_sha256:
sys.exit(1)
device_monitors_content = 'wireplumber.components = [\n' + device_monitors_content + ']'
main_profile_contents = 'wireplumber.profiles = {\n main = {\n' + main_profile_contents + ' }\n}\n'
open('wireplumber.conf', 'w', encoding='utf-8').write(main_config_content)
open('wireplumber.conf.d/00-device-monitors.conf', 'w', encoding='utf-8').write(device_monitors_content)
open('wireplumber.conf.d/01-require-audio-in-main-profile.conf', 'w', encoding='utf-8').write(main_profile_contents)

View File

@ -1,3 +1,29 @@
-------------------------------------------------------------------
Mon May 6 16:23:47 UTC 2024 - Antonio Larrosa <alarrosa@suse.com>
- Better fix for (bsc#1223916) that basically turns the main
profile into the (to be in 0.5.3) video-only profile unless
wireplumber-audio is installed which now turns the main profile
into exactly upstream's main profile.
-------------------------------------------------------------------
Mon May 6 07:41:23 UTC 2024 - Antonio Larrosa <alarrosa@suse.com>
- Add patch from upstream to fix a json log issue:
* 0001-lua-json-fix-error-ouput.patch
- Add patch from upstream to add a method to merge json containers:
* 0002-lua-json-add-method-to-merge-json-containers.patch
- Add patch from upstream to fix merging a particular case
of configuration options:
* 0003-json-utils-fix-overriding-of-non-container-values-when.patch
- Fix wireplumber not starting successfully when audio support is
not enabled since the main profile now requires it. The best
option would be to use a video-only profile but it's too late
to change the way wireplumber is started in SLE/Leap, so the
solution just makes audio/bluetooth optional for now
(bsc#1223916)
* split-config-file.py
-------------------------------------------------------------------
Tue Apr 23 06:48:06 UTC 2024 - Antonio Larrosa <alarrosa@suse.com>

View File

@ -30,6 +30,9 @@ Group: Development/Libraries/C and C++
URL: https://gitlab.freedesktop.org/pipewire/wireplumber
Source0: wireplumber-%{version}.tar.xz
Source1: split-config-file.py
Patch0: 0001-lua-json-fix-error-ouput.patch
Patch1: 0002-lua-json-add-method-to-merge-json-containers.patch
Patch2: 0003-json-utils-fix-overriding-of-non-container-values-when.patch
# docs
BuildRequires: doxygen
BuildRequires: graphviz
@ -250,12 +253,14 @@ fi
%{_datadir}/wireplumber/wireplumber.conf
%dir %{_datadir}/wireplumber/wireplumber.conf.d
%exclude %{_datadir}/wireplumber/wireplumber.conf.d/00-device-monitors.conf
%exclude %{_datadir}/wireplumber/wireplumber.conf.d/01-require-audio-in-main-profile.conf
%{_datadir}/wireplumber/wireplumber.conf.d/alsa-vm.conf
%files lang -f %{name}.lang
%files audio
%{_datadir}/wireplumber/wireplumber.conf.d/00-device-monitors.conf
%{_datadir}/wireplumber/wireplumber.conf.d/01-require-audio-in-main-profile.conf
%files devel
%{_includedir}/wireplumber-%{apiver}