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 调用表明您请求跳过异步。
作为分支问题来自:
当我尝试在 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 调用表明您请求跳过异步。