日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
關(guān)于使用ISampleGrabberCB接口獲取幀數(shù)據(jù)問題
ISampleGrabberCB接口是DirectShow中用于獲取幀數(shù)據(jù)的回調(diào)接口,可以自定義實現(xiàn)該接口并傳遞給ISampleGrabber接口,來獲取視頻幀的數(shù)據(jù)。下面是使用ISampleGrabberCB接口獲取幀數(shù)據(jù)的一般步驟: 1. 創(chuàng)建ISampleGrabber對象。 2. 創(chuàng)建ISampleGrabberCB對象。 3. 將ISampleGrabberCB對象賦值給ISampleGrabber::SetCallback方法。 4. 啟動ISampleGrabber對象。 5. 循環(huán)讀取幀數(shù)據(jù)。

ISampleGrabberCB接口簡介

ISampleGrabberCB接口是DirectShow庫中的一個回調(diào)接口,用于在獲取視頻幀數(shù)據(jù)時進行自定義處理,通過實現(xiàn)ISampleGrabberCB接口,我們可以在獲取到視頻幀數(shù)據(jù)后,對其進行預(yù)處理、后處理等操作,從而滿足特定的需求。

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),江北企業(yè)網(wǎng)站建設(shè),江北品牌網(wǎng)站建設(shè),網(wǎng)站定制,江北網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,江北網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

如何使用ISampleGrabberCB接口

1、創(chuàng)建IBaseFilter對象

要使用ISampleGrabberCB接口,首先需要創(chuàng)建一個IBaseFilter對象,然后將其作為參數(shù)傳遞給CreateStreamSampleGrabber方法,以創(chuàng)建一個ISampleGrabber對象。

2、實現(xiàn)ISampleGrabberCB接口

接下來,需要實現(xiàn)ISampleGrabberCB接口,并重寫其中的幾個虛擬函數(shù):

QueryInterface:用于處理其他接口的請求;

AddRef:增加引用計數(shù);

Release:減少引用計數(shù);

NewSample:當(dāng)有新的視頻幀數(shù)據(jù)可用時調(diào)用此函數(shù)。

3、設(shè)置回調(diào)函數(shù)

在創(chuàng)建ISampleGrabber對象后,還需要設(shè)置其回調(diào)函數(shù),這可以通過ISampleGrabber::SetCallback方法來實現(xiàn),該方法接受一個指向ISampleGrabberCB接口實例的指針作為參數(shù)。

4、開始獲取幀數(shù)據(jù)

調(diào)用IMediaControl::Run方法啟動媒體流,開始獲取幀數(shù)據(jù),在NewSample回調(diào)函數(shù)中,可以對獲取到的視頻幀數(shù)據(jù)進行處理。

示例代碼

include 
include 
include 
include 
include "samplegrabbercb.h"
int main()
{
    CoInitialize(NULL);
    // 創(chuàng)建系統(tǒng)設(shè)備枚舉器
    ICreateDevEnum *pDevEnum = NULL;
    if (FAILED(CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pDevEnum))))
    {
        std::cerr << "創(chuàng)建設(shè)備枚舉器失敗!" << std::endl;
        return -1;
    }
    // 獲取視頻輸入設(shè)備類別過濾器
    IEnumMoniker *pEnum = NULL;
    pDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pEnum, 0);
    // 遍歷視頻輸入設(shè)備
    IMoniker *pMoniker = NULL;
    while (pEnum->Next(1, &pMoniker, NULL) == S_OK)
    {
        IPropertyBag *pPropBag;
        HRESULT hr = pMoniker->BindToStorage(0, 0, IID_PPV_ARGS(&pPropBag));
        if (SUCCEEDED(hr))
        {
            VARIANT var;
            VariantInit(&var);
            hr = pPropBag->Read(L"FriendlyName", &var, 0);
            if (SUCCEEDED(hr))
            {
                std::wcout << "找到視頻輸入設(shè)備: " << V_BSTR(&var) << std::endl;
                pPropBag->Release();
            }
            VariantClear(&var);
        }
        pMoniker->Release();
    }
    pEnum->Release();
    pDevEnum->Release();
    // TODO: 根據(jù)找到的視頻輸入設(shè)備名稱進行篩選和配置,創(chuàng)建IBaseFilter對象并設(shè)置回調(diào)函數(shù)等操作。
    // ...省略部分代碼...
    CoUninitialize();
    return 0;
}```
四、相關(guān)問題與解答
1、如何解決“無法連接到DMO”的問題?
答:這個問題通常是由于DMO(數(shù)字媒體對象)組件未注冊或注冊失敗導(dǎo)致的,可以嘗試重新注冊DMO組件,或者檢查系統(tǒng)中是否存在已損壞的DMO組件,具體操作如下:打開“運行”對話框(快捷鍵Win+R),輸入“regsvr32 %systemroot%system32strmiids.dll”(不帶引號),然后按回車鍵執(zhí)行,完成后重啟計算機。

文章名稱:關(guān)于使用ISampleGrabberCB接口獲取幀數(shù)據(jù)問題
當(dāng)前URL:http://www.dlmjj.cn/article/cdejihe.html