媒体基础使用PROPVARI结构设置视频捕获帧速率
Media Foundation set video capture frame rate using PROPVARIANT structure
我正在编写一个媒体基础应用程序,我需要在其中设置视频设备的捕获帧速率。我正在编写的函数是这样的:
bool SetRequestedFrameRate(const size_t requestedFramesPerSecond);
其中我传递一个用户定义的整数作为帧速率参数。我正在遵循 https://msdn.microsoft.com/en-us/library/windows/desktop/ff485859(v=vs.85)上的代码片段.aspx:
PROPVARIANT var;
if (SUCCEEDED(pType->GetItem(MF_MT_FRAME_RATE_RANGE_MAX, &var)))
{
hr = pType->SetItem(MF_MT_FRAME_RATE, var);
PropVariantClear(&var);
if (FAILED(hr))
{
goto done;
}
hr = pHandler->SetCurrentMediaType(pType);
}
它使用 PROVARIANT 结构来保存帧速率数据。但是如何从我的"const size_t requestFramesPerSecond"参数构造一个PROVARI结构呢?如果我已经有一个保存帧速率的 PROVARIANT ,如何从中检索实际帧速率整数? 另外,COM 是否提供了一种方法来比较表示帧速率的两个 PROVARIANT 结构?
请帮忙,谢谢!
正如 Roman 指出的那样,您可以通过使用实用程序函数访问 IMFAttributes 存储来避免处理 PROPVARIANT 结构。 然而正如#7在您引用的页面上指出的那样:
- 查询媒体类型以获取MF_MT_FRAME_RATE_RANGE_MAX和MF_MT_FRAME_RATE_RANGE_MIN属性。此值给出的范围 支持的帧速率。设备可能支持其他帧速率 在此范围内。
枚举捕获设备的本机媒体类型,只需选择(选择一个)并重复使用媒体类型即可设置当前媒体类型。 否则,您将对与捕获设备的功能不匹配的失败呼叫感到沮丧。 我稍微讨论了帧速率,并展示了如何在此处枚举本机媒体类型。 祝你好运。
MF_MT_FRAME_RATE
属性是一对表示分子和分母的 32 位整数。 MFSetAttributeRatio
和朋友是以友好的方式设置/获取值的帮助者。使用PROVARIANT
应将其作为 64 位UINT64
值处理。
帧速率表示为比率。属性值的前 32 位包含分子,低 32 位包含分母。例如,如果帧速率为 30 帧/秒 (fps),则比率为 30/1。如果帧速率为 29.97 fps,则比率为 30,000/1001。
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++/Linux中设置单调时钟的一些技巧
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 嵌套在类中时无法设置成员数据
- 需要帮助设置在C++中使用的Potrace
- 如何在自删除后将对象设置为nullptr
- 将指针设置为"nullptr"并不能防止双重删除?
- 如何在Ubuntu中使用cmake设置qt4
- ld:bind_at_load和-bitcode_bundle(Xcode设置ENABLE_bitcode=YES)不能
- 如何在boost beast http请求中设置http头
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 媒体基金会设置视频交织和解码
- 如何显示视频捕获过滤器对话框(亮度,曝光等相机设置)
- opencv视频捕获默认设置
- 如何在OpenCV中设置相机的视频格式?CAP_PROP_FOURCC不起作用
- 如何设置报头元数据为编码视频
- 设置IWMWriter来编写4K视频
- 无法设置windows媒体视频9屏幕编码器
- 在OpenCV 2.2中,设置视频捕获属性不再有效
- 媒体基础使用PROPVARI结构设置视频捕获帧速率