我正在使用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,依此类推。因此,可能需要最小高度的编码。

07-24 14:10