I assume you are using VMR with multiple input pins. VMR will be displayed on one surface, which should be on one display. You should be able to transfer your threads to multiple VMRs, with each VMR being placed on a separate display in your maximum window.
It sounds as if you have all the threads in one chart. You can divide them into different graphs, with each graph having one source and one renderer. Running graphs in synchronization means using IMediaFilter :: Run instead of IMediaControl :: Run:
- Select one graph as a wizard.
- Make sure the wizard has a watch. This is usually done with an active action, but you can make it happen earlier by calling SetDefaultSyncSource on the chart.
- Request graphs for IMediaFilter, get the clock from the main graph using GetSyncSource and transfer it to other graphs using SetSyncSource.
- Pause all schedules.
- Wait until GetState returns S_OK (pause completed).
- Get the time from the graph and add 10 ms or so.
- Call IMediaFilter :: execute on all graphs, skipping this time (now + 10 ms) as a parameter.
Geraint davies
source share