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


Работа с буферами мультимедиа MFT и примерами

Кодеки MFTs передают данные мультимедиа обратно и вперед с помощью буферов мультимедиа и примеров.

Буфер мультимедиа — это COM-объект, который управляет блоком памяти, как правило, для хранения данных мультимедиа. Когда данные передаются в MFT или из него, они всегда передаются в виде медиабуфера.

Все буферы мультимедиа предоставляют интерфейс IMFMediaBuffer. Этот интерфейс предназначен для любого типа данных. Буферы, содержащие видеоданные, часто также предоставляют IMF2DBuffer.

Буфер мультимедиа имеет максимальный размер, который является объемом памяти, выделенной для буфера. Чтобы найти максимальный размер, вызовите IMFMediaBuffer::GetMaxLength. В любой момент времени буфер мультимедиа также имеет текущую длину, которая является объемом допустимых данных в буфере, начиная от нуля байтов до максимального размера. Чтобы получить текущую длину, вызовите IMFMediaBuffer::GetCurrentLength. При создании буфера текущая длина равна нулю. При записи данных в буфер вызовите IMFMediaBuffer::SetCurrentLength, чтобы обновить текущую длину.

Чтобы получить доступ к памяти в буфере, вызовите IMFMediaBuffer::Lock. Этот метод возвращает указатель на начало блока памяти. Когда вы закончите использовать указатель, вызовите IMFMediaBuffer::Unlock. Метод lock не является механизмом синхронизации потоков; Он не гарантирует, что другие потоки не могут получить доступ к буферу. Метод Блокировка используется для обеспечения того, что доступ к памяти останется допустимым, пока вы не вызовете метод Разблокировка.

Образец медиаданных (в контексте Media Foundation SDK) — это объект, содержащий упорядоченный список из нуля или более буферов. Мультимедийные образцы реализуют интерфейс IMFSample.

Чтобы создать новый пример, вызовите функцию MFCreateSample. Изначально список буферов образца пуст. Чтобы добавить буфер в конец списка, вызовите IMFSample::AddBuffer.

работа с кодеками DMO

Работа с Codec MFT