- migrated to Exherbo
- added a few initial Pantheon components
This commit is contained in:
parent
cb6360a7e8
commit
2d2bbbc830
85 changed files with 931 additions and 2 deletions
|
@ -0,0 +1,129 @@
|
|||
Upstream: Yes
|
||||
Reason_ Work with pipewire 0.2
|
||||
From 0407a8b33d8c3503fba63ad260984bb08bd6e0dc Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||
Date: Mon, 9 Jul 2018 17:27:47 +0200
|
||||
Subject: [PATCH] screen-cast-src: Port to pipewire master
|
||||
|
||||
The PipeWire master branch saw some backports from the work branch,
|
||||
including API changes making the 0.1 series more aligned with future
|
||||
plans. Make mutter use the new API. This is needed to avoid dead locks
|
||||
that existed in the older version.
|
||||
---
|
||||
src/backends/meta-screen-cast-stream-src.c | 46 +++++++++++-----------
|
||||
1 file changed, 23 insertions(+), 23 deletions(-)
|
||||
|
||||
diff --git a/src/backends/meta-screen-cast-stream-src.c b/src/backends/meta-screen-cast-stream-src.c
|
||||
index 337755002..8cd8911ae 100644
|
||||
--- a/src/backends/meta-screen-cast-stream-src.c
|
||||
+++ b/src/backends/meta-screen-cast-stream-src.c
|
||||
@@ -132,8 +132,8 @@ meta_screen_cast_stream_src_maybe_record_frame (MetaScreenCastStreamSrc *src)
|
||||
{
|
||||
MetaScreenCastStreamSrcPrivate *priv =
|
||||
meta_screen_cast_stream_src_get_instance_private (src);
|
||||
- uint32_t buffer_id;
|
||||
- struct spa_buffer *buffer;
|
||||
+ struct pw_buffer *buffer;
|
||||
+ struct spa_buffer *spa_buffer;
|
||||
uint8_t *map = NULL;
|
||||
uint8_t *data;
|
||||
uint64_t now_us;
|
||||
@@ -148,22 +148,24 @@ meta_screen_cast_stream_src_maybe_record_frame (MetaScreenCastStreamSrc *src)
|
||||
if (!priv->pipewire_stream)
|
||||
return;
|
||||
|
||||
- buffer_id = pw_stream_get_empty_buffer (priv->pipewire_stream);
|
||||
- if (buffer_id == SPA_ID_INVALID)
|
||||
- return;
|
||||
-
|
||||
- buffer = pw_stream_peek_buffer (priv->pipewire_stream, buffer_id);
|
||||
+ buffer = pw_stream_dequeue_buffer (priv->pipewire_stream);
|
||||
if (!buffer)
|
||||
{
|
||||
- g_warning ("Failed to peek at PipeWire buffer");
|
||||
+ g_warning ("Failed to dequeue at PipeWire buffer");
|
||||
return;
|
||||
}
|
||||
|
||||
- if (buffer->datas[0].type == priv->pipewire_type->data.MemFd)
|
||||
+ spa_buffer = buffer->buffer;
|
||||
+
|
||||
+ if (spa_buffer->datas[0].data)
|
||||
+ {
|
||||
+ data = spa_buffer->datas[0].data;
|
||||
+ }
|
||||
+ else if (spa_buffer->datas[0].type == priv->pipewire_type->data.MemFd)
|
||||
{
|
||||
- map = mmap (NULL, buffer->datas[0].maxsize + buffer->datas[0].mapoffset,
|
||||
+ map = mmap (NULL, spa_buffer->datas[0].maxsize + spa_buffer->datas[0].mapoffset,
|
||||
PROT_READ | PROT_WRITE, MAP_SHARED,
|
||||
- buffer->datas[0].fd, 0);
|
||||
+ spa_buffer->datas[0].fd, 0);
|
||||
if (map == MAP_FAILED)
|
||||
{
|
||||
g_warning ("Failed to mmap pipewire stream buffer: %s\n",
|
||||
@@ -171,14 +173,11 @@ meta_screen_cast_stream_src_maybe_record_frame (MetaScreenCastStreamSrc *src)
|
||||
return;
|
||||
}
|
||||
|
||||
- data = SPA_MEMBER (map, buffer->datas[0].mapoffset, uint8_t);
|
||||
- }
|
||||
- else if (buffer->datas[0].type == priv->pipewire_type->data.MemPtr)
|
||||
- {
|
||||
- data = buffer->datas[0].data;
|
||||
+ data = SPA_MEMBER (map, spa_buffer->datas[0].mapoffset, uint8_t);
|
||||
}
|
||||
else
|
||||
{
|
||||
+ g_warning ("Unhandled spa buffer type: %d", spa_buffer->datas[0].type);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -186,11 +185,11 @@ meta_screen_cast_stream_src_maybe_record_frame (MetaScreenCastStreamSrc *src)
|
||||
priv->last_frame_timestamp_us = now_us;
|
||||
|
||||
if (map)
|
||||
- munmap (map, buffer->datas[0].maxsize + buffer->datas[0].mapoffset);
|
||||
+ munmap (map, spa_buffer->datas[0].maxsize + spa_buffer->datas[0].mapoffset);
|
||||
|
||||
- buffer->datas[0].chunk->size = buffer->datas[0].maxsize;
|
||||
+ spa_buffer->datas[0].chunk->size = spa_buffer->datas[0].maxsize;
|
||||
|
||||
- pw_stream_send_buffer (priv->pipewire_stream, buffer_id);
|
||||
+ pw_stream_queue_buffer (priv->pipewire_stream, buffer);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@@ -266,8 +265,8 @@ on_stream_state_changed (void *data,
|
||||
}
|
||||
|
||||
static void
|
||||
-on_stream_format_changed (void *data,
|
||||
- struct spa_pod *format)
|
||||
+on_stream_format_changed (void *data,
|
||||
+ const struct spa_pod *format)
|
||||
{
|
||||
MetaScreenCastStreamSrc *src = data;
|
||||
MetaScreenCastStreamSrcPrivate *priv =
|
||||
@@ -276,7 +275,7 @@ on_stream_format_changed (void *data,
|
||||
uint8_t params_buffer[1024];
|
||||
int32_t width, height, stride, size;
|
||||
struct spa_pod_builder pod_builder;
|
||||
- struct spa_pod *params[1];
|
||||
+ const struct spa_pod *params[1];
|
||||
const int bpp = 4;
|
||||
|
||||
if (!format)
|
||||
@@ -372,7 +371,8 @@ create_pipewire_stream (MetaScreenCastStreamSrc *src,
|
||||
result = pw_stream_connect (pipewire_stream,
|
||||
PW_DIRECTION_OUTPUT,
|
||||
NULL,
|
||||
- PW_STREAM_FLAG_NONE,
|
||||
+ (PW_STREAM_FLAG_DRIVER |
|
||||
+ PW_STREAM_FLAG_MAP_BUFFERS),
|
||||
params, G_N_ELEMENTS (params));
|
||||
if (result != 0)
|
||||
{
|
||||
--
|
||||
2.17.1
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue