WebM Project DirectShow Filters
v0.9.10.0 - 2010/08/09
http://www.webmproject.org/
mailto:matthewjheaney@google.com


Summary
   The WebmM Project DirectShow Filters package ("webmdshow") allows you
   to encode and decode VP8 video, and write and read WebM files, all using
   Microsoft DirectShow.


Preliminaries
   A website has been set up to host artifacts associated with the WebM
   project:

      http://www.webmproject.org/

   The actual download page is here:

      http://code.google.com/p/webm/downloads/list

   Look for the "webmdshow-..." link to find the latest version of the
   filters.

   Some mailing lists have been set up to discuss WebM-related issues.
   The main page is here:

      http://www.webmproject.org/about/discuss/

   That page has instructions for subscribing to the lists.  The actual
   lists are hosted here:

      http://lists.webmproject.org/
      http://groups.google.com/a/webmproject.org

   If you find a bug, or there's a feature you want, then please file a
   report using the WebM issue tracking system:

      http://www.webmproject.org/code/bug-reporting/

   You can browse existing issues here:

      http://code.google.com/p/webm/issues/list

   You can create a new issue here:

      http://code.google.com/p/webm/issues/entry

   If you are a developer and would like to build from sources, then
   you can use Git to clone the origin, like this:

     git clone git://review.webmproject.org/webmdshow.git


Installation
   A DirectShow filter is a "COM InProc Server DLL", and so it needs to be
   registered with the system.  The delivery artifacts should include a file
   named "install_webmdshow.exe". Run that installer (either from a command
   prompt, or from a Windows Explorer shell) and it will automatically
   register the filters on your system. The DLLs are placed in the following
   directory:

     C:\Program Files\Common Files\WebM Project\webmdshow

   To uninstall, you can choose the uninstall option from the Add or Remove
   Programs control panel, or run the uninstall_webmdshow.exe in the install
   directory listed above.

   The webmdshow package also includes a couple of simple command-line
   utilities for reading and writing WebM files, that are implemented using the
   Webm DirectShow filters.  The utility PLAYWEBM (playwebm.exe) is for basic
   testing and playback of WebM files, and the utility MAKEWEBM (makewebm.exe)
   is for simple creation of WebM files.  They are not automatically installed
   by the installer, so if you'd like to use them, just extract them from the
   archive and place them in your path.


Description of Microsoft DirectShow and the WebM DirectShow Filters
   Microsoft DirectShow is a framework for manipulation of media streams on
   Windows.  Streams are constructed from "filters" that are connected via
   "pins".  You mix and match different kinds of filters in order to construct
   a stream having the characteristics you desire.

   A WebM file is a container for a video stream encoded as VP8, and an audio
   stream encoded as Vorbis.  The file itself uses the ".webm" file extension.
   The file format is a subset of the Matroska container format, with "webm"
   as the DocType.

   In order to play back WebM files in a DirectShow-based media player (such
   as Windows Media Player), you need a "source" filter that understands the
   format of the file, and "decoder" filters for each stream.

   When a media player attempts to render a file using DirectShow, it looks
   at the file extension to determine whether a source filter has been
   specifically associated with that extension.  When the WEBMSOURCE filter
   (webmsource.dll) is installed, it registers itself as the source filter
   for ".webm" files, so if things are working normally, an instance of that
   source filter will be created automatically by the DirectShow graph builder,
   and the filter will then load the file.

   (Note that this association of a file extension with a DirectShow source
   filter is distinct from the association of a file extension with a
   rendering application. The former is controlled by DirectShow, and the
   latter by the Windows shell.)

   The source filter exposes as many output pins as there are streams in the
   WebM file.  This will typically be one VP8 video stream and one Vorbis
   audio stream.  The WebM VP8DECODER filter (vp8decoder.dll) decodes the
   VP8 video stream, which should be all you need for video rendering.

   To render the audio stream, you'll need a filter that can decode Vorbis
   audio.  I usually just use the FFDShow filter, which is included in the
   Windows Essentials Codec Pack:

      http://www.mediacodec.org/

   The WEBMMUX filter (webmmux.dll) creates ("multiplexes") WebM files.  It
   accepts a VP8-encoded video input stream and a Vorbis-encoded audio input
   stream.  The VP8ENCODER filter (vp8encoder.dll) is used to encode the video,
   and is connected directly to the WEBMUX filter.

   You'll need a filter to compress the audio stream to Vorbis.  You can
   try the filters available from Xiph.org:

      http://xiph.org/dshow/

   It might be useful to have all the filters (both video and audio) necessary
   for Webm muxing and demuxing together in one downloadable package. If you
   think that this would be of interest to the WebM Project community, please
   file a bug report at the link listed above.


