在vc下用directshow开发视频软件,
发现个问题。
利用IAMStreamConfig 获取配置之后
修改,VIDEOINFOHEADER 中的AvgTimePerFrame 参数,没法实现录像帧率修改。
目前发现,只要摄像头本身不支持帧率修改的话, 该参数修改了,好像也不起作用。
由于我加入了mpeg4压缩。
用的是微软的压缩代码。最后出现录像1分钟时间,但是录像的文件属性显示1分08秒,不知道为甚么
反复测试也是如此。有人知道怎么回事吗?hr = pCGB2->FindInterface(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Video, pCap,IID_IAMStreamConfig, (void **)&pSC);
AM_MEDIA_TYPE *mtt=NULL;
hr = pSC->GetFormat( &mtt );
if ( FAILED( hr) )
{
Error( TEXT("Could not read the connected media type"));
return hr;
}
VIDEOINFOHEADER *vihh = reinterpret_cast<VIDEOINFOHEADER *>(mtt->pbFormat);
int nWidth,nHeight;
vihh->bmiHeader.biHeight=240;
vihh->bmiHeader.biWidth=320;
vihh->AvgTimePerFrame=400000;
pSC->SetFormat(mtt);
DeleteMediaType(mtt);
pSC->Release();
发现个问题。
利用IAMStreamConfig 获取配置之后
修改,VIDEOINFOHEADER 中的AvgTimePerFrame 参数,没法实现录像帧率修改。
目前发现,只要摄像头本身不支持帧率修改的话, 该参数修改了,好像也不起作用。
由于我加入了mpeg4压缩。
用的是微软的压缩代码。最后出现录像1分钟时间,但是录像的文件属性显示1分08秒,不知道为甚么
反复测试也是如此。有人知道怎么回事吗?hr = pCGB2->FindInterface(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Video, pCap,IID_IAMStreamConfig, (void **)&pSC);
AM_MEDIA_TYPE *mtt=NULL;
hr = pSC->GetFormat( &mtt );
if ( FAILED( hr) )
{
Error( TEXT("Could not read the connected media type"));
return hr;
}
VIDEOINFOHEADER *vihh = reinterpret_cast<VIDEOINFOHEADER *>(mtt->pbFormat);
int nWidth,nHeight;
vihh->bmiHeader.biHeight=240;
vihh->bmiHeader.biWidth=320;
vihh->AvgTimePerFrame=400000;
pSC->SetFormat(mtt);
DeleteMediaType(mtt);
pSC->Release();
我测试过3个摄像头
1个是几十元的普通摄像头,随便什么帧率,最后录制结果都是正确的。
1个是上千元的显微摄像头,帧率不能修改不说,随便怎么弄录制结果都不对。
还有1个是几百元的摄像头,帧率可以修改,但是只能是他pin界面里面可选的那几种,而且时间录制出来也不对。