//---------------------------------------------------------------------------- long MediaFoundationVideoDevice::SetDeviceFormat(IMFMediaSource *pSource, DWORD streamIndex, DWORD dwFormatIndex) { IMFPresentationDescriptor *pPD = NULL; IMFStreamDescriptor *pSD = NULL; IMFMediaTypeHandler *pHandler = NULL; IMFMediaType *pType = NULL; HRESULT hr = pSource->CreatePresentationDescriptor(&pPD); if (FAILED(hr)) { goto done; } BOOL fSelected=false; hr = pPD->GetStreamDescriptorByIndex(streamIndex, &fSelected, &pSD); if (FAILED(hr)) { goto done; } if (!fSelected) { hr = pPD->SelectStream(streamIndex); if (FAILED(hr)) { LOG_ERROR("Failed to select stream "<<streamIndex); goto done; } } hr = pSD->GetMediaTypeHandler(&pHandler); if (FAILED(hr)) { goto done; } hr = pHandler->GetMediaTypeByIndex(dwFormatIndex, &pType); if (FAILED(hr)) { goto done; } hr = pHandler->SetCurrentMediaType(pType); done: SafeRelease(&pPD); SafeRelease(&pSD); SafeRelease(&pHandler); SafeRelease(&pType); return hr; }