作为来自IMFTransform SetInputType()/SetOutputType() fails的分支问题
当我尝试枚举Windows 7上的MP3解码器时,找不到任何MP3解码器吗?但是,当我为由MFCreateSourceReaderFromURL创建的MP3文件的IMFSourceReader设置部分媒体类型时,它似乎找到了一种。
我努力了:
MFT_REGISTER_TYPE_INFO outType{ MFMediaType_Audio, MFAudioFormat_Float }; // And MFAudioFormat_PCM, MFAudioFormat_Float
MFT_REGISTER_TYPE_INFO inType{ MFMediaType_Audio, MFAudioFormat_MP3 };
IMFActivate** decoders;
UINT32 decoderCount;
HRESULT hr;
hr = MFTEnumEx(MFT_CATEGORY_AUDIO_DECODER, MFT_ENUM_FLAG_SYNCMFT, &inType, &outType, &decoders, &decoderCount);
SUCCEEDED(hr);
我相信我已经尝试了MFTEnumEx的所有不同标志,但解码器计数仍然为零? 最佳答案
Windows 7 SP1解码器:
解码器不会公布对MFAudioFormat_Float
的支持以进行解码(即使实例化也很难支持)。当枚举解码器将输出限制为MFAudioFormat_Float
时,将排除解码器。较新版本的OS可能已更新了具有更多输出格式选项的解码器。
如果您这样做:MFT_REGISTER_TYPE_INFO outType { MFMediaType_Audio, MFAudioFormat_PCM };
或nullptr
输出媒体类型,则将枚举解码器。
通常,Source Reader API也使用相同的MFTEnum
逻辑,以使实际的源媒体类型适合所请求的媒体类型。
枚举时还请注意标志:选择完全同步的MFT对您而言并不是那么重要,但是您的API调用建议您请求跳过异步。
关于c++ - MFTEnumEx在Windows 7上找不到MFAudioFormat_MP3解码器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64619752/