Работа с буферами мультимедиа MFT и примерами
Кодеки MFT передают данные мультимедиа взад и вперед с помощью буферов мультимедиа и примеров.
Буфер мультимедиа — это COM-объект, который управляет блоком памяти, как правило, для хранения данных мультимедиа. Когда данные передаются в или из MFT, они всегда передаются в виде буфера мультимедиа.
Все буферы мультимедиа предоставляют интерфейс IMFMediaBuffer . Этот интерфейс предназначен для любого типа данных. Буферы, содержащие видеоданные, часто также предоставляют доступ к ФУНКЦИИ IMF2DBuffer.
Буфер мультимедиа имеет максимальный размер, который представляет собой объем памяти, выделенный для буфера. Чтобы найти максимальный размер, вызовите IMFMediaBuffer::GetMaxLength. В любой момент времени буфер мультимедиа также имеет текущую длину, которая представляет собой объем допустимых данных в буфере, от нуля до максимального размера. Чтобы получить текущую длину, позвоните по телефону IMFMediaBuffer::GetCurrentLength. При создании буфера текущая длина равна нулю. При записи данных в буфер вызовите IMFMediaBuffer::SetCurrentLength , чтобы обновить текущую длину.
Чтобы получить доступ к памяти в буфере, вызовите IMFMediaBuffer::Lock. Этот метод возвращает указатель на начало блока памяти. Завершив работу с указателем, вызовите IMFMediaBuffer::Unlock. Метод Lock не является механизмом синхронизации потоков; это не гарантирует, что другие потоки не смогут получить доступ к буферу. Метод Lock используется для обеспечения того, чтобы доступная память оставалась действительной до тех пор, пока вы не вызовете метод Unlock .
Пример объекта мультимедиа (в контексте пакета SDK Media Foundation) — это объект, содержащий упорядоченный список из нуля или более буферов. Примеры мультимедиа предоставляют интерфейс IMFSample .
Чтобы создать новый пример, вызовите функцию MFCreateSample . Изначально список буферов примера пуст. Чтобы добавить буфер в конец списка, вызовите IMFSample::AddBuffer.
Связанные темы