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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? graph.cpp

?? < VC++視頻音頻開發(fā)>> 這本書的源碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號(hào):
//------------------------------------------------------------------------------
// File: Graph.cpp
//
// Desc: Sample code for BDA graph building.
//
// Copyright (c) 2000-2002, Microsoft Corporation. All rights reserved.
//------------------------------------------------------------------------------

#include "graph.h"


// 
// NOTE: In this sample, text strings are hard-coded for 
// simplicity and for readability.  For product code, you should
// use string tables and LoadString().
//

//
// An application can advertise the existence of its filter graph
// by registering the graph with a global Running Object Table (ROT).
// The GraphEdit application can detect and remotely view the running
// filter graph, allowing you to 'spy' on the graph with GraphEdit.
//
// To enable registration in this sample, define REGISTER_FILTERGRAPH.
//
#define REGISTER_FILTERGRAPH

// We use channel 46 internally for testing.  Change this constant to any value.
#define DEFAULT_PHYSICAL_CHANNEL    46L


// Constructor, initializes member variables
// and calls InitializeGraphBuilder
CBDAFilterGraph::CBDAFilterGraph() :
    m_fGraphBuilt(FALSE),
    m_fGraphRunning(FALSE),
    m_NetworkType(ATSC),
    m_lMajorChannel(-1), 
    m_lMinorChannel(-1),
    m_lPhysicalChannel(DEFAULT_PHYSICAL_CHANNEL),
    m_dwGraphRegister (0)
{
    if(FAILED(InitializeGraphBuilder()))
        m_fGraphFailure = TRUE;
    else
        m_fGraphFailure = FALSE;
}


// Destructor
CBDAFilterGraph::~CBDAFilterGraph()
{
    if(m_fGraphRunning)
    {
        StopGraph();
    }

    if(m_fGraphBuilt || m_fGraphFailure)
    {
        TearDownGraph();
    }
}


// Instantiate graph object for filter graph building
HRESULT
CBDAFilterGraph::InitializeGraphBuilder()
{
    HRESULT hr = S_OK;
    
    // we have a graph already
    if (m_pFilterGraph)
        return S_OK;

    // create the filter graph
    if (FAILED (hr = m_pFilterGraph.CoCreateInstance (CLSID_FilterGraph)))
    {
        ErrorMessageBox(TEXT("Couldn't CoCreate IGraphBuilder\n"));
        m_fGraphFailure = true;
        return hr;
    }
    
    return hr;
}


