2015-07-06 3 views
1

Я пишу программу с использованием H.264-кодировщика MFT для кодирования видео.Как использовать аппаратное кодирование H.264 в Windows Media Foundation

Путь я использую, чтобы выбрать/создать кодировщик, как:

MFT_REGISTER_TYPE_INFO encoderInfo; 
encoderInfo.guidMajorType = MFMediaType_Video; 
encoderInfo.guidSubtype = MFVideoFormat_H264; 
// H.264 Encoder class id is not exposed, so we have to enumerate 
HRESULT hr = MFTEnum(MFT_CATEGORY_VIDEO_ENCODER, 0, NULL, &encoderInfo, NULL, &pCLSIDs, &nCount); 
if (nCount == 0) { 
    break; 
} 
//Create H.264 Encoder MFT instance 
ciEncoder.CreateObject(pCLSIDs[0], IID_IMFTransform); 

Теперь на моей машине nCount будет установлен в 1 после MFTEnum называется. Я просто хочу знать, если на моем компьютере имеется сертифицированный аппаратный кодер, будет ли nCount установлено на 2? и тогда я смогу выбрать тот, который мне нужен?

Другой вопрос, я использую режим синхронной обработки для кодирования кадров, как описан в

https://msdn.microsoft.com/en-us/library/windows/desktop/aa965264(v=vs.85).aspx#create_mft

Если бы я мог ENUM и выбрать аппаратный кодер MFT, могу ли я использовать один и тот же код логик сделать кодировку?

Большое спасибо

ответ

1

вы проверили этот флаг: MFT_ENUM_FLAG_HARDWARE

Стол MFT выполняет на базе аппаратного обеспечения обработки данных, используя либо драйвер AVStream или GPU на основе прокси-MFT. MFT в этой категории всегда обрабатывают данные асинхронно.

Вы должны использовать: MFTEnumEx

Поскольку аппаратный кодер должен обрабатывать асинхронно, вам необходимо изменить логику из примера MSDN.

Смежные вопросы