I'm experiencing problems in setting compression parameters for a directshow video filter for a video and audio grabbed from a usb webcam. The code I am using (adapted from various websites on the internet) is the following (removed error checking to improve readability):
//... various code before
hr=m\_pGraph->AddFilter(m\_pVidDeviceFilter,L"Vid Capture Filter");
hr=m\_pGraph->AddFilter(m\_pAudDeviceFilter,L"Aud Capture Filter");
hr = CoCreateInstance(CLSID\_WMAsfWriter,NULL,CLSCTX\_INPROC\_SERVER,
IID\_IBaseFilter, (void \*\*) &m\_pWMASFWritter);
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// !!! Try to add compression from now on !!!!
DWORD dwBitRate = 2670000; // I tried almost everything here
DWORD dwQuality = 50; // in range\[0-100\]
DWORD dwSecPerKey = 5000;
// Initialize a new Profile Manager
IWMProfileManager\* pIPM = 0;
WMCreateProfileManager(&pIPM);
// Create a new empty profile
IWMProfile\* pIProf = 0;
pIPM->CreateEmptyProfile(WMT\_VER\_9\_0,&pIProf);
pIProf->SetName(L"Window Media Video 9 Profile");
pIProf->SetDescription (L"Window Media Video 9 Custom Encoding");
// Create a new video stream
IWMStreamConfig\* pVideoStream = 0;
pIProf->CreateNewStream(WMMEDIATYPE\_Video,&pVideoStream);
pVideoStream->SetStreamName(L"videostream");;
pVideoStream->SetConnectionName(L"video");
pVideoStream->SetBitrate(662144); // This causes problems
pVideoStream->SetBufferWindow(3000);
pVideoStream->SetStreamNumber(1);
IWMVideoMediaProps\* pVideoMediaProps = 0;
// Get this Interface from pVideoStream...
hr = pVideoStream->QueryInterface(IID\_IWMMediaProps, (void\*\*)&pVideoMediaProps);
WM\_MEDIA\_TYPE sMediaType;
WMVIDEOINFOHEADER sVideoInfoHeader;
memset(&sMediaType, 0, sizeof(sMediaType));
sMediaType.majortype = WMMEDIATYPE\_Video;
sMediaType.subtype = WMMEDIASUBTYPE\_MPEG2\_VIDEO;
sMediaType.bFixedSizeSamples = FALSE;
sMediaType.bTemporalCompression = TRUE;
sMediaType.formattype = WMFORMAT\_VideoInfo;
sMediaType.cbFormat = sizeof(WMVIDEOINFOHEADER);
sMediaType.pbFormat = (BYTE \*)&sVideoInfoHeader;
// Setup the Video Info Header
memset(&sVideoInfoHeader, 0, sizeof(sVideoInfoHeader));
sVideoInfoHeader.rcSource.left = 0;
sVideoInfoHeader.rcSource.top = 0;
sVideoInfoHeader.rcSource.right = 352;
sVideoInfoHeader.rcSource.bottom = 240;
sVideoInfoHeader.rcTarget.left = 0;
sVideoInfoHeader.rcTarget.top = 0;
sVideoInfoHeader.rcT