// BuildGraph sets up devices, adds and connects filters
HRESULT
CBDAFilterGraph::BuildGraph(NETWORK_TYPE NetType)
{
    HRESULT hr = S_OK;
    m_NetworkType = NetType;

    // if we have already have a filter graph, tear it down
    if(m_fGraphBuilt)
    {
        if(m_fGraphRunning)
        {
            hr = StopGraph ();
        }

        hr = TearDownGraph ();
    }

    // STEP 1: load network provider first so that it can configure other
    // filters, such as configuring the demux to sprout output pins.
    // We also need to submit a tune request to the Network Provider so it will
    // tune to a channel
    if(FAILED (hr = LoadNetworkProvider()))
    {
        ErrorMessageBox(TEXT("Cannot load network provider\n"));
        TearDownGraph();
        m_fGraphFailure = true;
        return hr;
    }

    hr = m_pNetworkProvider->QueryInterface(__uuidof (ITuner), reinterpret_cast <void**> (&m_pITuner));
    if(FAILED (hr))
    {
        ErrorMessageBox(TEXT("pNetworkProvider->QI: Can't QI for ITuner.\n"));
        TearDownGraph();
        m_fGraphFailure = true;
        return hr;
    }

    // create a tune request to initialize the network provider
    // before connecting other filters
    CComPtr <IATSCChannelTuneRequest>  pATSCTuneRequest;
    if(FAILED (hr = CreateATSCTuneRequest(
                                        m_lPhysicalChannel,
                                        m_lMajorChannel, 
                                        m_lMinorChannel,
                                        &pATSCTuneRequest
                                        )))
    {
        ErrorMessageBox(TEXT("Cannot create tune request\n"));
        TearDownGraph();
        m_fGraphFailure = true;
        return hr;
    }

    //submit the tune request to the network provider
    hr = m_pITuner->put_TuneRequest(pATSCTuneRequest);
    if(FAILED(hr))
    {
        ErrorMessageBox(TEXT("Cannot submit the tune request\n"));
        TearDownGraph();
        m_fGraphFailure = true;
        return hr;
    }


    // STEP2: Load tuner device and connect to network provider
    if(FAILED (hr = LoadFilter (
                                KSCATEGORY_BDA_NETWORK_TUNER, 
                                &m_pTunerDevice,
                                m_pNetworkProvider, 
                                TRUE
                                )))
    {
        ErrorMessageBox(TEXT("Cannot load tuner device and connect network provider\n"));
        TearDownGraph();
        m_fGraphFailure = true;
        return hr;
    }

    // STEP3: Load tuner device and connect to demodulator device
    if(FAILED (hr = LoadFilter (
                                KSCATEGORY_BDA_RECEIVER_COMPONENT, 
                                &m_pDemodulatorDevice,
                                m_pTunerDevice, 
                                TRUE
                                )))
    {
        ErrorMessageBox(TEXT("Cannot load capture device and connect tuner\n"));
        TearDownGraph();
        m_fGraphFailure = true;
        return hr;
    }

    // Step4: Load capture device and connect to tuner device
    if(FAILED (hr = LoadFilter (
                                KSCATEGORY_BDA_RECEIVER_COMPONENT, 
                                &m_pCaptureDevice,
                                m_pDemodulatorDevice, 
                                TRUE
                                )))
    {
        ErrorMessageBox(TEXT("Cannot load capture device and connect tuner\n"));
        TearDownGraph();
        m_fGraphFailure = true;
        return hr;
    }

    // Step5: Load demux
    if(FAILED (hr = LoadDemux()))
    {
        ErrorMessageBox(TEXT("Cannot load demux\n"));
        TearDownGraph();
        m_fGraphFailure = true;
        return hr;
    }

    //
    // this next call loads and connects filters associated with
    // the demultiplexor. if you want to manually load individual
    // filters such as audio and video decoders, use the code at
    // the bottom of this file
    //
#ifdef REGISTER_FILTERGRAPH
    hr = AddGraphToRot (m_pFilterGraph, &m_dwGraphRegister);
    if (FAILED(hr))
    {
        ///ErrorMessageBox(TEXT("Failed to register filter graph with ROT!  hr=0x%x"), hr);
        m_dwGraphRegister = 0;
    }
#endif

    // Step6: Render demux pins
    if(FAILED (hr = RenderDemux()))
    {
        ErrorMessageBox(TEXT("Cannot load demux\n"));
        TearDownGraph();
        m_fGraphFailure = true;
        return hr;
    }

    m_fGraphBuilt = true;
    m_fGraphFailure = false;
    
    return S_OK;
}


// Loads the correct tuning space based on NETWORK_TYPE that got
// passed into BuildGraph()
HRESULT
CBDAFilterGraph::LoadTuningSpace()
{   
    CComPtr <ITuningSpaceContainer>  pITuningSpaceContainer;

    // get the tuningspace container for all the tuning spaces from SYSTEM_TUNING_SPACES
    HRESULT hr = pITuningSpaceContainer.CoCreateInstance(CLSID_SystemTuningSpaces);
    if (FAILED (hr))
    {
        ErrorMessageBox(TEXT("Could not CoCreate SystemTuningSpaces\n"));
        return hr;
    }

    CComVariant var (m_NetworkType);

    hr = pITuningSpaceContainer->get_Item(var, &m_pITuningSpace);

    if(FAILED(hr))
    {
        ErrorMessageBox(TEXT("Unable to retrieve Tuning Space\n"));
    }

    return hr;
}


