структура MFT_OUTPUT_DATA_BUFFER (mftransform.h)
Содержит сведения о выходном буфере для преобразования Media Foundation. Эта структура используется в методе IMFTransform::P rocessOutput .
Синтаксис
typedef struct _MFT_OUTPUT_DATA_BUFFER {
DWORD dwStreamID;
IMFSample *pSample;
DWORD dwStatus;
IMFCollection *pEvents;
} MFT_OUTPUT_DATA_BUFFER, *PMFT_OUTPUT_DATA_BUFFER;
Члены
dwStreamID
Идентификатор выходного потока. Перед вызовом ProcessOutput задайте для этого элемента допустимый идентификатор потока.
Исключение. Если метод IMFTransform::GetStreamIDs возвращает E_NOTIMPL, MFT игнорирует этот элемент и использует индексы массива pOutputSamples в методе ProcessOutput в качестве идентификаторов потока. Другими словами, он использует первый элемент массива для потока 0, второй для потока 1 и т. д. В этом случае рекомендуется (но не обязательно), чтобы вызывающий объект установил значение dwStreamID , равное индексу массива.
pSample
Указатель на интерфейс IMFSample . Перед вызовом ProcessOutput установите для этого элемента значение допустимого указателя IMFSample или NULL. Дополнительные сведения см. в разделе "Примечания".
dwStatus
Перед вызовом ProcessOutput установите для этого элемента нулевое значение. При возврате метода MFT может задать элемент, равный значению из перечисления _MFT_OUTPUT_DATA_BUFFER_FLAGS . В противном случае MFT оставляет этот элемент равным нулю.
pEvents
Перед вызовом ProcessOutput задайте для этого элемента значение NULL. В выходных данных MFT может задать для этого элемента допустимый указатель интерфейса IMFCollection . Указатель представляет объект collecton, содержащий ноль или более событий. Чтобы получить каждое событие, вызовите IMFCollection::GetElement и запросите возвращенный указатель IUnknown для интерфейса IMFMediaEvent . При возврате метода ProcessOutput вызывающий объект отвечает за освобождение указателя IMFCollection , если указатель не равен NULL.
Комментарии
Необходимо указать структуру MFT_OUTPUT_DATA_BUFFER для каждого выбранного выходного потока.
MFT могут поддерживать две различные модели распределения для выходных примеров:
- MFT выделяет выходной пример.
- Клиент выделяет пример выходных данных.
Flag | Модель распределения |
---|---|
MFT_OUTPUT_STREAM_PROVIDES_SAMPLES | MFT выделяет выходные примеры для потока. Присвойте pSample значение NULL для этого потока. |
MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES | MFT поддерживает обе модели выделения. |
Ни то, ни (по умолчанию) | Клиент должен выделить выходные примеры для потока. |
Поведение ProcessOutput зависит от начального значения pSample и значения параметра dwFlags в методе ProcessOutput .
-
Если pSample имеет значение NULL , а dwFlags содержит флаг MFT_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER, MFT удаляет выходные данные.
Ограничение. Этот выходной поток должен иметь флаг MFT_OUTPUT_STREAM_DISCARDABLE или MFT_OUTPUT_STREAM_LAZY_READ. (Чтобы получить флаги для потока вывода, вызовите метод IMFTransform::GetOutputStreamInfo .)
-
Если pSample имеет значение NULL и dwFlags не содержит MFT_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER, MFT предоставляет пример выходных данных. MFT задает pSample , чтобы указать на образец, который он предоставляет. MFT может выделить новый пример или повторно использовать входной пример.
Ограничение. Этот выходной поток должен иметь флаг MFT_OUTPUT_STREAM_PROVIDES_SAMPLES или MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES.
-
Если pSample не равно NULL, MFT использует пример, предоставленный вызывающим объектом.
Ограничение. Этот выходной поток не должен иметь флаг MFT_OUTPUT_STREAM_PROVIDES_SAMPLES.
Каждый вызов ProcessOutput может создавать ноль или несколько событий и до одной выборки для каждого выходного потока.
Требования
Минимальная версия клиента | Windows Vista [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2008 [классические приложения | Приложения UWP] |
Верхняя часть | mftransform.h |