亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? graph.cpp

?? < VC++視頻音頻開發>> 這本書的源碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
CBDAFilterGraph::LoadFilter(
    REFCLSID clsid, 
    IBaseFilter** ppFilter,
    IBaseFilter* pConnectFilter, 
    BOOL fIsUpstream
    )
{
    HRESULT                 hr = S_OK;
    BOOL                    fFoundFilter = FALSE;
    CComPtr <IMoniker>      pIMoniker;
    CComPtr <IEnumMoniker>  pIEnumMoniker;

    if (!m_pICreateDevEnum)
    {
        hr = m_pICreateDevEnum.CoCreateInstance(CLSID_SystemDeviceEnum);
        if (FAILED (hr))
        {
            ErrorMessageBox(TEXT("LoadFilter(): Cannot CoCreate ICreateDevEnum"));
            return hr;
        }
    }

    // obtain the enumerator
    hr = m_pICreateDevEnum->CreateClassEnumerator(clsid, &pIEnumMoniker, 0);
    // the call can return S_FALSE if no moniker exists, so explicitly check S_OK
    if (FAILED (hr))
    {
        ErrorMessageBox(TEXT("LoadFilter(): Cannot CreateClassEnumerator"));
        return hr;
    }
    if (S_OK != hr)  // Class not found
    {
        ErrorMessageBox(TEXT("LoadFilter(): Class not found, CreateClassEnumerator returned S_FALSE"));
        return E_UNEXPECTED;
    }

    // next filter
    while(pIEnumMoniker->Next(1, &pIMoniker, 0) == S_OK)
    {
        // obtain filter's friendly name
        CComPtr <IPropertyBag>  pBag;
        hr = pIMoniker->BindToStorage(
                                    NULL, 
                                    NULL, 
                                    IID_IPropertyBag,
                                    reinterpret_cast<void**>(&pBag)
                                    );

        if(FAILED(hr))
        {
            OutputDebugString (TEXT("LoadFilter(): Cannot BindToStorage"));
            return hr;
        }

        CComVariant varBSTR;
        hr = pBag->Read(L"FriendlyName", &varBSTR, NULL);
        if(FAILED(hr))
        {
            OutputDebugString (TEXT("LoadFilter(): IPropertyBag->Read method failed"));
            pIMoniker = NULL;
            continue;
        }

        // bind the filter
        CComPtr <IBaseFilter>   pFilter;
        hr = pIMoniker->BindToObject(
                                    NULL, 
                                    NULL, 
                                    IID_IBaseFilter,
                                    reinterpret_cast<void**>(&pFilter)
                                    );

        if (FAILED(hr))
        {
            pIMoniker = NULL;
            pFilter = NULL;
            continue;
        }


        hr = m_pFilterGraph->AddFilter (pFilter, varBSTR.bstrVal);

        if (FAILED(hr))
        {
            OutputDebugString (TEXT("Cannot add filter\n"));
            return hr;
        }

        //MessageBox (NULL, _T(""), _T(""), MB_OK);
        // test connections
        // to upstream filter
        if (pConnectFilter)
        {
            if(fIsUpstream)
            {
                hr = ConnectFilters (pConnectFilter, pFilter);
            }
            else
            {
                hr = ConnectFilters (pFilter, pConnectFilter);
            }

            if(SUCCEEDED(hr))
            {
                //that's the filter we want
                fFoundFilter = TRUE;
                pFilter.QueryInterface (ppFilter);
                break;
            }
            else
            {
                fFoundFilter = FALSE;
                // that wasn't the the filter we wanted
                // so unload and try the next one
                hr = m_pFilterGraph->RemoveFilter(pFilter);

                if(FAILED(hr))
                {
                    OutputDebugString(TEXT("Failed unloading Filter\n"));
                    return hr;
                }
            }
        }
        else
        {
            fFoundFilter = TRUE;
            pFilter.QueryInterface (ppFilter);
            break;
        }

        pIMoniker = NULL;
        pFilter = NULL;
    } // while
    return S_OK;
}


