使用DirectShow驅動攝像頭

2021-05-22 09:37:56 字數 1885 閱讀 5863

對於小攝像頭的驅動有幾種方法,通過使用directshow來驅動攝像頭靈活性比較好,有簡單的方法也有比較複雜但更有效的方法,本文只介紹簡單方法,希望與大家交流!

用directshow來使用攝像頭,一般要求攝像頭的驅動是wdm格式的,當然,一些比較老的驅動格式directshow也可支援。directshow通過圖形過濾管理器(filter graph manager)來與上層應用程式和下層的驅動進行聯絡。directshow通過一種叫作捕獲過濾器(capture filter)的東東來支援對攝像頭的捕獲,乙個捕獲過濾器有多個插口(pin),其中的預覽(preview)插口可用來進行顯示禎圖象。

directshow

下面是例程:

ccomqiptrm_pvw;

ccomqiptrm_pmc;

ccomqiptrm_pme;

ccomptrm_pgraph;

ccomptrm_pcapture;

dword m_dwgraphregister;

bool

binit(hwnd hwnd)

else

//將裝置新增到graph

hr = m_pgraph->addfilter(pbf, l"video capture");

if (failed(hr))

return

false;

//連線乙個源插口

hr=m_pcapture->renderstream(&pin_category_preview,&mediatype_video

,pbf,null,null);

if (failed(hr))

return

false;

pbf.release();

// //

hr=m_pvw->put_owner((oahwnd)hwnd);

if (failed(hr))

return

false;

//設定視窗樣式

m_pvw->put_windowstyle(ws_child | ws_clipchildren);

if (failed(hr))

return

false;

//設定視窗大小

crect rectclient;

getclientrect(hwnd,rectclient);

m_pvw->setwindowposition(0, 0, 320, 240);

//設定可視

hr=m_pvw->put_visible(oatrue);

if (failed(hr))

return

false;

//將物件加入到執行物件列表中

ccomptrprot;

getrunningobjecttable(0,&prot);

wchar c[128];

wsprintfw(c, l"filtergraph %08x pid %08x/0", (dword_ptr)m_pgraph.p,

getcurrentprocessid());

hr = createitemmoniker(l"!",c,&pm);

if (failed(hr))

return

false;

hr = prot->register(rotflags_registrationkeepsalive,m_pgraph,

pm,&m_dwgraphregister);

pm.release();

return

false;

}

使用DirectShow驅動攝像頭

對於小攝像頭的驅動有幾種方法,通過使用directshow來驅動攝像頭靈活性比較好,有簡單的方法也有比較複雜但更有效的方法,本文只介紹簡單方法,希望與大家交流!用directshow來使用攝像頭,一般要求攝像頭的驅動是wdm格式的,當然,一些比較老的驅動格式directshow也可支援。direct...

使用DirectShow驅動攝像頭

對於小攝像頭的驅動有幾種方法,通過使用directshow來驅動攝像頭靈活性比較好,有簡單的方法也有比較複雜但更有效的方法,本文只介紹簡單方法,希望與大家交流!用directshow來使用攝像頭,一般要求攝像頭的驅動是wdm格式的,當然,一些比較老的驅動格式directshow也可支援。direct...

使用DirectShow驅動攝像頭

對於小攝像頭的驅動有幾種方法,通過使用directshow來驅動攝像頭靈活性比較好,有簡單的方法也有比較複雜但更有效的方法,本文只介紹簡單方法,希望與大家交流!用directshow來使用攝像頭,一般要求攝像頭的驅動是wdm格式的,當然,一些比較老的驅動格式directshow也可支援。direct...