Playing WebM Files on Windows using DirectShow
   Once you have installed the WEBMSOURCE filter, VP8DECODER filter, and
   a Vorbis decoder filter, then you should be able to play WebM files in
   any DirectShow-based media player, such as Windows Media Player.

   If you're familiar with DirectShow, you can also build filter graphs
   using GraphEdit or GraphStudio.  (GraphEdit is part of the Windows SDK.)
   The friendly-name of each filter begins with "WebM", so they're listed
   all together in the filter list dialog.

   The webmdshow package also includes a command-line application called
   PLAYWEBM (playwebm.exe) for simple playback of WebM files. In particular
   it is useful for determining whether the necessary DirectShow filters
   for rendering WebM files have been installed on your system.  If you
   can successfully play back the WebM file using PLAYWEBM, then that
   usually indicates that the file can be played back by any other
   DirectShow-based media player.

   The PLAYWEBM command-line swiches can be specified using either short-form
   (single hyphen) or long-form (double hyphen) syntax.  Long forms are
   case-insensitive and may be abbreviated.  Long forms can also be specified
   using Windows-style (forward slash) syntax.

   If you need help, use the --help (or -h) switch, or simply run the
   app without specifying any arguments.  For more detailed information,
   use the --help switch in combination with the --verbose (or -v) switch.

   The WebM input file can be specified as the (only) command-line argument,
   or as the value of the --input (or -i) switch.  If you do not specify
   any other switches, PLAYWEBM uses IGraphBuilder::RenderFile to build the
   graph automatically.  This most closely mimics what other, more general
   DirectShow-based players do to render an arbitrary file (so it's a good
   test of whether your system has been configured correctly).

   If you use the --source (or -s) switch, PLAYWEBM will explicitly create
   an instance of the WEBMSOURCE filter, load the file using that filter,
   and then render each output pin.

   With the --splitter (or -S) switch, PLAYWEBM will load the file using
   the AsyncReader filter, explicitly create an instance of the WEBMSPLIT
   filter, connect the two filters and then render each output pin.

   If you specify the --list (or -l) switch, the app will print the values
   of the command-line arguments, and then immediately terminate.  With the
   --verbose (or -v) switch also specified, the app expands the input file
   name to its full path value.

   Whenever you're in doubt, always try the --list and --verbose options
   together, to verify that PLAYWEM has interpreted the command-line
   argument values as you have intended.

   The --version (or -V) switch is used to print the value of the
   app's version.  If you have a problem with PLAYWEBM, please include
   the app's version value in your bug report.