// loads the demux into the FilterGraph
HRESULT
CBDAFilterGraph::LoadDemux()
{
    HRESULT hr = S_OK;
    
    hr = CoCreateInstance(
                        CLSID_MPEG2Demultiplexer, 
                        NULL, 
                        CLSCTX_INPROC_SERVER,
                        IID_IBaseFilter, 
                        reinterpret_cast<void**>(&m_pDemux)
                        );
    if (FAILED (hr))
    {
        ErrorMessageBox(TEXT("Could not CoCreateInstance CLSID_MPEG2Demultiplexer\n"));
        return hr;
    }

    hr = m_pFilterGraph->AddFilter(m_pDemux, L"Demux");
    if(FAILED(hr))
    {
        ErrorMessageBox(TEXT("Unable to add demux filter to graph\n"));
        return hr;
    }

    return hr;
}


// renders demux output pins
HRESULT
CBDAFilterGraph::RenderDemux()
{
    HRESULT             hr = S_OK;
    CComPtr <IPin>      pIPin;
    CComPtr <IPin>      pDownstreamPin;
    CComPtr <IEnumPins> pIEnumPins;
    PIN_DIRECTION       direction;

    if (!m_pDemux)
    {
        return E_FAIL;
    }

    // connect the demux to the capture device
    hr = ConnectFilters (m_pCaptureDevice, m_pDemux);

    if (FAILED (hr))
    {
        ErrorMessageBox(TEXT("Cannot connect demux to capture filter\n"));
        return hr;
    }

    // load transform information filter and connect it to the demux
    hr = LoadFilter (
                    KSCATEGORY_BDA_TRANSPORT_INFORMATION, 
                    &m_pTIF, 
                    m_pDemux, 
                    TRUE
                    );
    if (FAILED (hr))
    {
        ErrorMessageBox(TEXT("Cannot load TIF\n"));
        return hr;
    }

    // load multi protocol encapsulator
    hr = LoadFilter (
                    KSCATEGORY_BDA_RECEIVER_COMPONENT, 
                    &m_pMPE, 
                    m_pDemux, 
                    TRUE
                    );
    if (FAILED (hr))
    {
        ErrorMessageBox(TEXT("Cannot load MPE\n"));
        return hr;
    }

    // load IP Sink
    hr = LoadFilter (
                    KSCATEGORY_IP_SINK, 
                    &m_pIPSink, 
                    m_pMPE, 
                    TRUE
                    );
    if (FAILED (hr))
    {
        ErrorMessageBox(TEXT("Cannot load IP Sink\n"));
        return hr;
    }

    // render/connect the rest of the demux pins
    hr = m_pDemux->EnumPins (&pIEnumPins);
    if (FAILED (hr))
    {
        ErrorMessageBox(TEXT("Cannot get the enumpins\n"));
        return hr;
    }

    while(pIEnumPins->Next(1, &pIPin, 0) == S_OK)
    {
        hr = pIPin->QueryDirection(&direction);

        if(direction == PINDIR_OUTPUT)
        {
            pIPin->ConnectedTo (&pDownstreamPin);

            if(pDownstreamPin == NULL)
            {
                m_pFilterGraph->Render (pIPin);
            }

            pDownstreamPin = NULL;
        }
        pIPin = NULL;
    }

    return hr;
}


