使用AMD H264编码器MFT清除颜色(颜色范围问题)

问题描述 投票:1回答:1

我正在使用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使用Microsoft Media Foundation H.264编码器(软件)编码AMDh264Enc,2.mp4。

有谁知道这个问题的原因是什么?

Sample videos

h.264 ms-media-foundation mft
1个回答
1
投票

我设法通过将YUV转换矩阵设置为bt.601(参见MFVideoTransferMatrix_BT601)来解决此问题,如下所示:

pVideoMediaTypeOut->SetUINT32(MF_MT_YUV_MATRIX, MFVideoTransferMatrix_BT601);
© www.soinside.com 2019 - 2024. All rights reserved.