Festlegen der Bildfrequenz für die Videoaufnahme
Ein Videoaufnahmegerät unterstützt möglicherweise einen Bereich von Bildfrequenzen. Wenn diese Informationen verfügbar sind, werden die minimale und die maximale Bildfrequenz als Medientypattribute gespeichert:
attribute | Beschreibung |
---|---|
MF_MT_FRAME_RATE_RANGE_MAX | Maximale Bildfrequenz. |
MF_MT_FRAME_RATE_RANGE_MIN | Minimale Bildfrequenz. |
Der Bereich kann je nach Aufnahmeformat variieren. Bei größeren Framegrößen kann z. B. die maximale Bildfrequenz reduziert werden.
So legen Sie die Bildfrequenz fest:
- Erstellen Sie die Medienquelle für das Aufnahmegerät. Weitere Informationen finden Sie unter Aufzählen von Videoaufnahmegeräten.
- Rufen Sie IMFMediaSource::CreatePresentationDescriptor für die Medienquelle auf, um den Präsentationsdeskriptor abzurufen.
- Rufen Sie IMFPresentationDescriptor::GetStreamDescriptorByIndex auf, um den Streamdeskriptor für den Videostream abzurufen.
- Rufen Sie IMFStreamDescriptor::GetMediaTypeHandler für den Streamdeskriptor auf.
- Auflisten der Aufnahmeformate, wie unter Festlegen des Videoaufnahmeformats beschrieben.
- Wählen Sie das gewünschte Ausgabeformat aus der Liste aus.
- Fragen Sie den Medientyp nach den Attributen MF_MT_FRAME_RATE_RANGE_MAX und MF_MT_FRAME_RATE_RANGE_MIN ab. Diese Werte geben den Bereich der unterstützten Bildfrequenzen an. Das Gerät unterstützt möglicherweise andere Bildfrequenzen innerhalb dieses Bereichs.
- Legen Sie das MF_MT_FRAME-Attribut für den Medientyp fest, um die gewünschte Bildfrequenz anzugeben.
- Rufen Sie IMFMediaTypeHandler::SetCurrentMediaType mit dem geänderten Medientyp auf.
Im folgenden Beispiel wird die Bildfrequenz gleich der maximalen Bildfrequenz festgelegt, die vom Gerät unterstützt wird:
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;
}
Zugehörige Themen