// Creates an ATSC Tune Request
HRESULT
CBDAFilterGraph::CreateATSCTuneRequest(
        LONG lPhysicalChannel,
        LONG lMajorChannel, 
        LONG lMinorChannel,
        IATSCChannelTuneRequest**   pTuneRequest
    )
{
    HRESULT hr = S_OK;

    if (pTuneRequest == NULL)
    {
        ErrorMessageBox (TEXT("Invalid pointer\n"));
        return E_POINTER;
    }

    // Making sure we have a valid tuning space
    if (m_pITuningSpace == NULL)
    {
        ErrorMessageBox(TEXT("Tuning Space is NULL\n"));
        return E_FAIL;
    }

    //  Create an instance of the ATSC tuning space
    CComQIPtr <IATSCTuningSpace> pATSCTuningSpace (m_pITuningSpace);
    if (!pATSCTuningSpace)
    {
        ErrorMessageBox(TEXT("Cannot QI for an IATSCTuningSpace\n"));
        return E_FAIL;
    }

    //  Create an empty tune request.
    CComPtr <ITuneRequest> pNewTuneRequest;
    hr = pATSCTuningSpace->CreateTuneRequest(&pNewTuneRequest);

    if (FAILED (hr))
    {
        ErrorMessageBox(TEXT("CreateTuneRequest: Can't create tune request.\n"));
        return hr;
    }

    //query for an IATSCChannelTuneRequest interface pointer
    CComQIPtr <IATSCChannelTuneRequest> pATSCTuneRequest (pNewTuneRequest);
    if (!pATSCTuneRequest)
    {
        ErrorMessageBox(TEXT("CreateATSCTuneRequest: Can't QI for IATSCChannelTuneRequest.\n"));
        return E_FAIL;
    }

    //  Set the initial major and minor channels
    hr = pATSCTuneRequest->put_Channel(lMajorChannel);
    if(FAILED(hr))
    {
        ErrorMessageBox(TEXT("put_Channel failed\n"));
        return hr;
    }

    hr = pATSCTuneRequest->put_MinorChannel(lMinorChannel);
    if(FAILED(hr))
    {
        ErrorMessageBox(TEXT("put_MinorChannel failed\n"));
        return hr;
    }

    CComPtr <IATSCLocator> pATSCLocator;
    hr = pATSCLocator.CoCreateInstance (CLSID_ATSCLocator);
    if (FAILED( hr))
    {
        ErrorMessageBox(TEXT("Cannot create the ATSC locator failed\n"));
        return hr;
    }

    //  Set the initial physical channel.
    //
    hr = pATSCLocator->put_PhysicalChannel (lPhysicalChannel);
    if (FAILED( hr))
    {
        ErrorMessageBox(TEXT("Cannot put the physical channel\n"));
        return hr;
    }

    hr = pATSCTuneRequest->put_Locator (pATSCLocator);
    if (FAILED (hr))
    {
        ErrorMessageBox(TEXT("Cannot put the locator\n"));
        return hr;
    }

    hr = pATSCTuneRequest.QueryInterface (pTuneRequest);

    return hr;
}