Authoring WebM Files On Windows Using DirectShow
   The webmdshow package includes a VP8 encoder filter and a WebM muxer
   filter, which enable you to create WebM files by transcoding files
   that are formatted or encoded differently. (A Vorbis encoder filter
   is also available from Xiph.org, as explained above.)

   The package also includes basic utility, MAKEWEBM (makewebm.exe),
   that uses those filters to create WebM files.  If you have all the
   requisite filters for parsing input files and decoding streams,
   then the application should just work.  Specify the name of the
   input file on the command-line and MAKEWEBM will make a WebM file
   with the same basename but with extension ".webm", like this:

      $ makewebm xyz.avi

   This creates file xyz.webm.

   The MAKEWEBM app has a few command-line switches to modify its
   behavior.  The switches are described here, but you can always
   get the list by running MAKEWEBM without any arguments, or by
   specifying the --help (or -h) switch.

   Switches can be specified using short-form syntax (preceded by
   a single hypen), long-form syntax (preceded by a pair of hyphens),
   or using Windows-style syntax (preceded by a forward slash).
   Switches and arguments and can be specified in any order.  Switches
   can be abbrievated, and long-form options are case-insensitive.

   The value for long-form switches can be specified as part of the
   switch itself by separating the switch from the value using an
   equal sign.  If no equal sign is present, then the value stands
   by itself as the next command-line argument.  For example:

      makewebm --input=XYZ.AVI ...
      makewebm --input XYZ.AVI ...

   The value for Windows-style switches can be specified as part of
   the switch itself by separating the switch from the value using
   a colon.  If no colon is present, then the value stands by itself
   as the next command-line argument.  For example:

      makewebm /input:XYZ.AVI ...
      makewebm /input XYZ.AVI ...

   Short-form switches that accept a value require that the value
   appear as the next command-line argument.  The reason is that you're
   allowed to use a long-form spelling for some switches, for example:

      makewebm -i XYZ.AVI  ...
      makewebm -input XYZ.AVI  ...

   Where there is ambiguity among switches (e.g. "/ver"), the precedence
   of switches is determined by their order in the help (usage) display.

   MAKEWEBM requires that the input filename be specified. The input file
   can be specified using the --input (or -i) switch, or as the (first)
   argument.

   The output file can specified using the --output (or -o) switch,
   or as the (second) argument.  This names the resulting WebM file.
   If you don't specify the output filename value explicitly, its value
   is synthesized from the input filename value.  So the following commands
   are all equivalent:

      makewebm -i xyz.avi -o xyz.webm
      makewebm -i xyz.avi xyz.webm
      makewebm xyz.avi -o xyz.webm
      makewebm xyz.avi xyz.webm
      makewebm -i xyz.avi
      makewebm xyz.avi

   MAKEWEBM only transcodes input streams if they aren't encoded as
   VP8 (for video) or Vorbis (for audio).  If a stream already has
   that encoding, then it is connected directly to the WEBMMUX filter
   as is, without being re-encoded.

   If MAKEWEBM needs to encode to Vorbis audio, and it cannot find a
   filter to perform the encoding, then by default it will make a
   WebM file without audio.  If you want the app to terminate if it
   cannot also encode the audio stream, then specify the
   --require-audio switch.

   The --list (or -l) switch will print the values of the command-line
   arguments and switches, without building the actual graph.  If you
   also specify the --verbose (or -v) switch, the input and output
   filenames are expanded to their full paths.

   If you specify the --verbose (or -v) switch (without also specifying
   the --list switch), then as the graph is being built the app prints
   the media subtype and format of the pins being connected.  This is
   helpful for determining exactly how the input streams are encoded.

   The --version (or -V) switch prints the value of the app's version
   resource. If you submit a bug report, please include the version
   value of your copy of the MAKEWEBM app in your report.

   By default, while MAKWEBM is running, it prints the progress of the
   mux by over-writing the same line on standard output.  (The value
   it writes is the current position in the output file, expressed as
   time, in units of seconds.)  This behavior can be changed by
   specifying the --script-mode switch, which causes progress to be
   written to standard output on a new line each time, and in a format
   that is easily parseable.  This switch is intended to be used when
   MAKEWEBM app is being called from within a script that is capturing
   text written to standard output by the app.  See the comments at
   the top of the script VBSMAKEWEBM.VBS that accompanies the delivery
   artifacts for an example of how to use this option.

   The VP8ENCODER filter (vp8encoder.dll) has a custom IDL-based interface
   that enables you to configure the encoding.  MAKEWEBM includes several
   command-line switches that allow you to manipulate the VP8ENCODER
   filter.  Run the MAKEWEBM app with the --help switch to get a complete
   list of switches.  The switches for VP8 encoding match the method names
   in the IDL file for the VP8 encoder.  See the file "vp8encoder.idl"
   among the delivery artifacts (it's in the IDL folder of the source
   tree) for a full description of each configuration parameter.

VP8 Encoder Filter Notes

   The VP8 encoder filter (as with the VP8 encoder library) only accepts
   YUV formats as input.  If you have a file or capture device with
   RGB as output, you'll need a separate filter to convert from RGB to YUV.
   The ffdshow filter will do such a conversion, but it might be disabled
   by default.  To enable it, open the Properties page for the ffdshow
   Video Decoder filter, and under the Codecs menu, find the Raw video item.
   Change the Decoder option so that it's not "disabled" (the values
   "all RGB" or "all supported" both seem to work), and then an instance
   of that filter will be created automatically when RGB-to-YUV conversion
   is required.

   The VP8 encoder also has a property page, so if you're using GraphEdit
   or similar you can modify encoder settings that way.  It works as follows.
   The filter has a settings cache.  When you make a change to a settings
   value (via the IVP8Encoder interface), this actually changes the value in
   the cache. If the graph is stopped, then the settings are applied only
   later (and automatically), during the transition from stopped to paused or
   running. If the graph is not stopped (and you're using the IDL interface
   directly), then you must apply the settings by calling
   IVP8Encoder::ApplySettings. The only settings that are actually applied
   are those settings that have a value that is not "out-of-band", which
   typically means equal or greater than 0.  For settings that haven't been
   set (the cached setting still has its default out-of-band value, -1), then
   the encoder uses the default supplied by the vpx encoder library itself.

   When the property page is first loaded, it queries the cache and displays
   any non-default settings.  Edit controls and combo boxes for settings
   that have a default value are left blank.  When you click on the OK or
   Apply buttons, the property page modifies the cache settings that
   correspond to controls with non-empty values.

   The Clear button on the property page dialog window simply clears
   all of the edit controls.  If you were to Apply the values on the
   page in this state it would have no effect, because there are no controls
   with non-empty values.  This is useful if you want to selectively change
   a value without disturbing values that already exist in the cache.

   The Reload button re-initializes the controls on the dialog window, the
   same as if the property page had been dismissed via the Cancel button
   and then immediately re-created.  This is useful if you've made changes
   to the dialog but decide to throw the values away and start over.

   The Reset button calls IVP8Encoder::ResetSettings to re-initialize
   all of the settings in the cache to their default (out-of-band) values,
   and sets the controls to empty values.  This has the effect of throwing
   away settings in the cache and starting over.
