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())
-    }
-}