私のアプリでMedia Foundation( "MF")のDirectshow( "DS")でコードを置き換えようとしましたが、1つの問題を満たしました。ウェブカメラでMFを使用して、 。 MFは30fpsしか設定できませんでした。私が25fpsを設定しようとすると、私はSetCurrentMediaType()に常にエラー0xc00d5212を取得します。 DSでは、そのパラメータを変更することができました。Media Foundation:ウェブカメラでFPSを変更できない
私のコード:任意の助け
ASSERT(m_pReader); //IMFSourceReader *m_pReader;
IMFMediaType *pNativeType = NULL;
IMFMediaType *pType = NULL;
UINT32 w = 1280;
UINT32 h = 720;
UINT32 fps = 25; // or 30
DWORD dwStreamIndex = MF_SOURCE_READER_FIRST_VIDEO_STREAM;
// Find the native format of the stream.
HRESULT hr = m_pReader->GetNativeMediaType(dwStreamIndex, 0, &pNativeType);
if (FAILED(hr))
{
//error
}
GUID majorType, subtype;
// Find the major type.
hr = pNativeType->GetGUID(MF_MT_MAJOR_TYPE, &majorType);
if (FAILED(hr))
{
//error
}
// Define the output type.
hr = MFCreateMediaType(&pType);
if (FAILED(hr))
{
//error
}
hr = pType->SetGUID(MF_MT_MAJOR_TYPE, majorType);
if (FAILED(hr))
{
//error
}
// Select a subtype.
if (majorType == MFMediaType_Video)
{
subtype= MFVideoFormat_RGB24;
}
else
{
//error
}
hr = pType->SetGUID(MF_MT_SUBTYPE, subtype);
if (FAILED(hr))
{
//error
}
hr = MFSetAttributeSize(pType, MF_MT_FRAME_SIZE, w, h);
if (FAILED(hr))
{
//error
}
hr = MFSetAttributeSize(pType, MF_MT_FRAME_RATE, fps, 1);
if (FAILED(hr))
{
//error
}
hr = m_pReader->SetCurrentMediaType(dwStreamIndex, NULL, pType);
if (FAILED(hr))
{// hr = 0xc00d5212
//!!!!!error - if fps == 25
}
return hr;
感謝。
こんにちはローマン、私はあなたのMFユーティリティを試して、次のものがあります:私のウェブカメラは1と30 fpsでのみ動作することができます。しかし、DSは5,10,15,20,25,30 fpsという別のものを示しました。どうして?ウェブカメラは30fpsしかありませんが、DSはそのフレームレートを他のフレームレートで分割できますか?それは本当ですか? –
私はWDMドライバが複数のフレームレートを報告していると思いますが、情報が不完全で、MFレイヤーでフィルタにかけられている可能性があります。ちょうど推測 - 何かを明確にするのに十分な情報はありません。 –
こんにちは、私はこの制限は、メディア財団のためのUVC - USBビデオクラスドライバと関連していると思います。これはプラットフォームのWindowsStoreをターゲットにしており、USBカメラでRGBやMJPEG形式だけでなくハードウェアエンコーダからH264やH265形式でビデオを取得するために最適化されているため、機能の制限があります。より多くの機能を利用するには、必要なフレームレートでフレームを取得するDShowまたは書き込みタイマーを使用する必要があります。 –