ok,谢谢陆兄的指点,我也是这么做的,见代码,其中pAsfConfig是从asfwriter指针获取的.
IWMProfile *ppProfile;
pAsfConfig->GetCurrentProfile (&ppProfile);
IWMStreamConfig* ppConfig;
ppProfile->GetStream(0,&ppConfig); //获取视频流的
/////设置视频流的属性
IWMMediaProps *pMediaProps;
ppConfig->QueryInterface(IID_IWMMediaProps,(void**)(&pMediaProps));
WM_MEDIA_TYPE mediaType;
DWORD bufsize;
pMediaProps->GetMediaType(NULL,&bufsize);
pMediaProps->GetMediaType(&mediaType,&bufsize);
////////////////////////
VIDEOINFOHEADER *pVih = reinterpret_cast<VIDEOINFOHEADER*>(mediaType.pbFormat);
在这里重新设置视频流的属性
.........
//////////////////////////
pMediaProps->SetMediaType(&mediaType);
我想通过pVih指针设置视频的大小,VIDEOINFOHEADER结构如下:
typedef struct tagVIDEOINFOHEADER {
RECT rcSource,
RECT rcTarget;
DWORD dwBitRate;
DWORD dwBitErrorRate;
REFERENCE_TIME AvgTimePerFrame;
BITMAPINFOHEADER bmiHeader;
} VIDEOINFOHEADER;
因为我看到BITMAPINFOHEADER 结构有两个成员
LONG biWidth;
LONG biHeight;
不知道是否通过这bmiHeader的两个变量来设置视频的宽度和高度,???
另:我通过查看GetMediaType返回的媒体类型,发现biWidth和 biHeight都是零?怎么解释啊?
还请陆兄再次指教
附:BITMAPINFOHEADER结构
typedef struct tagBITMAPINFOHEADER {
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER;