
[英]How to run/start a thread at a given time using Media Foundation?
[英]Changing resolution using media foundation under win 7
我正在win 7上的顶级媒体基础上编写应用程序,我使用IMFMediaSource查询摄像头接口以获取帧和其他属性。 它很奇怪,但我找不到改变分辨率的方法。 似乎如果我使用IMFCaptureSource我可以使用SetCurrentDeviceMediaType来改变分辨率,但它仅在Windows 8中受支持。所以我们不能使用媒体基础改变win 7下的分辨率? 有没有办法使用直接显示与IMFMediaSource来改变分辨率? 如果是这样,任何人都可以帮助一些代码示例?
谢谢!
好的,所以我最终发现了。 我使用IMFSourceReader从MFMediaSource获取样本,因此在配置SourceReader之后,您可以迭代相机支持的本机媒体类型,如下所示:
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++;
}
这意味着Iam没有创建具有我需要的分辨率的新媒体类型,我获得了具有我需要的配置的本机媒体类型,并将其设置在SourceReader上。
希望它能帮助未来的媒体基金会旅行者...... :)
您可以从IMediaSource查询directshow接口,它可以更改分辨率。
对于ex:对于Camera控件属性我喜欢这个。
IAMCameraControl* m_pCameraControl = NULL;
HRESULT hr = S_OK;
hr = pMediaSource->QueryInterface(IID_PPV_ARGS(&m_pCameraControl));
if (m_pCameraControl == NULL)
{
return E_FAIL;
}
在你的情况下以同样的方式我不确定界面,但我想它将以下列方式。
IAMStreamConfig * m_pStreamConfig = NULL;
HRESULT hr = S_OK;
hr = pMediaSource->QueryInterface(IID_PPV_ARGS(&m_pStreamConfig ));
if (m_pCameraControl == NULL)
{
return E_FAIL;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.