This is a kernel module I cooked in a couple of days. The idea is to expose a v4l device that gets its data from user space.
I had 2 use cases in mind:
1) Educational purpose for myself (I'm really a kernel noob).
2) Streaming movies over skype, google talk, ... etc.
The idea could be good or completely rubbish but hey ? Learning can only be done with stupid ideas!
The code is highly unstable. It shouldn't oops the kernel but I'm not responsible. I've been developing and testing it inside qemu.
Clone it from the git repository via:
git clone firstname.lastname@example.org:vcamera/vcamera.git
Here are a few missing bits off the top of my head:
* I'm not following the kernel coding style yet ;-)
* I'm sure my locking, unlocking and concurrency handling is flawed.
* The code is a bit fragile.
* It'd be nice to implement mmap support for the character device. This should eliminate data copies.
* Perhaps expose the character device all the time and generate "fake" frames when streaming starts ? Problem now is one has to be very fast in feeding data to the module otherwise select() on the v4l device will timeout.
* Many more...
If someone finds this idea useful, please drop me a line.
Comments, use cases, ideas and tips are really welcomed!
If I see a lot of interest, I might try to push it to the kernel tree one day ;-)
Update: Seems vloopback already exists and renders my code useless. I might still do something with it as my idea seems a bit simpler but whatever.
Update 2: There's also v4l2loopback and its fork.
- 52797 views
Add new comment