diff --git a/.gitignore b/.gitignore
index 96ef6c0..7a53b1c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,4 @@
/target
Cargo.lock
+
+.idea
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/modules.xml b/.idea/modules.xml
deleted file mode 100644
index d4f3698..0000000
--- a/.idea/modules.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/nokhwa.iml b/.idea/nokhwa.iml
deleted file mode 100644
index f07c8a0..0000000
--- a/.idea/nokhwa.iml
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
deleted file mode 100644
index 35eb1dd..0000000
--- a/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/backends/capture/mod.rs b/src/backends/capture/mod.rs
index 33863ca..8845898 100644
--- a/src/backends/capture/mod.rs
+++ b/src/backends/capture/mod.rs
@@ -1,4 +1,8 @@
#[cfg(feature = "input_v4l")]
-pub mod v4l2;
+mod v4l2;
+#[cfg(feature = "input_v4l")]
+pub use v4l2::V4LCaptureDevice;
#[cfg(feature = "input_uvc")]
-pub mod uvc;
\ No newline at end of file
+mod uvc_backend;
+#[cfg(feature = "input_uvc")]
+pub use uvc_backend::UVCCaptureDevice;
diff --git a/src/backends/capture/uvc.rs b/src/backends/capture/uvc.rs
deleted file mode 100644
index 9b0460a..0000000
--- a/src/backends/capture/uvc.rs
+++ /dev/null
@@ -1,209 +0,0 @@
-use crate::{CameraFormat, CameraInfo, CaptureBackendTrait, FrameFormat, NokhwaError, Resolution};
-use flume::{Receiver, Sender};
-use image::{ImageBuffer, Rgb};
-use ouroboros::self_referencing;
-use std::{
- collections::HashMap,
- sync::{atomic::AtomicUsize, Arc},
-};
-use uvc::{ActiveStream, Context, Device, DeviceHandle, DeviceList, Error, StreamHandle};
-
-// ignore the IDE, this compiles
-/// The backend struct that interfaces with libuvc.
-/// To see what this does, please see [`CaptureBackendTrait`]
-/// # Quirks
-/// The indexing for this backend is based off of `libuvc`'s device ordering, not the OS.
-/// You must call [`UVCCaptureDevice::create()`] instead of [`UVCCaptureDevice::new()`], some methods are auto-generated by the self-referencer and are not meant to be used.
-/// # Safety
-/// This backend requires use of `unsafe` due to the self-referencing structs involved.
-#[self_referencing(chain_hack, no_doc)]
-pub struct UVCCaptureDevice<'a> {
- camera_format: Option,
- camera_info: CameraInfo,
- frame_receiver: Box>>,
- frame_sender: Box>>,
- context: Box>,
- #[borrows(context)]
- #[not_covariant]
- device: Box>,
- #[borrows(device)]
- #[not_covariant]
- device_handle: Box