Fix NV12 data type

When the DirectShow format was set to YV12, it would incorrectly
interpret it as NV12.  YV12 is actually I420 but with the chroma
channels swapped.
Fix a bug with an error message

Passing an std::string as a printf parameter won't work.  You have to
call std::string::c_str() to be able to properly use it in this case,
although printf-type functions do not have any type checking for this
(at least on terrible microsoft compilers), so it's easy to
inadvertently pass it as std::string.
Fix a bug with normal capture devices

A while back I set regular device capturing to directly connect to the
capture filter rather than use the smart connection.  I thought that the
smart connecting was putting in filters unnecessarily.  However,
smart connect would automatically add crossbars, which I didn't realize
were required for some devices to function (i.e. all non-webcam
devices).

The direct filter connecting here wasn't even really something that was
needed, I just did it because I thought it would be better because those
tee filters kept getting automatically inserted for some reason.  Was
sort of an unneeded change from the beginning.

This just reverts that change and uses the RenderStream function again
instead.  Shouldn't have tried to fix something that wasn't broken.
Add CreateFilterGraph function

This function puts the graph creation in to a separate function.
Reasoning behind this is because I plan on using this for other files
later on, and it would be bad to have duplicated code.
Add 'LogFilters' function

Separates out the filter logging code so it can be used in other areas
later on.
Allow empty names when finding filters

Most devices have two primary values to determine which device it is,
its name, and its device path.  Before, you would have to always provide
both a name and a path to find the requested filter, now only a path is
required.  Makes using the library a little bit less of a pain, as the
name is usually not needed.
Fix encoded device resolution bug

Accidentally used height for width and vise versa for the media type
information for encoded devices.
Fix typo: 'ConnecEncodedFilters'
Add YV12 video format
Add output filter

An output filter allows us to be able to output data to other filters.
Add support for DirectShow h264 hardware encoders

This allows certain types of Avermedia devices (C985 and C353) to be
used as actual h264 encoders.  These devices are pretty nifty, though
somewhat limited in use.  For example, they have a 720p limit, they have
a low GOP size limit, you can't select whether to use VBR or CBR, you
don't really have any options at all other than the framerate and
resolution.  Bitrate limit is 60000kb/s on both devices.

However they're quite nice at least for recording if not streaming, it's
another option to totally reduce CPU usage, so it's worth the effort.