diff --git a/libs/v4l2r/src/ioctl/dqbuf.rs b/libs/v4l2r/src/ioctl/dqbuf.rs index 30ef05c3..14d4b30b 100644 --- a/libs/v4l2r/src/ioctl/dqbuf.rs +++ b/libs/v4l2r/src/ioctl/dqbuf.rs @@ -2,6 +2,7 @@ use crate::ioctl::ioctl_and_convert; use crate::ioctl::IoctlConvertError; use crate::ioctl::IoctlConvertResult; use crate::ioctl::UncheckedV4l2Buffer; +use crate::memory::MemoryType; use crate::QueueType; use std::convert::TryFrom; @@ -51,12 +52,13 @@ pub type DqBufError = IoctlConvertError; pub type DqBufResult = IoctlConvertResult; /// Safe wrapper around the `VIDIOC_DQBUF` ioctl. -pub fn dqbuf(fd: &impl AsRawFd, queue: QueueType) -> DqBufResult +pub fn dqbuf(fd: &impl AsRawFd, queue: QueueType, memory: MemoryType) -> DqBufResult where O: TryFrom, O::Error: std::fmt::Debug, { let mut v4l2_buf = UncheckedV4l2Buffer::new_for_querybuf(queue, None); + v4l2_buf.0.memory = memory as u32; ioctl_and_convert( unsafe { ioctl::vidioc_dqbuf(fd.as_raw_fd(), v4l2_buf.as_mut()) } diff --git a/src/video/capture/linux.rs b/src/video/capture/linux.rs index e6a67212..210153ed 100644 --- a/src/video/capture/linux.rs +++ b/src/video/capture/linux.rs @@ -376,7 +376,7 @@ impl CaptureStream { pub fn next_into(&mut self, dst: &mut Vec) -> io::Result { self.wait_ready()?; - let dqbuf: V4l2Buffer = ioctl::dqbuf(&self.fd, self.queue) + let dqbuf: V4l2Buffer = ioctl::dqbuf(&self.fd, self.queue, MemoryType::Mmap) .map_err(|e| io::Error::other(format!("dqbuf failed: {}", e)))?; let index = dqbuf.as_v4l2_buffer().index as usize; let sequence = dqbuf.as_v4l2_buffer().sequence as u64;