Media Foundation调用ProcessInput报错0xc00d36b5原因咨询
错误码0xc00d36b5对应Media Foundation的MF_E_INVALID_FORMAT(无效格式),结合你使用Intel硬件MFT解码MJPG摄像头样本的场景,成因主要有以下几种:
输入样本格式与MFT预期不匹配:Intel硬件MFT仅兼容标准基线MJPG格式,如果摄像头输出的MJPG包含自定义编码参数(如非标准量化表、扩展帧类型),或者分辨率、帧率不在MFT支持的列表内,就会触发该错误。可以通过
IMFTransform::GetInputAvailableType获取MFT支持的输入格式,对比摄像头输出的IMFMediaType(重点检查MF_MT_SUBTYPE是否为MFVideoFormat_MJPG,以及分辨率、帧率参数)。输入缓冲区数据损坏/不完整:USB摄像头采集过程中可能出现丢包,导致MJPG帧缺少SOI(0xFFD8)或EOI(0xFFD9)标记,数据不完整。硬件MFT无法解析损坏的帧,直接返回格式错误。可以导出输入样本的原始数据,用ffmpeg等工具验证帧的有效性,或者检查USB传输的稳定性。
MFT状态未就绪:调用
ProcessInput前,MFT可能仍在处理前一个输入样本,或存在未读取的输出样本。Media Foundation的硬件MFT需要遵循"先处理输出,再接收输入"的流程,如果跳过ProcessOutput直接输入新样本,会导致MFT状态异常。建议先调用ProcessOutput获取所有待输出的样本,确认MFT处于可接收输入的状态后,再执行ProcessInput。Intel硬件MFT兼容性或驱动问题:旧款Intel核显(如HD 4000及更早系列)的硬件MFT对高分辨率MJPG的支持有限,或者显卡驱动版本过旧导致兼容性bug。可以尝试更新Intel显卡驱动到最新版本,或者切换到软件MJPG解码器(
CLSID_CMSJPEGDecoderMFT)进行对比测试,排查是否为硬件MFT本身的问题。输入样本属性错误:部分Intel硬件MFT对样本的时间戳、持续时间属性有严格要求。如果输入样本未设置有效时间戳(
IMFSample::SetSampleTime),或时间戳乱序,也会被判定为无效格式。确保每个输入样本都正确设置了时间戳和持续时间,且顺序符合播放时序。
内容的提问来源于stack exchange,提问作者Monesh Kumar s

