向DSHOW高手请教个问题, 关于视频捕捉

富莱工作室 2012-04-02 08:58:16
操作系统: WIN7

问题描述:连接正常,图像正常, 帧率不正常。

详情:

CheckMediaType S_OK时, 打印的帧率为24,但是实际帧率远低于这个值,
8帧左右, 图像、声音不同步, 声音比图像快一秒以上, 注释后级FILTER所有数据处理代码, 每帧间隔仍然为120-145MS,在光线极为充足的情况下, 偶尔能到24帧, 声、图同步, 本已得出结论, 摄像头不好, 但是, 用QQ测试摄像头后, 否定了这个结论, QQ上的图像, 无论是本地, 还是远程, 无论光线状况, 非常理想,请高手诊断!


hr = m_pCapGB->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, capfilter, NULL, xfilter);

class XVideoInputPin : public CBaseInputPin
{
public:
XVideoInputPin(XFilter *pFilter, HRESULT *phr, LPCWSTR pName, unsigned int pinNumber);
~XVideoInputPin();

HRESULT CheckMediaType(const CMediaType *);
STDMETHODIMP Receive(IMediaSample *pSample);

protected:
XFilter* m_pFilter;
};

HRESULT XVideoInputPin::CheckMediaType(const CMediaType *pmt)
{
if(pmt->majortype == MEDIATYPE_Video){
//.............
//打印帧率代码省略.......
return S_OK;
}

return VFW_E_TYPE_NOT_ACCEPTED;
}

HRESULT XVideoInputPin::Receive(IMediaSample *pSample)
{
HRESULT hr = CBaseInputPin::Receive(pSample);

if (SUCCEEDED(hr)){

LONG InputLength;
unsigned char *pInputBuffer;
REFERENCE_TIME StartTime, EndTime;

InputLength = pSample->GetActualDataLength();
pSample->GetPointer(&pInputBuffer);
pSample->GetTime(&StartTime, &EndTime);

//打印帧间隔
static UINT ptk = 0;
TRACE(_T("v tk is %d\n"), StartTime/10000 - ptk);
ptk = StartTime/10000;

}

return S_OK;
}

...全文
148 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
富莱工作室 2012-04-05
  • 打赏
  • 举报
回复
是不是QQ有自己专用的摄像头驱动?

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