memory: move HandlesProvider to queue
These only make sense to be used in the context of a queue.
diff --git a/lib/examples/fwht_decoder/main.rs b/lib/examples/fwht_decoder/main.rs
index 7f297a6..f8b434b 100644
--- a/lib/examples/fwht_decoder/main.rs
+++ b/lib/examples/fwht_decoder/main.rs
@@ -22,11 +22,12 @@
use v4l2::{decoder::stateful::GetBufferError, QueueType};
use v4l2::{
decoder::{format::fwht::FwhtFrameParser, stateful::SetCaptureFormatRet},
- device::queue::{qbuf::OutputQueueable, FormatBuilder},
- memory::{
- pooled_provider::{PooledHandles, PooledHandlesProvider},
- MemoryType, UserPtrHandle,
+ device::queue::{
+ handles_provider::{PooledHandles, PooledHandlesProvider},
+ qbuf::OutputQueueable,
+ FormatBuilder,
},
+ memory::{MemoryType, UserPtrHandle},
};
use clap::{App, Arg};
diff --git a/lib/examples/fwht_encoder/main.rs b/lib/examples/fwht_encoder/main.rs
index b1139f6..e37655e 100644
--- a/lib/examples/fwht_encoder/main.rs
+++ b/lib/examples/fwht_encoder/main.rs
@@ -12,10 +12,11 @@
direction::Capture,
dqbuf::DQBuffer,
generic::{GenericBufferHandles, GenericQBuffer, GenericSupportedMemoryType},
+ handles_provider::MMAPProvider,
qbuf::OutputQueueable,
},
encoder::*,
- memory::{MMAPHandle, MMAPProvider, UserPtrHandle},
+ memory::{MMAPHandle, UserPtrHandle},
Format, QueueType,
};
diff --git a/lib/src/decoder/stateful.rs b/lib/src/decoder/stateful.rs
index 8b75ec7..a4bb9b4 100644
--- a/lib/src/decoder/stateful.rs
+++ b/lib/src/decoder/stateful.rs
@@ -6,6 +6,7 @@
direction::{Capture, Output},
dqbuf::DQBuffer,
generic::{GenericBufferHandles, GenericQBuffer},
+ handles_provider::HandlesProvider,
qbuf::{
get_free::{GetFreeBufferError, GetFreeCaptureBuffer, GetFreeOutputBuffer},
CaptureQueueable, QBuffer,
@@ -16,7 +17,7 @@
AllocatedQueue, Device, DeviceConfig, DeviceOpenError, Stream, TryDequeue,
},
ioctl::{self, subscribe_event, BufferCapabilities, FormatFlags, StreamOnError},
- memory::{BufferHandles, HandlesProvider, PrimitiveBufferHandles},
+ memory::{BufferHandles, PrimitiveBufferHandles},
Format,
};
diff --git a/lib/src/device/queue.rs b/lib/src/device/queue.rs
index 356b86f..9bea70a 100644
--- a/lib/src/device/queue.rs
+++ b/lib/src/device/queue.rs
@@ -1,6 +1,7 @@
pub mod direction;
pub mod dqbuf;
pub mod generic;
+pub mod handles_provider;
pub mod qbuf;
pub mod states;
diff --git a/lib/src/memory/pooled_provider.rs b/lib/src/device/queue/handles_provider.rs
similarity index 81%
rename from lib/src/memory/pooled_provider.rs
rename to lib/src/device/queue/handles_provider.rs
index c3b50cc..01f2051 100644
--- a/lib/src/memory/pooled_provider.rs
+++ b/lib/src/device/queue/handles_provider.rs
@@ -4,11 +4,33 @@
sync::{Arc, Mutex, Weak},
};
-use crate::bindings;
+use crate::{
+ bindings,
+ memory::{BufferHandles, MMAPHandle, PrimitiveBufferHandles},
+ Format,
+};
-use super::{BufferHandles, PrimitiveBufferHandles, UserPtrHandle};
+pub trait HandlesProvider: Send + 'static {
+ type HandleType: BufferHandles;
-pub type UserBufferHandles<T> = Vec<UserPtrHandle<T>>;
+ fn get_handles(&mut self) -> Option<Self::HandleType>;
+}
+
+pub struct MMAPProvider(Vec<MMAPHandle>);
+
+impl MMAPProvider {
+ pub fn new(format: &Format) -> Self {
+ Self(vec![Default::default(); format.plane_fmt.len()])
+ }
+}
+
+impl HandlesProvider for MMAPProvider {
+ type HandleType = Vec<MMAPHandle>;
+
+ fn get_handles(&mut self) -> Option<Self::HandleType> {
+ Some(self.0.clone())
+ }
+}
/// A handles provider that recycles buffers from a fixed set in a pool.
/// Provided `PooledHandles` will not be recycled for as long as the instance is
@@ -27,7 +49,7 @@
}
}
-impl<H: BufferHandles> super::HandlesProvider for PooledHandlesProvider<H> {
+impl<H: BufferHandles> HandlesProvider for PooledHandlesProvider<H> {
type HandleType = PooledHandles<H>;
fn get_handles(&mut self) -> Option<PooledHandles<H>> {
diff --git a/lib/src/encoder.rs b/lib/src/encoder.rs
index c641298..127e485 100644
--- a/lib/src/encoder.rs
+++ b/lib/src/encoder.rs
@@ -5,6 +5,7 @@
direction::{Capture, Output},
dqbuf::DQBuffer,
generic::{GenericBufferHandles, GenericQBuffer},
+ handles_provider::HandlesProvider,
qbuf::get_free::{GetFreeBufferError, GetFreeCaptureBuffer, GetFreeOutputBuffer},
qbuf::{CaptureQueueable, QBuffer},
BuffersAllocated, CanceledBuffer, CreateQueueError, FormatBuilder, Queue, QueueInit,
@@ -13,7 +14,7 @@
AllocatedQueue, Device, DeviceConfig, DeviceOpenError, Stream, TryDequeue,
},
ioctl::{self, BufferFlags, DQBufError, EncoderCommand, FormatFlags, GFmtError},
- memory::{BufferHandles, HandlesProvider, PrimitiveBufferHandles},
+ memory::{BufferHandles, PrimitiveBufferHandles},
Format,
};
diff --git a/lib/src/memory.rs b/lib/src/memory.rs
index 8b2ac0b..8f72579 100644
--- a/lib/src/memory.rs
+++ b/lib/src/memory.rs
@@ -36,8 +36,6 @@
pub use mmap::*;
pub use userptr::*;
-pub mod pooled_provider;
-
use crate::{
bindings,
ioctl::{PlaneMapping, QueryBufPlane},
@@ -134,9 +132,3 @@
type HandleType = P;
const MEMORY_TYPE: Self::SupportedMemoryType = P::Memory::MEMORY_TYPE;
}
-
-pub trait HandlesProvider: Send + 'static {
- type HandleType: BufferHandles;
-
- fn get_handles(&mut self) -> Option<Self::HandleType>;
-}
diff --git a/lib/src/memory/mmap.rs b/lib/src/memory/mmap.rs
index 74480f0..91818ba 100644
--- a/lib/src/memory/mmap.rs
+++ b/lib/src/memory/mmap.rs
@@ -1,6 +1,6 @@
//! Operations specific to MMAP-type buffers.
use super::*;
-use crate::{bindings, ioctl, Format};
+use crate::{bindings, ioctl};
use std::fmt::Debug;
#[derive(Default)]
@@ -30,19 +30,3 @@
Some(ioctl::mmap(device, plane_info.mem_offset, plane_info.length).ok()?)
}
}
-
-pub struct MMAPProvider(Vec<MMAPHandle>);
-
-impl MMAPProvider {
- pub fn new(format: &Format) -> Self {
- Self(vec![Default::default(); format.plane_fmt.len()])
- }
-}
-
-impl super::HandlesProvider for MMAPProvider {
- type HandleType = Vec<MMAPHandle>;
-
- fn get_handles(&mut self) -> Option<Self::HandleType> {
- Some(self.0.clone())
- }
-}