I've got an embedded Linux project where I need to read video in through a USB port, make some modifications to that video (such as compression), and then send it back to the host via preferably the same USB port. It would also be a preferred feature if we could send commands to change things such as the video compression level from the host to the device.
The host can be assumed to be a desktop running some version of Linux, and the device which actually does this video processing is a Gumstix running embedded Linux.
I'm basically at a lost as to how to start this project or what to research in the division of input/output in Linux. First off, does it sound possible to both read video, write video, and send commands through the same USB port? The video is relatively small, especially after compression by the device, so bandwidth isn't a problem. The main problem is knowing where to start research for this project. Is there anything like TCP/IP for USB where you could open multiple connections between the host and device to transfer data?
Will we have to write our own USB device drivers? Develop our own protocol or does USB support doing multiple things on the same port relatively easily?
Should I begin researching Linux drivers, user level programming and APIs, or the USB protocol? Or something entirely different?
I'm a senior computer engineering student, so my experience level is a mix of programming in C, C++, Java, Verilog, TCL, etc. Almost all socket related programming has been in Java (OS independent) so I really am not sure where to start on writing a Linux application to perform such a task. I've had a decent amount of experience with microprocessor programming (AVR, coldfire), but again despite being close to what I need, it isn't really helping me figure out where to start this.