An interesting find about
CLSID_FilterGraphNoThread version of DirectShow fitler graph implementation is that its
WaitForCompletion method available through
IMediaEventEx interfaces is not implemented: the immediately returned value is
CLSID_FilterGraphNoThread itself is not well documented and is rather a spin off the baseline implementation (which is – my guess would be – was introduced at some later stage and was necessary for windowless filter graphs running in worker threads; perhaps Windows Media Player team requested this at some point of WMP development):
… creates the Filter Graph Manager on the application’s thread. If you use this CLSID, the thread that calls CoCreateInstance must have a message loop that dispatches messages; otherwise, deadlocks can occur. Also, before the application thread exits, it must release the Filter Graph Manager and all graph objects (such as filters, pins, reference clocks, and so forth).
The filter graph does not have its internal worker window and is unable to wait for completion in its usual manner. Hence the error. Those who are using
CLSID_FilterGraphNoThread version of the filter graphs are supposed to handle
EC_COMPLETE events to detect the completion.
I suppose it is not intended and not even somehow foreseen behavior, but who uses
CLSID_FilterGraphNoThread anyway except Windows Media Player and those who can cope with the problem.