// LoadNetworkProvider loads network provider
HRESULT
CBDAFilterGraph::LoadNetworkProvider()
{
    HRESULT     hr = S_OK;
    CComBSTR    bstrNetworkType;
    CLSID       CLSIDNetworkType;

    // obtain tuning space then load network provider
    if(m_pITuningSpace == NULL)
    {
        hr = LoadTuningSpace();
        if(FAILED(hr))
        {
            ErrorMessageBox(TEXT("Cannot load TuningSpace\n"));
            return hr;
        }
    }

    // Get the current Network Type clsid
    hr = m_pITuningSpace->get_NetworkType(&bstrNetworkType);
    if (FAILED (hr))
    {
        ErrorMessageBox(TEXT("ITuningSpace::Get Network Type failed\n"));
        return hr;
    }

    hr = CLSIDFromString(bstrNetworkType, &CLSIDNetworkType);
    if (FAILED (hr))
    {
        ErrorMessageBox(TEXT("Couldn't get CLSIDFromString\n"));
        return hr;
    }

    // create the network provider based on the clsid obtained from the tuning space
    hr = CoCreateInstance(CLSIDNetworkType, NULL, CLSCTX_INPROC_SERVER,
                          IID_IBaseFilter, 
                          reinterpret_cast<void**>(&m_pNetworkProvider));
    if (FAILED (hr))
    {
        ErrorMessageBox(TEXT("Couldn't CoCreate Network Provider\n"));
        return hr;
    }

    //add the Network Provider filter to the graph
    hr = m_pFilterGraph->AddFilter(m_pNetworkProvider, L"Network Provider");

    return hr;
}


