Поделиться через


Обработка In-Place

[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]

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

Для обработки данных на месте клиент выполняет один вызов метода IMediaObjectInPlace::P rocess , а не отдельные вызовы ProcessInput и ProcessOutput. Метод Process является синхронным; вся обработка происходит внутри вызова. Кроме того, при обработке на месте не используются объекты IMediaBuffer . Метод Process принимает указатель непосредственно на буфер памяти.

DMO, поддерживающий обработку на месте, по-прежнему должен реализовывать интерфейс IMediaObject , включая методы ProcessInput и ProcessOutput . Клиент может выбрать, следует ли использовать обработку на месте или отдельные буферы. Однако не следует смешивать два типа обработки. Если вы вызываете Process, не вызывайте ProcessInput или ProcessOutput и наоборот.

Эффект Хвосты

DMO на месте может создать дополнительные выходные данные после остановки ввода. Это называется хвостом эффекта. Например, эффект реверберации продолжается после того, как входные данные достигают тишины. При наличии хвостового фрагмента эффекта метод Process возвращает S_FALSE. После того как приложение обработает все свои данные, оно может создать хвост эффекта, отправляя пустые буферы в метод Process .

Непосредственное размещение DMO