Festlegen der Videoaufnahme-Bildfrequenz
Ein Videoaufnahmegerät unterstützt möglicherweise eine Reihe von Bildfrequenzen. Wenn diese Informationen verfügbar sind, werden die minimalen und maximalen Bildraten 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 Erfassungsformat variieren. Bei größeren Rahmengrößen kann beispielsweise die maximale Bildfrequenz reduziert werden.
So legen Sie die Bildfrequenz fest:
- Erstellen Sie die Medienquelle für das Erfassungsgerät. Weitere Informationen finden Sie unter Enumerating Video Capture Devices (Aufzählen von Videoaufnahmegeräten).
- Rufen Sie ÜBER DIE MEDIENQUELLE::CreatePresentationDescriptor für die Medienquelle auf, um den Präsentationsdeskriptor abzurufen.
- Rufen Sie DIE DATEI PRESENTPresentationDescriptor::GetStreamDescriptorByIndex auf, um den Streamdeskriptor für den Videostream abzurufen.
- Rufen Sie IM STREAM-Deskriptor DIESSTREAMDESCRIPTOR::GetMediaTypeHandler auf.
- Aufzählen der Aufzeichnungsformate, wie unter Festlegen des Videoaufnahmeformatsbeschrieben.
- 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 Frameraten 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 ÜBERMEDIATypeHandler::SetCurrentMediaType den geänderten Medientyp auf.
Im folgenden Beispiel wird die Bildfrequenz auf die maximale Bildfrequenz festgelegt, die das Gerät unterstützt:
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;
}