diff options
Diffstat (limited to 'src/backends/meta-screen-cast-stream-src.c')
-rw-r--r-- | src/backends/meta-screen-cast-stream-src.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/src/backends/meta-screen-cast-stream-src.c b/src/backends/meta-screen-cast-stream-src.c index 91a8afab4..94fc222e4 100644 --- a/src/backends/meta-screen-cast-stream-src.c +++ b/src/backends/meta-screen-cast-stream-src.c @@ -107,6 +107,7 @@ typedef struct _MetaScreenCastStreamSrcPrivate int64_t last_frame_timestamp_us; guint follow_up_frame_source_id; + gboolean uses_dma_bufs; GHashTable *dmabuf_handles; cairo_region_t *redraw_clip; @@ -513,15 +514,9 @@ do_record_frame (MetaScreenCastStreamSrc *src, { MetaScreenCastStreamSrcPrivate *priv = meta_screen_cast_stream_src_get_instance_private (src); - gboolean dmabuf_only; - dmabuf_only = flags & META_SCREEN_CAST_RECORD_FLAG_DMABUF_ONLY; - if (dmabuf_only && spa_buffer->datas[0].type != SPA_DATA_DmaBuf) - return FALSE; - - if (!dmabuf_only && - (spa_buffer->datas[0].data || - spa_buffer->datas[0].type == SPA_DATA_MemFd)) + if (spa_buffer->datas[0].data || + spa_buffer->datas[0].type == SPA_DATA_MemFd) { int width = priv->video_format.size.width; int height = priv->video_format.size.height; @@ -1058,6 +1053,8 @@ on_stream_add_buffer (void *data, dmabuf_handle = NULL; } + priv->uses_dma_bufs = !!dmabuf_handle; + if (dmabuf_handle) { meta_topic (META_DEBUG_SCREEN_CAST, @@ -1595,3 +1592,12 @@ meta_screen_cast_stream_src_class_init (MetaScreenCastStreamSrcClass *klass) NULL, NULL, NULL, G_TYPE_NONE, 0); } + +gboolean +meta_screen_cast_stream_src_uses_dma_bufs (MetaScreenCastStreamSrc *src) +{ + MetaScreenCastStreamSrcPrivate *priv = + meta_screen_cast_stream_src_get_instance_private (src); + + return priv->uses_dma_bufs; +} |