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; }