使用 Windows.Media.MediaProperties 命名空间创建 IMFMediaType

问题描述 投票:0回答:1

由于

Windows.Media
中的命名空间仅在底层使用 Media Foundation,因此我希望使用 WinRT 便捷方法(在
AudioEncodingProperties
VideoEncodingProperties
上)创建编解码器,然后将它们转换为
IMFMediaType
。但我不知道如何转换它们:

using namespace winrt::Windows::Media::MediaProperties;
constexpr auto TryQI = [](auto el)
{
    auto try1 = el.try_as<IMFMediaType>();
    WINRT_ASSERT(not try1);
    auto try2 = el.Properties().try_as<IMFMediaType>();
    WINRT_ASSERT(not try2);
};
TryQI(AudioEncodingProperties::CreateAac(48'000, 2, 128'000));
TryQI(VideoEncodingProperties::CreateUncompressed(MediaEncodingSubtypes::Bgra8(), 1920, 1080));

AudioEncodingProperties.Properties
IMap<winrt::guid,IInspectable>
。有谁知道要检查
IInspectable
值的目的吗?

windows-runtime ms-media-foundation
1个回答
0
投票

它们是 IPropertyValue 对象。

如果你有这个:

auto props = AudioEncodingProperties::CreateAac(48'000, 2, 128'000);
auto prop = props.Properties().Lookup(MF_MT_AUDIO_SAMPLES_PER_SECOND); // Mfapi.h

你可以得到这样一个:

auto value = prop.as<Windows::Foundation::IPropertyValue>().GetUInt32();

或者这个(C++/WinRT):

auto value = winrt::unbox_value<UINT32>(prop);

要从中获取

IMFMediaType
参考,您可以像这样使用 MFCreateMediaTypeFromProperties ,此处使用 C++/WinRT:

com_ptr<IMFMediaType> type;
winrt::check_hresult(MFCreateMediaTypeFromProperties(props.as<IUnknown>().get(), type.put()));
© www.soinside.com 2019 - 2024. All rights reserved.