ビデオ キャプチャ フレーム レートを設定する方法
ビデオ キャプチャ デバイスでは、さまざまなフレーム レートがサポートされる場合があります。 この情報が使用可能な場合、最小フレーム レートと最大フレーム レートはメディア タイプの属性として格納されます。
属性 | 説明 |
---|---|
MF_MT_FRAME_RATE_RANGE_MAX | 最大フレーム レート。 |
MF_MT_FRAME_RATE_RANGE_MIN | 最小フレーム レート。 |
範囲は、キャプチャ形式によって異なる場合があります。 たとえば、フレーム サイズを大きくすると、最大フレーム レートが低下する可能性があります。
フレーム レートを設定するには:
- キャプチャ デバイスのメディア ソースを作成します。 「ビデオ キャプチャ デバイスの列挙」を参照してください。
- メディア ソースで IMFMediaSource::CreatePresentationDescriptor を呼び出して、プレゼンテーション記述子を取得します。
- IMFPresentationDescriptor::GetStreamDescriptorByIndex を呼び出して、ビデオ ストリームのストリーム記述子を取得します。
- ストリーム記述子 で IMFStreamDescriptor::GetMediaTypeHandler を呼び出します。
- 「ビデオ キャプチャ形式を 設定する方法」の説明に従って、キャプチャ形式を列挙します。
- 一覧から目的の出力形式を選択します。
- MF_MT_FRAME_RATE_RANGE_MAX属性とMF_MT_FRAME_RATE_RANGE_MIN属性のメディアの種類に対してクエリを実行します。 この値は、サポートされているフレーム レートの範囲を示します。 デバイスでは、この範囲内の他のフレーム レートがサポートされている場合があります。
- メディア タイプに MF_MT_FRAME 属性を設定して、目的のフレーム レートを指定します。
- 変更されたメディアの種類で IMFMediaTypeHandler::SetCurrentMediaType を呼び出します。
次の例では、デバイスがサポートする最大フレーム レートと等しいフレーム レートを設定します。
HRESULT SetMaxFrameRate(IMFMediaSource *pSource, DWORD dwTypeIndex)
{
IMFPresentationDescriptor *pPD = NULL;
IMFStreamDescriptor *pSD = NULL;
IMFMediaTypeHandler *pHandler = NULL;
IMFMediaType *pType = NULL;
HRESULT hr = pSource->CreatePresentationDescriptor(&pPD);
if (FAILED(hr))
{
goto done;
}
BOOL fSelected;
hr = pPD->GetStreamDescriptorByIndex(dwTypeIndex, &fSelected, &pSD);
if (FAILED(hr))
{
goto done;
}
hr = pSD->GetMediaTypeHandler(&pHandler);
if (FAILED(hr))
{
goto done;
}
hr = pHandler->GetCurrentMediaType(&pType);
if (FAILED(hr))
{
goto done;
}
// Get the maximum frame rate for the selected capture format.
// Note: To get the minimum frame rate, use the
// MF_MT_FRAME_RATE_RANGE_MIN attribute instead.
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);
}
done:
SafeRelease(&pPD);
SafeRelease(&pSD);
SafeRelease(&pHandler);
SafeRelease(&pType);
return hr;
}
関連トピック