// enumerates through registered filters
// instantiates the the filter object and adds it to the graph
// it checks to see if it connects to upstream filter
// if not,  on to the next enumerated filter
// used for tuner, capture, MPE Data Filters and decoders that
// could have more than one filter object
// if pUpstreamFilter is NULL don't bother connecting
HRESULT

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区四区在线| 国产日韩精品一区二区三区| 成人久久18免费网站麻豆| 久久99国产精品尤物| 九色|91porny| 黄色小说综合网站| 国产精品一二二区| 成人av在线影院| av网站一区二区三区| 99视频有精品| 欧美日韩亚洲另类| 91精品国产综合久久精品app | 亚洲婷婷综合色高清在线| 国产欧美综合色| 综合av第一页| 夜夜精品视频一区二区 | 中文字幕成人在线观看| 亚洲国产精品传媒在线观看| 亚洲欧洲国产日韩| 夜夜嗨av一区二区三区网页| 美女视频黄免费的久久 | 国产成人综合在线播放| 成人丝袜18视频在线观看| 日本高清视频一区二区| 欧美一三区三区四区免费在线看| 欧美变态tickling挠脚心| 日本一区二区三区久久久久久久久不| 中文字幕在线免费不卡| 一区二区免费在线播放| 国产一区二区三区免费在线观看| 不卡在线观看av| 5566中文字幕一区二区电影| 久久免费视频一区| 一区二区三区日韩精品| 狠狠色综合日日| 99精品视频在线播放观看| 欧美日韩1区2区| 中文在线一区二区| 亚洲风情在线资源站| 国产成人av一区二区三区在线观看| 色综合久久88色综合天天免费| 欧美一区二区三区日韩| 亚洲六月丁香色婷婷综合久久| 蜜臀精品一区二区三区在线观看 | 成人av网站在线| 67194成人在线观看| 久久精品一区八戒影视| 亚洲成在人线免费| bt欧美亚洲午夜电影天堂| 欧美一区二区三区精品| 亚洲人成伊人成综合网小说| 免费成人美女在线观看| 欧亚洲嫩模精品一区三区| 欧美成人vps| 奇米影视在线99精品| 欧洲激情一区二区| 国产亚洲一区二区三区四区| 亚洲一级在线观看| 成人精品鲁一区一区二区| 欧美v日韩v国产v| 天天综合天天做天天综合| 91网页版在线| 国产精品色哟哟| 精品亚洲成av人在线观看| 欧美在线观看一区| 1024成人网| 国产一区二区三区免费| 欧美欧美欧美欧美| 亚洲午夜久久久久久久久电影网| 粉嫩aⅴ一区二区三区四区 | 国产亚洲成av人在线观看导航| 亚洲成a人v欧美综合天堂| 不卡视频在线观看| 国产精品主播直播| av在线不卡观看免费观看| 亚洲一区二区影院| 99精品视频在线免费观看| 色悠悠亚洲一区二区| 国产精品久久久一本精品 | 91精品国产综合久久精品app | 色综合久久久久综合99| 亚洲天堂免费在线观看视频| 成人精品gif动图一区| 欧美激情一区二区三区不卡| 国产精品香蕉一区二区三区| 久久精品视频一区| 成人高清免费观看| 亚洲欧美aⅴ...| 在线视频国产一区| 日欧美一区二区| 精品日韩一区二区三区免费视频| 麻豆成人免费电影| 欧美激情综合五月色丁香| 91在线视频观看| 亚洲18影院在线观看| 日韩精品一区二区三区四区视频| 国产精品996| 一区二区三区鲁丝不卡| 欧美一级高清大全免费观看| 国产美女精品在线| 亚洲精品国产无天堂网2021| 欧美一区二区黄| 国产成人综合视频| 亚洲曰韩产成在线| 欧美哺乳videos| av在线这里只有精品| 亚洲福利一二三区| 国产香蕉久久精品综合网| 91麻豆国产在线观看| 美女视频一区在线观看| 中文字幕中文字幕在线一区 | 91久久精品一区二区二区| 久久精品国产秦先生| 亚洲三级在线观看| 26uuu精品一区二区| 欧美视频在线一区| 成人自拍视频在线| 日韩激情一二三区| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 欧美精品在欧美一区二区少妇| 成人永久aaa| 捆绑调教美女网站视频一区| 亚洲免费伊人电影| 国产亚洲精品久| 欧美xxxx老人做受| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 国产一区二区三区av电影| 亚洲第一福利视频在线| 亚洲欧美日本韩国| 国产精品网站在线播放| 欧美成人官网二区| 91精品国产免费| 欧美精品18+| 欧洲在线/亚洲| 91理论电影在线观看| 丁香婷婷综合网| 国产成人精品免费一区二区| 精品一区二区三区在线观看 | 精品一区二区三区免费毛片爱 | 亚洲伦理在线精品| 中文字幕一区二区三区视频 | 欧美这里有精品| a在线播放不卡| 成人高清视频免费观看| 国产精品123| 国产成人在线观看| 国产成人免费9x9x人网站视频| 国内精品久久久久影院色 | 夜夜嗨av一区二区三区四季av| 国产精品拍天天在线| 国产欧美日韩视频在线观看| 久久综合中文字幕| 久久午夜国产精品| 国产色综合一区| 国产亲近乱来精品视频 | 亚洲午夜电影在线观看| 一区二区理论电影在线观看| 亚洲精品免费视频| 夜夜嗨av一区二区三区| 亚洲国产色一区| 视频精品一区二区| 美女精品自拍一二三四| 精品午夜一区二区三区在线观看| 久久精品国产成人一区二区三区| 狠狠网亚洲精品| 成人久久久精品乱码一区二区三区| 波多野结衣在线aⅴ中文字幕不卡| 成人av影视在线观看| 色成人在线视频| 欧美精品乱码久久久久久| 日韩一区二区视频在线观看| 久久一区二区三区四区| 国产精品久久久久久福利一牛影视| 亚洲精品视频在线看| 青青草97国产精品免费观看| 国产精品自拍av| 色猫猫国产区一区二在线视频| 欧美日韩夫妻久久| 久久亚洲精品国产精品紫薇| 亚洲日本韩国一区| 久久精品国产第一区二区三区| 成人国产视频在线观看| 欧美日韩激情一区| 久久精品夜夜夜夜久久| 亚洲人午夜精品天堂一二香蕉| 免费在线观看一区| 91一区二区三区在线播放| 欧美一区二区在线看| 国产喷白浆一区二区三区| 亚洲成av人在线观看| 丁香网亚洲国际| 日韩午夜激情av| 亚洲激情网站免费观看| 国精品**一区二区三区在线蜜桃| 日本高清不卡aⅴ免费网站| 精品久久一区二区三区| 亚洲乱码国产乱码精品精98午夜| 久久国内精品自在自线400部| 欧美最猛黑人xxxxx猛交| 久久精品亚洲精品国产欧美|