Как изменить размер буфера рендерера DirectShow, если его входной вывод не поддерживает IAMBufferNegotiation? - PullRequest
1 голос
/ 03 декабря 2011

У меня есть приложение DirectShow, написанное на Delphi 6. Я хочу уменьшить размер буфера рендерера с его текущего значения 500 мс до чего-то меньшего. Проблема в том, что его входной контакт не поддерживает IAMBufferNegotiation, что странно, поскольку средство рендеринга является наушником на моем телефоне VOIP, и ему, очевидно, потребуется меньший размер буфера, чтобы избежать неприятной задержки во время телефонных звонков.

Я попытался проверить петлю в Graph Edit, подключив фильтр захвата VOIP-телефонов (микрофон) к устройству визуализации (наушник). Я знаю, что размер буфера составляет 500 мс, потому что это то, что Graph Edit показывает для свойств рендерера. Тем не менее, когда я использую VOIP-телефон в Skype-звонке, задержка намного короче, примерно на 50-100 миллисекунд, как я и ожидал.

Таким образом, Skype знает, как изменить размер буфера рендерера по умолчанию. Как я могу сделать тот же трюк?

1 Ответ

3 голосов
/ 03 декабря 2011

Выходной контакт обычно отвечает за настройку распределителя, а IAMBufferNegotiation обычно доступен на выходном контакте. Вы хотите уменьшить размер буферов только на выходном выводе фильтра захвата, и он будет генерировать небольшие буферы, которые будут проходить через график, будучи еще небольшими буферами и небольшими порциями данных, поэтому уменьшение размеров буферов в промежуточных фильтрах не является необходимым.

...