由于Windows Media Foundation中的解析,SetOutputType失败

SetOutputType failed because of resolution in Windows Media Foundation

本文关键字:SetOutputType 失败 Windows Media Foundation 由于      更新时间:2023-10-16

我在程序中使用H.264编码器MFT进行视频编码。一切正常,直到我找到一个文件,H.264编码器无法成功设置输出类型。

我用来设置编码器的代码在这里

ciEncoder.CreateObject(pCLSIDs[0], IID_IMFTransform);
// H.264 Encoder MFT needs to set output first 
LComObject<IMFMediaType> ciOutputType;  // Output media type of the encoder
hr = fpMFCreateMediaType((IMFMediaType**)(ciOutputType.GetAssignablePtrRef()));
hr = ciOutputType->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video);
hr = ciOutputType->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_H264);
hr = ciOutputType->SetUINT32(MF_MT_AVG_BITRATE, 768 * 1000);
hr = ciOutputType->SetUINT32(MF_MT_INTERLACE_MODE, 2);
hr = ciOutputType->SetUINT32(MF_MT_MPEG2_PROFILE, eAVEncH264VProfile_Base);
hr = MFSetAttributeRatio(ciOutputType.get(), MF_MT_FRAME_RATE, 10, 1);
hr = MFSetAttributeSize(ciOutputType.get(), MF_MT_FRAME_SIZE, vf.iWidth, vf.iHeight);
hr = MFSetAttributeRatio(ciOutputType.get(), MF_MT_PIXEL_ASPECT_RATIO, 1, 1);
hr = ciEncoder->SetOutputType(0, ciOutputType.get(), 0);

输入视频(swf视频(分辨率为76x12,并且使用上面的代码SetOutputType返回MF_E_INVALIDMEDIATYPE。

例如,如果我保持宽度76,但将高度更改为70,则SetOutputType可以成功。我也尝试过其他值,比如24、38,但都失败了。

有人能帮忙检查一下吗?

感谢

我真的不知道答案。但也许答案可以从编码器处理宏块的方式中找到。它们可以是4*4或8*8,依此类推。因此,编码可能需要最小的高度。