encoder: Export import_picture to separate trait
diff --git a/src/backend/vaapi/encoder.rs b/src/backend/vaapi/encoder.rs
index b33c307..eb882ac 100644
--- a/src/backend/vaapi/encoder.rs
+++ b/src/backend/vaapi/encoder.rs
@@ -28,6 +28,7 @@
 use crate::encoder::stateless::BackendPromise;
 use crate::encoder::stateless::StatelessBackendError;
 use crate::encoder::stateless::StatelessBackendResult;
+use crate::encoder::stateless::StatelessEncoderBackendImport;
 use crate::encoder::stateless::StatelessVideoEncoderBackend;
 use crate::encoder::FrameMetadata;
 use crate::Fourcc;
@@ -170,18 +171,24 @@
     }
 }
 
-impl<M, H> StatelessVideoEncoderBackend<H> for VaapiBackend<M, H>
+impl<M, H> StatelessVideoEncoderBackend for VaapiBackend<M, H>
 where
     M: SurfaceMemoryDescriptor,
     H: std::borrow::Borrow<Surface<M>>,
 {
     type Picture = H;
+}
 
+impl<M, Handle> StatelessEncoderBackendImport<Handle, Handle> for VaapiBackend<M, Handle>
+where
+    M: SurfaceMemoryDescriptor,
+    Handle: std::borrow::Borrow<Surface<M>>,
+{
     fn import_picture(
         &mut self,
         _metadata: &FrameMetadata,
-        handle: H,
-    ) -> StatelessBackendResult<Self::Picture> {
+        handle: Handle,
+    ) -> StatelessBackendResult<Handle> {
         Ok(handle)
     }
 }
diff --git a/src/encoder/stateless.rs b/src/encoder/stateless.rs
index 17b8379..0e2e563 100644
--- a/src/encoder/stateless.rs
+++ b/src/encoder/stateless.rs
@@ -146,22 +146,24 @@
 }
 
 /// Generic trait for stateless encoder backends
-pub trait StatelessVideoEncoderBackend<H> {
+pub trait StatelessVideoEncoderBackend {
     /// Backend's specific representation of the input frame, transformed with [`import_picture`].
     /// Might be a wrapper of the input handle with additional backend specific data or a copy of
     /// an input frame in internal backend's representation.
     ///
-    /// [`import_picture`]: StatelessVideoEncoderBackend::import_picture
+    /// [`import_picture`]: StatelessEncoderBackendImport::import_picture
     type Picture;
+}
 
-    /// Imports the input handle from client and transforms into [`Picture`]
+pub trait StatelessEncoderBackendImport<Handle, Picture> {
+    /// Imports the input [`Handle`] from client and transforms into [`Picture`]
     ///
     /// [`Picture`]: StatelessVideoEncoderBackend::Picture
     fn import_picture(
         &mut self,
         metadata: &FrameMetadata,
-        handle: H,
-    ) -> StatelessBackendResult<Self::Picture>;
+        handle: Handle,
+    ) -> StatelessBackendResult<Picture>;
 }
 
 /// Stateless video encoder interface.
diff --git a/src/encoder/stateless/h264.rs b/src/encoder/stateless/h264.rs
index beca9e9..eae914e 100644
--- a/src/encoder/stateless/h264.rs
+++ b/src/encoder/stateless/h264.rs
@@ -18,6 +18,7 @@
 use crate::encoder::stateless::OutputQueue;
 use crate::encoder::stateless::Predictor;
 use crate::encoder::stateless::StatelessBackendResult;
+use crate::encoder::stateless::StatelessEncoderBackendImport;
 use crate::encoder::stateless::StatelessVideoEncoder;
 use crate::encoder::stateless::StatelessVideoEncoderBackend;
 use crate::encoder::Bitrate;
@@ -188,7 +189,7 @@
 }
 
 /// Trait for stateless encoder backend for H.264
-pub trait StatelessH264EncoderBackend<H>: StatelessVideoEncoderBackend<H> {
+pub trait StatelessH264EncoderBackend: StatelessVideoEncoderBackend {
     type Reference;
     type CodedPromise: BackendPromise<Output = Vec<u8>>;
     type ReconPromise: BackendPromise<Output = Self::Reference>;
@@ -203,7 +204,7 @@
 
 pub struct StatelessEncoder<H, B>
 where
-    B: StatelessH264EncoderBackend<H>,
+    B: StatelessH264EncoderBackend,
     B::Picture: 'static,
     B::Reference: 'static,
 {
@@ -226,11 +227,13 @@
 
     /// [`StatelessH264EncoderBackend`] instance to delegate [`BackendRequest`] to
     backend: B,
+
+    _phantom: std::marker::PhantomData<H>,
 }
 
 impl<H, B> StatelessEncoder<H, B>
 where
-    B: StatelessH264EncoderBackend<H>,
+    B: StatelessH264EncoderBackend,
     B::Picture: 'static,
     B::Reference: 'static,
 {
@@ -246,6 +249,7 @@
             coded_queue: Default::default(),
             output_queue: OutputQueue::new(mode),
             recon_queue: OutputQueue::new(mode),
+            _phantom: Default::default(),
         })
     }
 
@@ -295,7 +299,8 @@
 
 impl<H, B> StatelessVideoEncoder<H> for StatelessEncoder<H, B>
 where
-    B: StatelessH264EncoderBackend<H>,
+    B: StatelessH264EncoderBackend,
+    B: StatelessEncoderBackendImport<H, B::Picture>,
 {
     fn encode(&mut self, metadata: FrameMetadata, handle: H) -> EncodeResult<()> {
         log::trace!(
diff --git a/src/encoder/stateless/h264/vaapi.rs b/src/encoder/stateless/h264/vaapi.rs
index f1c8cc4..137434c 100644
--- a/src/encoder/stateless/h264/vaapi.rs
+++ b/src/encoder/stateless/h264/vaapi.rs
@@ -344,7 +344,7 @@
     }
 }
 
-impl<M, H> StatelessH264EncoderBackend<H> for VaapiBackend<M, H>
+impl<M, H> StatelessH264EncoderBackend for VaapiBackend<M, H>
 where
     M: SurfaceMemoryDescriptor,
     H: Borrow<Surface<M>>,
@@ -476,7 +476,7 @@
     use crate::encoder::stateless::h264::StatelessEncoder;
     use crate::encoder::stateless::simple_encode_loop;
     use crate::encoder::stateless::BackendPromise;
-    use crate::encoder::stateless::StatelessVideoEncoderBackend;
+    use crate::encoder::stateless::StatelessEncoderBackendImport;
     use crate::encoder::FrameMetadata;
     use crate::FrameLayout;
     use crate::PlaneLayout;