Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Входные данные передаются в кодеки DMO с помощью медиабуферов. Буфер мультимедиа — это объект, реализующий интерфейс IMediaBuffer. Вы можете реализовать класс для этой цели или, если вы используете пакет SDK для формата Windows Media в приложении, можно использовать объекты буфера, определенные в этом пакете SDK.
Если вы реализуете собственный класс буфера, будьте осторожны с тем, как обрабатывается буферная память. При передаче входного примера DMO сохраняет ссылку на буфер, пока не завершит обработку этого примера. Вы можете немедленно освободить ссылку на интерфейс IMediaBuffer, но у вас нет способа выяснить, когда кодек больше не нуждается в данной ссылке. Чтобы убедиться, что память освобождается при удалении объекта, необходимо реализовать класс, чтобы он выделяет и освобождает память для буфера внутри него.
Поскольку DMOs хранят ссылки на буферы в течение неопределённого времени, использование ограниченного пула буферов может оказаться нетривиальной задачей. Самым простым решением является выделение нового буфера для каждого примера, хотя это неэффективно.
Лучше всего реализовать объект для управления пулом буферов. Для этого напишите код в методе выпуска реализации IMediaBuffer, которая вызывает метод диспетчера буферов (вместо удаления), когда счетчик ссылок удаляется до нуля. Затем диспетчер буферов может поддерживать список указателей на выделенные объекты буфера. Создайте метод в диспетчере буферов, чтобы проверить список свободных буферов и вернуть указатель, чтобы приложение получите доступ к буферам при необходимости. Этот метод должен создавать новые буферы по мере необходимости и добавлять их в список.
Связанные разделы