Я кодирую видео с помощью Windows Media Foundation, но у меня возникла проблема с аппаратным кодированием с использованием AMDh264Enc. Видео выходит полностью размытым, поэтому, очевидно, существует проблема с цветовой гаммой. Источником видео является снимок экрана из Desktop Duplication, который имеет формат R8G8B8A8 (32-битный ARGB).
Я настраиваю типы носителей следующим образом:
// Set the output video type.
MFCreateMediaType(&pVideoMediaTypeOut));
pVideoMediaTypeOut->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video);
pVideoMediaTypeOut->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_H264);
pVideoMediaTypeOut->SetUINT32(MF_MT_AVG_BITRATE, m_VideoBitrate);
pVideoMediaTypeOut->SetUINT32(MF_MT_INTERLACE_MODE, MFVideoInterlace_Progressive);
pVideoMediaTypeOut->SetUINT32(MF_MT_MPEG2_PROFILE, eAVEncH264VProfile_High));
MFSetAttributeSize(pVideoMediaTypeOut, MF_MT_FRAME_SIZE, destWidth, destHeight);
MFSetAttributeRatio(pVideoMediaTypeOut, MF_MT_FRAME_RATE, m_VideoFps, 1);
MFSetAttributeRatio(pVideoMediaTypeOut, MF_MT_PIXEL_ASPECT_RATIO, 1, 1);
// Set the input video type.
MFCreateMediaType(&pVideoMediaTypeIn));
pVideoMediaTypeIn->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video);
pVideoMediaTypeIn->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_ARGB32);
pVideoMediaTypeIn->SetUINT32(MF_MT_VIDEO_NOMINAL_RANGE, MFNominalRange_Normal);
pVideoMediaTypeIn->SetUINT32(MF_MT_INTERLACE_MODE, MFVideoInterlace_Progressive);
MFSetAttributeSize(pVideoMediaTypeIn, MF_MT_FRAME_SIZE, sourceWidth, sourceHeight);
MFSetAttributeRatio(pVideoMediaTypeIn, MF_MT_FRAME_RATE, m_VideoFps, 1);
MFSetAttributeRatio(pVideoMediaTypeIn, MF_MT_PIXEL_ASPECT_RATIO, 1, 1);
Видео, закодированные с помощью видеокодера Microsoft Media Foundation H.264, не имеют проблем. Я связался с двумя примерами видео. 1.mp4 кодируется с помощью AMDh264Enc, 2.mp4 с кодировщиком Microsoft Media Foundation H.264 (программное обеспечение).
Кто-нибудь знает, что вызывает эту проблему?
Примеры видео