mirror of
https://github.com/brl/mutter.git
synced 2024-11-26 01:50:42 -05:00
mutter-pipewire-0_2-API.patch
This commit is contained in:
parent
68570353fd
commit
6d7bbeddd7
@ -132,8 +132,8 @@ meta_screen_cast_stream_src_maybe_record_frame (MetaScreenCastStreamSrc *src)
|
|||||||
{
|
{
|
||||||
MetaScreenCastStreamSrcPrivate *priv =
|
MetaScreenCastStreamSrcPrivate *priv =
|
||||||
meta_screen_cast_stream_src_get_instance_private (src);
|
meta_screen_cast_stream_src_get_instance_private (src);
|
||||||
uint32_t buffer_id;
|
struct pw_buffer *buffer;
|
||||||
struct spa_buffer *buffer;
|
struct spa_buffer *spa_buffer;
|
||||||
uint8_t *map = NULL;
|
uint8_t *map = NULL;
|
||||||
uint8_t *data;
|
uint8_t *data;
|
||||||
uint64_t now_us;
|
uint64_t now_us;
|
||||||
@ -148,22 +148,24 @@ meta_screen_cast_stream_src_maybe_record_frame (MetaScreenCastStreamSrc *src)
|
|||||||
if (!priv->pipewire_stream)
|
if (!priv->pipewire_stream)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
buffer_id = pw_stream_get_empty_buffer (priv->pipewire_stream);
|
buffer = pw_stream_dequeue_buffer (priv->pipewire_stream);
|
||||||
if (buffer_id == SPA_ID_INVALID)
|
|
||||||
return;
|
|
||||||
|
|
||||||
buffer = pw_stream_peek_buffer (priv->pipewire_stream, buffer_id);
|
|
||||||
if (!buffer)
|
if (!buffer)
|
||||||
{
|
{
|
||||||
g_warning ("Failed to peek at PipeWire buffer");
|
g_warning ("Failed to dequeue at PipeWire buffer");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buffer->datas[0].type == priv->pipewire_type->data.MemFd)
|
spa_buffer = buffer->buffer;
|
||||||
|
|
||||||
|
if (spa_buffer->datas[0].data)
|
||||||
{
|
{
|
||||||
map = mmap (NULL, buffer->datas[0].maxsize + buffer->datas[0].mapoffset,
|
data = spa_buffer->datas[0].data;
|
||||||
|
}
|
||||||
|
else if (spa_buffer->datas[0].type == priv->pipewire_type->data.MemFd)
|
||||||
|
{
|
||||||
|
map = mmap (NULL, spa_buffer->datas[0].maxsize + spa_buffer->datas[0].mapoffset,
|
||||||
PROT_READ | PROT_WRITE, MAP_SHARED,
|
PROT_READ | PROT_WRITE, MAP_SHARED,
|
||||||
buffer->datas[0].fd, 0);
|
spa_buffer->datas[0].fd, 0);
|
||||||
if (map == MAP_FAILED)
|
if (map == MAP_FAILED)
|
||||||
{
|
{
|
||||||
g_warning ("Failed to mmap pipewire stream buffer: %s\n",
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
data = SPA_MEMBER (map, buffer->datas[0].mapoffset, uint8_t);
|
data = SPA_MEMBER (map, spa_buffer->datas[0].mapoffset, uint8_t);
|
||||||
}
|
|
||||||
else if (buffer->datas[0].type == priv->pipewire_type->data.MemPtr)
|
|
||||||
{
|
|
||||||
data = buffer->datas[0].data;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
g_warning ("Unhandled spa buffer type: %d", spa_buffer->datas[0].type);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -186,11 +185,11 @@ meta_screen_cast_stream_src_maybe_record_frame (MetaScreenCastStreamSrc *src)
|
|||||||
priv->last_frame_timestamp_us = now_us;
|
priv->last_frame_timestamp_us = now_us;
|
||||||
|
|
||||||
if (map)
|
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
|
static gboolean
|
||||||
@ -267,7 +266,7 @@ on_stream_state_changed (void *data,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
on_stream_format_changed (void *data,
|
on_stream_format_changed (void *data,
|
||||||
struct spa_pod *format)
|
const struct spa_pod *format)
|
||||||
{
|
{
|
||||||
MetaScreenCastStreamSrc *src = data;
|
MetaScreenCastStreamSrc *src = data;
|
||||||
MetaScreenCastStreamSrcPrivate *priv =
|
MetaScreenCastStreamSrcPrivate *priv =
|
||||||
@ -276,7 +275,7 @@ on_stream_format_changed (void *data,
|
|||||||
uint8_t params_buffer[1024];
|
uint8_t params_buffer[1024];
|
||||||
int32_t width, height, stride, size;
|
int32_t width, height, stride, size;
|
||||||
struct spa_pod_builder pod_builder;
|
struct spa_pod_builder pod_builder;
|
||||||
struct spa_pod *params[1];
|
const struct spa_pod *params[1];
|
||||||
const int bpp = 4;
|
const int bpp = 4;
|
||||||
|
|
||||||
if (!format)
|
if (!format)
|
||||||
@ -372,7 +371,8 @@ create_pipewire_stream (MetaScreenCastStreamSrc *src,
|
|||||||
result = pw_stream_connect (pipewire_stream,
|
result = pw_stream_connect (pipewire_stream,
|
||||||
PW_DIRECTION_OUTPUT,
|
PW_DIRECTION_OUTPUT,
|
||||||
NULL,
|
NULL,
|
||||||
PW_STREAM_FLAG_NONE,
|
(PW_STREAM_FLAG_DRIVER |
|
||||||
|
PW_STREAM_FLAG_MAP_BUFFERS),
|
||||||
params, G_N_ELEMENTS (params));
|
params, G_N_ELEMENTS (params));
|
||||||
if (result != 0)
|
if (result != 0)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user