gpt4 book ai didi

directshow - 在 win 7 下使用 media foundation 改变分辨率

转载 作者:行者123 更新时间:2023-12-03 13:18:49 27 4
gpt4 key购买 nike

我正在 win 7 下的顶级媒体基础上编写一个应用程序,我使用 IMFMediaSource 查询相机接口(interface)以获取帧和其他属性。这很奇怪,但我找不到改变分辨率的方法。似乎如果我使用 IMFCaptureSource 我可以使用 SetCurrentDeviceMediaType 来更改分辨率,但它仅在 Windows 8 中受支持。所以我们不能使用媒体基础在 win 7 下更改分辨率?有没有办法使用 IMFMediaSource 的直接显示来更改分辨率?如果是这样,任何人都可以提供一些代码示例吗?

谢谢!

最佳答案

好的,所以我最终发现了。我正在使用 IMFSourceReader 从 MFMediaSource 获取样本,因此在配置 SourceReader 之后,您可以像这样迭代相机支持的 native 媒体类型:

HRESULT nativeTypeErrorCode = S_OK;
DWORD count = 0;
UINT32 streamIndex = 0;
UINT32 requiredWidth = 1600;
UINT32 requiredheight = 900;
while (nativeTypeErrorCode == S_OK)
{
IMFMediaType * nativeType = NULL;
nativeTypeErrorCode = m_pReader->GetNativeMediaType(streamIndex, count, &nativeType);
if(nativeTypeErrorCode != S_OK) continue;

// get the media type
GUID nativeGuid = {0};
hr = nativeType->GetGUID(MF_MT_SUBTYPE, &nativeGuid);

if (FAILED(hr)) return hr;

UINT32 width, height;
hr = ::MFGetAttributeSize(nativeType, MF_MT_FRAME_SIZE, &width, &height);

if (FAILED(hr)) return hr;

if(nativeGuid == <my type guid> && width == requiredWidth && height == requiredheight)
{
// found native config, set it
hr = m_pReader->SetCurrentMediaType(streamIndex, NULL, nativeType);
if (FAILED(hr)) return hr;
break;
}

SafeRelease(&nativeType);
count++;
}

这意味着我没有创建具有所需分辨率的新媒体类型,我获得了具有所需配置的 native 媒体类型,并将其设置在 SourceReader 上。

希望它能帮助 future 的媒体基金会旅行者......:)

关于directshow - 在 win 7 下使用 media foundation 改变分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16071235/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com