One of my favourite features in Windows Movie Maker 2.1 is something that we internally called “Filter Resiliency”. As many of you probably know Movie Maker is based on DirectShow. DirectShow works by using a bunch of DirectShow filters that are registered on your system. Each filter can tell the system what types of video and/or audio it can handle. These filters are connected together in what is called a DirectShow graph, and as they’re connected the filters agree with each other on what type of video or audio data is passed between them. This Introduction to DirectShow Application Programming from MSDN gives some more information for those that want further details.
There are many other applications out there that are also based upon DirectShow and when they are installed they register their DirectShow filters with the system. There are times this can cause problems with MovieMaker and in some cases can even cause Movie Maker to crash. How? I here you ask. Well let me try to explain what happens.
Let’s say you select a video clip in your collection. When this happens Movie Maker will cue up the video for that clip in the preview window. To do this Movie Maker builds a DirectShow graph. The following is rather simplified but this is roughly what happens.
1. It creates a new empty DirectShow graph.
2. It asks DirectShow to add the necessary filter to the graph which can read in the file from the disk and output its video and audio data. This is called the File Source filter.
3. Movie Maker asks DirectShow to render each of the outputs of this filter. A video renderer filter will be created that will display the video on the screen and an audio renderer filter will be created that sends the audio to the soundcard. Once created and added to the graph then these filters will be connected to the file source filter.
To connect the file source filter to the output renderer filters, DirectShow needs to work out which filter or combinations of filters can be used to convert the type of video and audio from the file source filter. It does this by looking at the filters that are registered on the system and seeing what video / audio types each of them supports. When it looks for a filter with a certain media type it tries them in the order of merit. If a third party registers a DirectShow filter with a high enough merit (and the video or audio types match what is being looked for) then the filter will be placed into the graph that is being created by MovieMaker. Normally this isn’t a problem but certain filters only work well with the application that they’re installed with and can cause a crash within MovieMaker when they’re loaded into our graph.
If MovieMaker does crash because of a third party filter then one way to fix this is to unregister the offending filter, but this has a couple of disadvantages. First, it may not be obvious which is the actual filter that’s causing the problem, and second you could end up breaking the third party application which is probably relying on its filter being registered.
To combat this problem in MovieMaker 2.1 we added a feature which monitors which DirectShow filters are loaded into our DirectShow graphs. Any filter we don’t know about, we store in a list. This list can be showed if you select Tools…Options from the menu and select the Compatibility tab.
Here is what the dialog looks like on my machine.
You can see that I have an InterVideo Audio Decoder DirectShow filter on my system, but it’s not causing me any problems so I’ve left the checkbox alone.
However if you have been having problem with MovieMaker crashing you can go to this tab and try unselecting the filters. When you do this we’ll intercept the creation of the filters that have been unchecked and cause the creation to fail so it never gets loaded into our DirectShow graph, thereby preventing the crash. The beauty of this approach is that this only happens within the MovieMaker application so any third party application installed with the filter will continue to work as normal.
Well hopefully some of this makes sense and has shed a little light on some of the workings of MovieMaker and the reason behind this new option.