diff --git a/src/backends/meta-screen-cast-stream-src.c b/src/backends/meta-screen-cast-stream-src.c index 5d3440e5d..39c688d78 100644 --- a/src/backends/meta-screen-cast-stream-src.c +++ b/src/backends/meta-screen-cast-stream-src.c @@ -747,10 +747,17 @@ on_stream_add_buffer (void *data, spa_data[0].maxsize = stride * priv->video_format.size.height; spa_data[0].data = NULL; - dmabuf_handle = - meta_screen_cast_create_dma_buf_handle (screen_cast, - priv->video_format.size.width, - priv->video_format.size.height); + if (spa_data[0].type & (1 << SPA_DATA_DmaBuf)) + { + dmabuf_handle = + meta_screen_cast_create_dma_buf_handle (screen_cast, + priv->video_format.size.width, + priv->video_format.size.height); + } + else + { + dmabuf_handle = NULL; + } if (dmabuf_handle) { @@ -766,6 +773,13 @@ on_stream_add_buffer (void *data, { unsigned int seals; + if (!(spa_data[0].type & (1 << SPA_DATA_MemFd))) + { + g_critical ("No supported PipeWire stream buffer data type could " + "be negotiated"); + return; + } + /* Fallback to a memfd buffer */ spa_data[0].type = SPA_DATA_MemFd; spa_data[0].flags = SPA_DATA_FLAG_READWRITE;