Menus, options, code generation
- New - open a new empty graph window, other graph windows remain accessible.
- Open - load a graph from .grf file and open in a new window.
- Connect to running - open a new window with a graph from another process registered in ROT
(Running Objects Table). See ***.
- Disconnect from running - disconnect and close the window with remote graph.
- Render file - select a file and build a graph in current graph window that plays the selected file.
- Render URL - same with an URL instead of a local file.
- Save (As) - save the current graph to a .grf file.
- Generate Code - generate C++ or C# code that builds the current graph in your app.
- Save graph as image - make a PNG image with current graph.
Options menu is trivial: there is an on/off option for reference clock of current graph
(described in graph editing part) and items invoking Preferences
and Code templates windows.
- AutoArrange filters - after connecting filters and some other operations arrange filters in the
graph window automatically.
- Suggest URLs for sources and sinks - when adding a filter to a graph, if this filter supports
IFileSourceFilter or IFileSinkFilter interface then a file open/save dialog pops up asking what
file to open or write. However sometimes this should be not a file but URL, so file dialog is not
adequate there. When this option is on, if you press Cancel in the file open/save dialog then another
window will pop up offering to enter some URL or choose one of previously used.
GraphEditPlus can generate source code in C++ and C# for building the graph you created
in it. However this code can look and behave differently depending on your choices in following
settings. First, there are two ways to connect any two filters:
one may use intelligent connect where the code passes both filters to RenderStream()
method and lets it find appropriate pins automatically. This is simple but can lead to inserting
some additional intermediate filters between the two to help with data conversion. Another way
to connect filters is direct connect where generated code will first find proper pins by
their name and them pass them to a method for direct connection. So the options in this window are:
- find pins and connect directly - use direct connect, finding pins by name.
- use RenderStream - intelligent connect.
Another choice is about creating filters outside the basic DirectShow filters category:
capture sources, video compressors, audio effects etc. These filters should not be created
simply by their CLSID like ordinary DirectShow filters. Instead they may be created by enumerating
their category or by their moniker string (display name). The second option is simpler but not too
reliable - on a different machine display name for a similar filter might be different. Creating
them by name is the preferred method, although it means a linear search every time such filter
All these code generation variants and other code snippets from which overall source code gets
built are configurable in "Code templates" window, so if you don't like how error handling is
performed in generated code or how some other things are done, you can modify those snippets once
and this will affect all future generated code.