mirror of
https://github.com/brl/mutter.git
synced 2024-11-27 02:20:43 -05:00
screen-cast/stream: Add DMABUF-only record flag
Next commits will reintroduce a certain behavior of stage capturing that can only happen with DMA-BUF buffers. To control this, add a new flag tp MetaScreenCastRecordFlags for this behavior. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2186>
This commit is contained in:
parent
926c34cc89
commit
8fe45d7750
@ -430,15 +430,19 @@ maybe_record_cursor (MetaScreenCastStreamSrc *src,
|
|||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
do_record_frame (MetaScreenCastStreamSrc *src,
|
do_record_frame (MetaScreenCastStreamSrc *src,
|
||||||
|
MetaScreenCastRecordFlag flags,
|
||||||
struct spa_buffer *spa_buffer,
|
struct spa_buffer *spa_buffer,
|
||||||
uint8_t *data,
|
uint8_t *data,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
MetaScreenCastStreamSrcPrivate *priv =
|
MetaScreenCastStreamSrcPrivate *priv =
|
||||||
meta_screen_cast_stream_src_get_instance_private (src);
|
meta_screen_cast_stream_src_get_instance_private (src);
|
||||||
|
gboolean dmabuf_only;
|
||||||
|
|
||||||
if (spa_buffer->datas[0].data ||
|
dmabuf_only = flags & META_SCREEN_CAST_RECORD_FLAG_DMABUF_ONLY;
|
||||||
spa_buffer->datas[0].type == SPA_DATA_MemFd)
|
if (!dmabuf_only &&
|
||||||
|
(spa_buffer->datas[0].data ||
|
||||||
|
spa_buffer->datas[0].type == SPA_DATA_MemFd))
|
||||||
{
|
{
|
||||||
int width = priv->video_format.size.width;
|
int width = priv->video_format.size.width;
|
||||||
int height = priv->video_format.size.height;
|
int height = priv->video_format.size.height;
|
||||||
@ -566,7 +570,7 @@ meta_screen_cast_stream_src_maybe_record_frame (MetaScreenCastStreamSrc *src,
|
|||||||
if (!(flags & META_SCREEN_CAST_RECORD_FLAG_CURSOR_ONLY))
|
if (!(flags & META_SCREEN_CAST_RECORD_FLAG_CURSOR_ONLY))
|
||||||
{
|
{
|
||||||
g_clear_handle_id (&priv->follow_up_frame_source_id, g_source_remove);
|
g_clear_handle_id (&priv->follow_up_frame_source_id, g_source_remove);
|
||||||
if (do_record_frame (src, spa_buffer, data, &error))
|
if (do_record_frame (src, flags, spa_buffer, data, &error))
|
||||||
{
|
{
|
||||||
struct spa_meta_region *spa_meta_video_crop;
|
struct spa_meta_region *spa_meta_video_crop;
|
||||||
|
|
||||||
|
@ -41,6 +41,7 @@ typedef enum _MetaScreenCastRecordFlag
|
|||||||
{
|
{
|
||||||
META_SCREEN_CAST_RECORD_FLAG_NONE = 0,
|
META_SCREEN_CAST_RECORD_FLAG_NONE = 0,
|
||||||
META_SCREEN_CAST_RECORD_FLAG_CURSOR_ONLY = 1 << 0,
|
META_SCREEN_CAST_RECORD_FLAG_CURSOR_ONLY = 1 << 0,
|
||||||
|
META_SCREEN_CAST_RECORD_FLAG_DMABUF_ONLY = 1 << 1,
|
||||||
} MetaScreenCastRecordFlag;
|
} MetaScreenCastRecordFlag;
|
||||||
|
|
||||||
#define META_TYPE_SCREEN_CAST_STREAM_SRC (meta_screen_cast_stream_src_get_type ())
|
#define META_TYPE_SCREEN_CAST_STREAM_SRC (meta_screen_cast_stream_src_get_type ())
|
||||||
|
Loading…
Reference in New Issue
Block a user