// removes each filter from the graph
HRESULT
CBDAFilterGraph::TearDownGraph()
{
    HRESULT hr = S_OK;
    CComPtr <IBaseFilter> pFilter;
    CComPtr <IEnumFilters> pIFilterEnum;

    m_pITuningSpace = NULL;

    if(m_fGraphBuilt || m_fGraphFailure)
    {
        // unload manually added filters
        m_pFilterGraph->RemoveFilter(m_pIPSink);
        m_pFilterGraph->RemoveFilter(m_pMPE);
        m_pFilterGraph->RemoveFilter(m_pTIF);
        m_pFilterGraph->RemoveFilter(m_pDemux);
        m_pFilterGraph->RemoveFilter(m_pNetworkProvider);
        m_pFilterGraph->RemoveFilter(m_pTunerDevice);
        m_pFilterGraph->RemoveFilter(m_pCaptureDevice);

        m_pIPSink = NULL;
        m_pMPE = NULL;
        m_pTIF = NULL;
        m_pDemux = NULL;
        m_pNetworkProvider = NULL;
        m_pTunerDevice = NULL;
        m_pDemodulatorDevice = NULL;
        m_pCaptureDevice = NULL;

        // now go unload rendered filters
        hr = m_pFilterGraph->EnumFilters(&pIFilterEnum);

        if(FAILED(hr))
        {
            ErrorMessageBox(TEXT("TearDownGraph: cannot EnumFilters\n"));
            return E_FAIL;
        }

        pIFilterEnum->Reset();

        while(pIFilterEnum->Next(1, &pFilter, 0) == S_OK) // addrefs filter
        {
            hr = m_pFilterGraph->RemoveFilter(pFilter);

            if (FAILED (hr))
                return hr;

            pIFilterEnum->Reset();
            pFilter.Release ();
        }
    }

#ifdef REGISTER_FILTERGRAPH
    if (m_dwGraphRegister)
    {
        RemoveGraphFromRot(m_dwGraphRegister);
        m_dwGraphRegister = 0;
    }
#endif

    m_fGraphBuilt = FALSE;
    return S_OK;
}


