Это не тривиальное упражнение, но оно может быть выполнено.Я знаю, потому что я сделал это раньше.:)
Я реализовал это в C ++.
Что вам нужно сделать, это создать так называемый сервер с общей памятью.Сервер общей памяти - это область оперативной памяти, к которой могут обращаться несколько процессов.Вот как создать ее, используя именованную общую память под Windows:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa366551(v=vs.85).aspx
В вашем приложении, которое смешивает видео с двух камер, необходимо создать фильтр рендеринга DirectShow (CBaseRenderer)который записывает смешанный видеокадр в эту общую память.
С другой стороны, вам нужно создать отдельный проект DLL Visual Studio, который будет реализовывать фильтр захвата DirectShow (CSource и CSourceStream), который будет читать растровые изображения видео.Ваше основное приложение записывает в этот буфер.Этот проект VS должен быть регистрируемой библиотекой DLL, которую можно вызвать для регистрации в качестве устройства захвата DirectShow для Windows.
Ваше основное приложение будет создавать и поддерживать этот буфер совместно используемой памяти, когда оно будет работать.Если другое приложение (например, программа видеоконференцсвязи) получает доступ к устройству захвата, все, что будет поступать с устройства, будет пустым буфером до тех пор, пока основное приложение не начнет загружать в него реальные видеокадры.
Совет № 1: Посколькуэто многопоточная операция, вам понадобится дескриптор события, чтобы сообщить фильтру захвата о готовности кадра.Вам также понадобится мьютекс для управления доступом к буферу с помощью потока «рендеринга» в вашем приложении и потока «захвата» в устройстве захвата.
Совет № 2: вам не нужно будет вызывать UnmapViewOfFileили CloseHandle для указателей памяти до тех пор, пока не будут удалены фильтры рендеринга или захвата.
Существует много кода, который вам нужно будет отшлифовать, поэтому любые полезные примеры будут выходить за рамки этого обсуждения.Это должно привести вас в правильном направлении.Удачи!