**Who we need and what for:**
We are looking for a C# and VB.NET developer who is also a video\media expert with extensive [login to view URL] experience to work with us in modifying an existing and working (though having several specific flaws and issues) application that captures and plays back media. We are essentially looking for someone who would be interested in continuing to work with us in the near future on a small-project-by-small-project basis in working out the problems with this application. At least in the beginning, and possibly for the whole duration of this campaign, you will not recieve the entire source code to the application, so you will not need to familiarize yourself with thousands of lines of existing code. Instead, we will try as much as possible to have you work on specific modules or new modules from scratch.
**This bid, the first phase:**
The way our application is *currently* structured consists of three tiers. There is the high-level tier, the application layer, where the code of aspects like the GUI lives. There is a low-level tier, the VideoGrabber, that consists of tasks such as capturing snapshots, recording video, and setting various parameters, e.g. brightness, etc... And there is a middle-man tier, "MMediaGrabber" whose functions are called by the application layer and which in turn calls functions from VideoGrabber.
The problem is that the current VideoGrabber is very old code which needs to be scrapped and redone with [login to view URL] in C#. One aspect of this is that it needs to be able to work with any capture card or camera. So your task would be to write a nice [login to view URL] device-independent media capture module that we would have to do little to no changes to the application layer to begin using instead of VideoGrabber. This module must be capable of supporting all the tasks that the MMediaGrabber is currently doing (not that large), hence, we will provide you with the interface (function headers only) to MMediaGrabber. How you choose to implement this is entirely up to you and your [login to view URL] and media wisdom, so long as, again: 1) It is device-independent, 2) It is very easy for us to begin using, 3) You can do everything on the MMediaGrabber interface list.
## Deliverables
**Basic coding guidelines:**
- You should write relatively clean, readable code that any competent developer can understand.
- You should have a reasonable amount of comments. Obviously, you do not have to comment on what i++ does, but you should put a phrase in to explain what a block of code is doing, or any time there is code which you feel might be not obvious.
- Use PascalCase for classes, methods, and class variables. Use camelCase for local variables.
- Use descriptive and suggestive names for functions and variables.