MFTEnumEx 在 Windows 7 上找不到 MFAudioFormat_MP3 解码器?

MFTEnumEx cannot find MFAudioFormat_MP3 decoder on Windows 7?

作为分支问题来自:

当我尝试在 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 标志,但 decoderCount 仍然为零?

Windows 7 SP1解码器:

MP3 Decoder MFT

  • MFT_TRANSFORM_CLSID_Attribute: {BBEEA841-0A63-4F52-A7AB-A9B3A84ED38A} (Type VT_CLSID)
  • MF_TRANSFORM_FLAGS_Attribute: MFT_ENUM_FLAG_SYNCMFT
  • MFT_INPUT_TYPES_Attributes: MFAudioFormat_MP3
  • MFT_OUTPUT_TYPES_Attributes: MFAudioFormat_PCM

解码器不宣传对 MFAudioFormat_Float 解码的支持(即使实例化后它也可以支持)。当您枚举将输出限制为 MFAudioFormat_Float 的解码器时,解码器将被排除在外。 OS 的较新版本可能更新了具有更多输出格式选项的解码器。

如果你这样做:

MFT_REGISTER_TYPE_INFO outType { MFMediaType_Audio, MFAudioFormat_PCM };

nullptr输出媒体类型,解码器会被枚举。

Also Source Reader API,一般来说,使用相同的 MFTEnum 逻辑以使实际源媒体类型适合请求的媒体类型。

枚举时还要注意标志:选择完全同步的 MFT 对您来说可能不是那么重要,但您的 API 调用表明您请求跳过异步。