// ConnectFilters is called from BuildGraph
// to enumerate and connect pins
HRESULT
CBDAFilterGraph::ConnectFilters(
    IBaseFilter* pFilterUpstream, 
    IBaseFilter* pFilterDownstream
    )
{
    HRESULT         hr = E_FAIL;

    CComPtr <IPin>  pIPinUpstream;


    PIN_INFO        PinInfoUpstream;
    PIN_INFO        PinInfoDownstream;

    // validate passed in filters
    ASSERT (pFilterUpstream);
    ASSERT (pFilterDownstream);

    // grab upstream filter's enumerator
    CComPtr <IEnumPins> pIEnumPinsUpstream;
    hr = pFilterUpstream->EnumPins(&pIEnumPinsUpstream);

    if(FAILED(hr))
    {
        ErrorMessageBox(TEXT("Cannot Enumerate Upstream Filter's Pins\n"));
        return hr;
    }

    // iterate through upstream filter's pins
    while (pIEnumPinsUpstream->Next (1, &pIPinUpstream, 0) == S_OK)
    {
        hr = pIPinUpstream->QueryPinInfo (&PinInfoUpstream);
        if(FAILED(hr))
        {
            ErrorMessageBox(TEXT("Cannot Obtain Upstream Filter's PIN_INFO\n"));
            return hr;
        }

        CComPtr <IPin>  pPinDown;
        pIPinUpstream->ConnectedTo (&pPinDown);

        // bail if pins are connected
        // otherwise check direction and connect
        if ((PINDIR_OUTPUT == PinInfoUpstream.dir) && (pPinDown == NULL))
        {
            // grab downstream filter's enumerator
            CComPtr <IEnumPins> pIEnumPinsDownstream;
            hr = pFilterDownstream->EnumPins (&pIEnumPinsDownstream);
            if(FAILED(hr))
            {
                ErrorMessageBox(TEXT("Cannot enumerate pins on downstream filter!\n"));
                return hr;
            }

            // iterate through downstream filter's pins
            CComPtr <IPin>  pIPinDownstream;
            while (pIEnumPinsDownstream->Next (1, &pIPinDownstream, 0) == S_OK)
            {
                // make sure it is an input pin
                hr = pIPinDownstream->QueryPinInfo(&PinInfoDownstream);
                if(SUCCEEDED(hr))
                {
                    CComPtr <IPin>  pPinUp;

                    // Determine if the pin is already connected.  Note that 
                    // VFW_E_NOT_CONNECTED is expected if the pin isn't yet connected.
                    hr = pIPinDownstream->ConnectedTo (&pPinUp);
                    if(FAILED(hr) && hr != VFW_E_NOT_CONNECTED)
                    {
                        ErrorMessageBox(TEXT("Failed in pIPinDownstream->ConnectedTo()!\n"));
                        continue;
                    }

                    if ((PINDIR_INPUT == PinInfoDownstream.dir) && (pPinUp == NULL))
                    {
                        if (SUCCEEDED (m_pFilterGraph->Connect(
                                        pIPinUpstream,
                                        pIPinDownstream))
                                        )
                        {
                            PinInfoDownstream.pFilter->Release();
                            PinInfoUpstream.pFilter->Release();
                            return S_OK;
                        }
                    }
                }

                PinInfoDownstream.pFilter->Release();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人一区二区在线观看| 欧美系列日韩一区| 韩国女主播成人在线观看| 丝瓜av网站精品一区二区| 亚洲综合色成人| 一区二区成人在线视频| 亚洲一级在线观看| 亚洲成人动漫精品| 日韩国产高清影视| 麻豆一区二区在线| 精品影视av免费| 国产一区二区三区不卡在线观看| 国内精品久久久久影院一蜜桃| 免费一级欧美片在线观看| 美腿丝袜亚洲色图| 国产一区二区剧情av在线| 粉嫩蜜臀av国产精品网站| 成人午夜私人影院| 91丨porny丨户外露出| 91黄色免费版| 91精品国产高清一区二区三区蜜臀| 制服视频三区第一页精品| 日韩美女一区二区三区四区| 久久久www成人免费无遮挡大片| 国产欧美综合在线观看第十页| 国产欧美日韩另类一区| 亚洲精品写真福利| 日韩激情一二三区| 国产一区二区在线看| www.欧美亚洲| 欧美午夜电影在线播放| 日韩一级黄色片| 国产欧美一区二区精品久导航 | 午夜精品久久久久久久久久久| 亚洲午夜久久久久| 免费在线观看视频一区| 国产电影精品久久禁18| 色综合久久久久综合99| 91精品国产91热久久久做人人| 337p日本欧洲亚洲大胆色噜噜| 国产精品美女一区二区三区| 亚洲一区二区三区四区不卡| 久久国产剧场电影| 91网站在线观看视频| 69精品人人人人| 国产精品另类一区| 视频一区视频二区中文| 国产精品亚洲成人| 欧美色中文字幕| 久久久久9999亚洲精品| 一区二区理论电影在线观看| 黄色日韩网站视频| 在线国产电影不卡| 久久午夜电影网| 亚洲高清久久久| 丰满少妇久久久久久久| 在线成人av影院| 亚洲欧美一区二区在线观看| 奇米影视一区二区三区| 色88888久久久久久影院野外 | 午夜精品久久久久久久久久| 国产69精品久久99不卡| 制服丝袜中文字幕亚洲| 亚洲欧洲日韩综合一区二区| 日本伊人色综合网| 日本精品一级二级| 国产亚洲欧美在线| 日韩精品乱码免费| 色婷婷亚洲精品| 国产欧美一区二区精品秋霞影院 | 国产精品99久| 91精品国产免费久久综合| 亚洲欧洲成人av每日更新| 精品一二三四在线| 91精品国产手机| 亚洲精品国产一区二区三区四区在线| 韩国女主播成人在线观看| 欧美精品日韩综合在线| 一区二区三区四区不卡视频| 成人夜色视频网站在线观看| 日韩久久久久久| 午夜成人在线视频| 欧美视频三区在线播放| 中文字幕综合网| 成人精品一区二区三区四区| 欧美sm极限捆绑bd| 蜜桃久久久久久| 欧美精选一区二区| 午夜影院久久久| 色婷婷精品大在线视频| 亚洲天天做日日做天天谢日日欢| 国产成人免费视| 精品国产一区a| 麻豆一区二区三| 宅男在线国产精品| 日韩精品乱码免费| 91 com成人网| 日本美女一区二区| 3d动漫精品啪啪1区2区免费| 亚洲18色成人| 欧美日韩不卡在线| 日本最新不卡在线| 91精品国产色综合久久| 日韩中文字幕麻豆| 欧美日韩一区三区| 天天综合色天天| 51精品秘密在线观看| 蜜乳av一区二区| 精品国产亚洲在线| 国产不卡免费视频| 国产精品欧美经典| 91免费看视频| 亚洲成人免费av| 日韩一区二区视频| 国产一区二三区好的| 国产精品毛片高清在线完整版| 成人黄色一级视频| 亚洲六月丁香色婷婷综合久久| 色综合久久综合中文综合网| 亚洲制服丝袜av| 337p亚洲精品色噜噜狠狠| 美女视频黄a大片欧美| 久久综合九色综合欧美亚洲| 懂色av一区二区三区免费观看| 国产精品人人做人人爽人人添| 9l国产精品久久久久麻豆| 一区二区三区在线视频免费| 欧美日韩一区三区四区| 久久99久久精品欧美| 欧美激情在线一区二区三区| 色综合中文字幕国产 | 国产午夜精品福利| 97se亚洲国产综合自在线| 亚洲在线视频免费观看| 欧美丰满嫩嫩电影| 国产在线一区观看| 1024成人网色www| 欧美高清你懂得| 国产麻豆日韩欧美久久| 日韩一区欧美一区| 91精品国产麻豆| 国产成人免费在线观看不卡| 亚洲激情第一区| 日韩三级电影网址| 成人黄页在线观看| 午夜精品爽啪视频| 国产精品私房写真福利视频| 欧美日韩精品高清| 国产成人在线色| 午夜国产精品影院在线观看| 久久美女高清视频| 在线观看视频91| 经典一区二区三区| 一区二区三区欧美视频| 亚洲精品一线二线三线无人区| 99国产精品99久久久久久| 久久精工是国产品牌吗| 亚洲欧美日韩在线| 精品国产免费一区二区三区四区 | 精品国产一区二区三区久久影院 | 欧美麻豆精品久久久久久| 高清不卡一二三区| 日韩精彩视频在线观看| 亚洲欧洲av另类| 精品国产乱子伦一区| 欧洲国内综合视频| 国产91露脸合集magnet| 亚洲h精品动漫在线观看| 国产精品三级av| 欧美成人精品1314www| 欧美自拍丝袜亚洲| av动漫一区二区| 国产在线看一区| 天天影视色香欲综合网老头| 亚洲欧洲成人精品av97| 国产亚洲欧美日韩在线一区| 欧美日韩精品一区二区三区| 91在线免费播放| 国产成人免费网站| 国产一区视频在线看| 日本不卡不码高清免费观看| 亚洲综合久久久久| 亚洲日本中文字幕区| 日本一二三四高清不卡| 精品sm在线观看| 欧美一区二区三区四区在线观看 | 亚洲一区二区三区中文字幕在线| 国产午夜精品一区二区| 26uuu色噜噜精品一区二区| 日韩一区二区三区高清免费看看 | 亚洲精选一二三| 国产精品久久久久aaaa樱花| 久久精品欧美一区二区三区不卡| 日韩午夜在线播放| 欧美一区二区三区成人| 欧美日本国产一区| 欧美日韩国产美| 欧美日韩性生活| 欧美日韩亚洲综合一区二区三区| 欧美制服丝袜第一页|