Могу ли я рассчитывать на возможность совместного использования фильтра захвата DirectShow между графиками фильтров? - PullRequest
1 голос
/ 20 ноября 2011

Сегодня я провел тест с графиком DirectShow, который я собрал, и в верхней части графика был назначен фильтр захвата для моего телефона VOIP.Приложение берет звук из фильтра захвата и записывает файл WAV, как часть операций графа фильтра.Из любопытства я запустил две копии программы, ожидая, что одна из них выдаст ошибку с жалобой на то, что устройство захвата «используется».К моему большому удивлению, обе копии программы работали нормально, и каждая из них создала свой собственный WAV-файл с записанным аудио.Звук в обоих файлах был плавным и без проблем, и он был близок друг к другу в отношении содержащихся аудиоданных.

Можно ли рассчитывать на все фильтры захвата DirectShow, чтобы продемонстрировать возможность совместного использования между несколькими графиками фильтров?Или каждое устройство / драйвер отличается?

1 Ответ

2 голосов
/ 20 ноября 2011

Если экземпляры фильтра не разделяют внутри себя какие-либо ресурсы исключительного доступа (например, оборудование, определенные порты TCP и т. Д.), Вы можете дублировать их в рамках процесса или нескольких процессов. Это не означает, что конкретный фильтр будет активен только в одном экземпляре во всей системе.

Важный пример:

  • USB-захват видео: устройство захвата видео обычно предназначено для использования только одним приложением, поэтому, как только оно активно, оно блокируется, никакое другое приложение или экземпляр фильтра не может захватить с него

  • Воспроизведение аудио: популярный API пользовательского режима для аудио - это слой поверх реальной реализации воспроизведения, внутри драйвер смешивает аудио из множества приложений с поддержкой аудио; поэтому при воспроизведении аудио исключительная блокировка не используется, поскольку устройство фактически используется совместно приложениями, а вокруг выполняется код, который прозрачно объединяет аудио из приложений.

...