diff --git a/src/capture/mod.rs b/src/capture/mod.rs index da4a777..0edaec7 100644 --- a/src/capture/mod.rs +++ b/src/capture/mod.rs @@ -12,7 +12,7 @@ pub enum Frame { DmaBuf { width: u32, height: u32, - format: u32, + format: u32, modifier: u64, fd: RawFd, stride: u32, offset: u32, diff --git a/src/capture/wayland_stream.rs b/src/capture/wayland_stream.rs index 6edbe0b..a2448d4 100644 --- a/src/capture/wayland_stream.rs +++ b/src/capture/wayland_stream.rs @@ -78,7 +78,8 @@ impl PipeWireStream { let frame = Frame::DmaBuf { width: user_data.format.size().width, height: user_data.format.size().height, - format: 0x34325241, // DRM_FORMAT_ARGB8888 + format: 0x34325241, // DRM_FORMAT_ARGB8888 + modifier: user_data.format.modifier(), fd: data.fd(), stride: data.chunk().stride() as u32, offset: data.chunk().offset(), diff --git a/src/encoder.rs b/src/encoder.rs index c8e861e..b3913ef 100644 --- a/src/encoder.rs +++ b/src/encoder.rs @@ -140,13 +140,13 @@ impl VaapiEncoder { av_frame_free(&mut nv12_frame); av_frame_free(&mut bgra_frame); } - Frame::DmaBuf { width: dma_width, height: dma_height, format, fd, stride, offset } => { + Frame::DmaBuf { width: dma_width, height: dma_height, format, modifier, fd, stride, offset } => { let mut drm_desc = AVDRMFrameDescriptor { nb_objects: 1, objects: [AVDRMObjectDescriptor { fd: *fd, size: 0, // usually ignored or mapped by driver - format_modifier: 0, // DRM_FORMAT_MOD_LINEAR (or read from PipeWire format) + format_modifier: *modifier, }, std::mem::zeroed(), std::mem::zeroed(), std::mem::zeroed()], nb_layers: 1, layers: [AVDRMLayerDescriptor {