[mutter] tests/screen-cast: Test virtual stream resizing
- From: Marge Bot <marge-bot src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] tests/screen-cast: Test virtual stream resizing
- Date: Fri, 4 Mar 2022 19:04:53 +0000 (UTC)
commit 88cfd31f188ac29f150fd0a6de43e86aeeba9c6e
Author: Jonas Ã…dahl <jadahl gmail com>
Date: Fri Feb 4 09:49:43 2022 +0100
tests/screen-cast: Test virtual stream resizing
This test resizes the stream by updating the PipeWire stream properties.
This triggers a format negotiation, that results in the buffers being
reallocated with the new size. The test makes sure we eventually
receive this new size.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2270>
src/tests/screen-cast-client.c | 51 ++++++++++++++++++++++++++++++++++++++++--
1 file changed, 49 insertions(+), 2 deletions(-)
---
diff --git a/src/tests/screen-cast-client.c b/src/tests/screen-cast-client.c
index a25c768ebc..b408e80fa2 100644
--- a/src/tests/screen-cast-client.c
+++ b/src/tests/screen-cast-client.c
@@ -369,10 +369,39 @@ stream_wait_for_streaming (Stream *stream)
static G_GNUC_UNUSED void
stream_wait_for_render (Stream *stream)
{
- while (stream->buffer_count == 0)
+ int initial_buffer_count = stream->buffer_count;
+
+ while (stream->buffer_count == initial_buffer_count)
g_main_context_iteration (NULL, TRUE);
}
+static void
+stream_resize (Stream *stream,
+ int width,
+ int height)
+{
+ uint8_t params_buffer[1024];
+ struct spa_pod_builder pod_builder;
+ const struct spa_pod *params[1];
+ struct spa_rectangle rect;
+
+ stream->target_width = width;
+ stream->target_height = height;
+
+ rect = SPA_RECTANGLE (width, height);
+
+ 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 (&rect),
+ 0);
+
+ pw_stream_update_params (stream->pipewire_stream,
+ params, G_N_ELEMENTS (params));
+}
+
static void
on_pipewire_stream_added (MetaDBusScreenCastStream *proxy,
unsigned int node_id,
@@ -558,13 +587,31 @@ main (int argc,
screen_cast = screen_cast_new ();
session = screen_cast_create_session (screen_cast);
- stream = session_record_virtual (session, 50, 50);
+ stream = session_record_virtual (session, 50, 40);
session_start (session);
+ /* Check that we receive the initial frame */
+
stream_wait_for_node (stream);
stream_wait_for_streaming (stream);
stream_wait_for_render (stream);
+ g_assert_cmpint (stream->spa_format.size.width, ==, 50);
+ g_assert_cmpint (stream->spa_format.size.height, ==, 40);
+
+ /* Check that resizing works */
+ stream_resize (stream, 70, 60);
+ while (TRUE)
+ {
+ stream_wait_for_render (stream);
+
+ if (stream->spa_format.size.width == 70 &&
+ stream->spa_format.size.height == 60)
+ break;
+
+ g_assert_cmpint (stream->spa_format.size.width, ==, 50);
+ g_assert_cmpint (stream->spa_format.size.height, ==, 40);
+ }
session_stop (session);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]