Как мне сделать фильтр веб-камеры вместо видео файла в directshow? - PullRequest
2 голосов
/ 16 мая 2010

Как мне сделать фильтр веб-камеры вместо видео файла? Я смотрю на пример vmr9compositor, включенный в DirectShow SDK. Это делает видео файл. Я хотел бы транслировать поток с веб-камеры. Кажется, что это возможно, но я не очень разбираюсь в directshow.

В настоящее время используется этот вызов метода:

hr = g_graph->RenderFile( pFileName, NULL );

Глядя на пример playcap в sdk, который может отображать канал веб-камеры в окне, я вижу, что он использует

hr = g_pCapture->RenderStream (&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, pSrcFilter, NULL, NULL));

для отображения потока веб-камеры. pSrcFilter - это IBaseFilter.

Как я могу поменять видеофайл в приложении vmr на веб-камеру?

Windows XP, Visual Studio 2008 C ++

Ответы [ 2 ]

2 голосов
/ 17 мая 2010

Перечислите источники веб-камеры (захвата видео) и создайте фильтр источников, используя методы, описанные здесь:

http://msdn.microsoft.com/en-us/library/dd377566%28v=VS.85%29.aspx

Оттуда вы просто подключаете его как исходный фильтр к вашему графику.

Более подробно здесь о захвате видео с помощью DS, здесь. http://msdn.microsoft.com/en-us/library/dd407331%28v=VS.85%29.aspx

0 голосов
/ 17 мая 2010

Я не очень понимаю, что не делает пример playcap. RenderFile является эквивалентом вызова AddSourceFilter, а затем перечисления каждого выходного вывода (используя IEnumPins) и рендеринга каждого вывода. RenderStream - это обертка, которая находит пин-код и затем отображает его. То, что пример playcap делает для вставки исходного фильтра (из моникера захвата) и затем его рендеринга (используя RenderStream), является эквивалентом RenderFile в реальном времени.

...