Direct3D based DirectShow video renderers – Video Mixing Renderer 9 and Enhanced Video Renderer – have been notoriously known for consuming resources in a way that you can run at most X simultaneously. There has been no comment published on the topic and questions (e.g. like this: How many VMR 9 can a PC support concurrently) remain unanswered for a long time. Video Mixing Renderer 7 was a good alternative for some time in past until it was cut down to be unable to support hardware scaling (thanks Microsoft!). The trendy way to render video nowadays is using Enhanced Video Renderer, a Media Foundation subsystem with an interface into DirectShow to take over state of the art video rendering capabilities. So, how many EVRs one can run simultaneously? Chances are that it is less than one could suppose. The interesting part is that there is no obvious evidence on type of resource running out, which causing next EVR instance to fail to run. And not even run, the failure seem to be coming up at an earlier stage of just connecting pins in stopped state. The failure might be accompanied with errors like E_INVALIDARG, ERROR_FILE_NOT_FOUND, E_UNEXPECTED. The actual limit appear to be loosely correlating to parameters of video output, such as resolution and bitness. Desperately waiting for clarification, I am sharing the tool to estimate the limit:
* multiple EVR instances at once, hosted by multiple windows, which can be distributed across multiple monitors
* choices of resolutions and formats
* a double click on an individual renderer pops up property page set displaying effective frame rate
* 32- and 64-bit versions
Download links
- Partial Visual C++ 2012 source code: Trac, Subversion
- Binaries: Win32 – StressEvr-Win32.exe, x64 – StressEvr-x64.exe
FYI: updated version can do VMR-7 as well