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

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

?? dsrecv.cpp

?? MPEG4網(wǎng)絡(luò)傳輸(DSnetwork)修改后的cpp和.h文件
?? CPP
字號(hào):
//------------------------------------------------------------------------------
// File: DSRecv.cpp
//
// Desc: DirectShow sample code - implementation of DSNetwork sample filters
//
// Copyright (c) 2000-2002  Microsoft Corporation.  All rights reserved.
//------------------------------------------------------------------------------

#include "precomp.h"
#include "le.h"
#include "nutil.h"
#include "dsnetifc.h"
#include "buffpool.h"
#include "netrecv.h"
#include "dsrecv.h"
#include "mspool.h"
#include "alloc.h"



//  ---------------------------------------------------------------------------
//  ---------------------------------------------------------------------------

CNetOutputPin::CNetOutputPin (
    IN  TCHAR *         szName,
    IN  CBaseFilter *   pFilter,
    IN  CCritSec *      pLock,
    OUT HRESULT *       pHr,
    IN  LPCWSTR         pszName
    ) : CBaseOutputPin  (szName,
                         pFilter,
                         pLock,
                         pHr,
                         pszName
                         )
{
}

CNetOutputPin::~CNetOutputPin (
    )
{
}

HRESULT
CNetOutputPin::GetMediaType (
    IN  int             iPosition,
    OUT CMediaType *    pmt
    )
{
    HRESULT hr ;

    if (iPosition == 0) {
        ASSERT (pmt) ;
        pmt -> InitMediaType () ;

////////修改了DSnetwork原有的MPEG2的MEDIATYPE和MEDIASUBTYPE, 注意DIVX是在dsrecv.h定義的GUID
        pmt -> SetType      (& MEDIATYPE_Video) ;
        pmt -> SetSubtype   (& DIVX) ;  
////////設(shè)置outputpin的Format
		VIDEOINFO *pvi = (VIDEOINFO *) pmt->AllocFormatBuffer(sizeof(VIDEOINFO));
		ZeroMemory(pvi, sizeof(VIDEOINFO));
		DWORD fccXvid = '3VID';  
		pvi->bmiHeader.biCompression = fccXvid;
		pvi->bmiHeader.biBitCount    = 24;
		pvi->bmiHeader.biSize       = sizeof(BITMAPINFOHEADER);
		pvi->bmiHeader.biWidth      = 320;
		pvi->bmiHeader.biHeight     = 240;
		//pvi->bmiHeader.biPlanes     = 1;
		pvi->bmiHeader.biSizeImage  = GetBitmapSize(&pvi->bmiHeader);
		SetRectEmpty(&(pvi->rcSource));
		SetRectEmpty(&(pvi->rcTarget));
		pmt->SetFormatType(&FORMAT_VideoInfo);
		//pmt->SetTemporalCompression(FALSE);
		pmt->SetSampleSize(pvi->bmiHeader.biSizeImage);
///////////////////////////

        hr = S_OK ;
    }
    else {
        hr = VFW_S_NO_MORE_ITEMS ;
    }

    return hr ;
}

HRESULT
CNetOutputPin::CheckMediaType (
    IN  const CMediaType * pmt
    )
{
	HRESULT hr ;

    ASSERT (pmt) ;
////////去除check功能
/*
    if (pmt -> majortype    == MEDIATYPE_Video &&
        pmt -> subtype      == DIVX) {

        hr = S_OK ;
    }
    else {
        hr = S_FALSE ;
    }

    return hr ;
*/
	return S_OK;
}

HRESULT
CNetOutputPin::InitAllocator (
    OUT IMemAllocator ** ppAlloc
    )
{
    (* ppAlloc) = NET_RECV (m_pFilter) -> GetRecvAllocator () ;
    (* ppAlloc) -> AddRef () ;

    return S_OK ;
}

HRESULT
CNetOutputPin::DecideBufferSize (
    IN  IMemAllocator *         pIMemAllocator,
    OUT ALLOCATOR_PROPERTIES *  pProp
    )
{
    HRESULT hr ;

    if (pIMemAllocator == NET_RECV (m_pFilter) -> GetRecvAllocator ()) {
        //  we're the allocator; get the properties and succeed
        hr = NET_RECV (m_pFilter) -> GetRecvAllocator () -> GetProperties (pProp) ;
    }
    else {
        //  this is not our allocator; fail the call
        hr = E_FAIL ;
    }

    return hr ;
}

//  ---------------------------------------------------------------------------
//  ---------------------------------------------------------------------------

CNetworkReceiverFilter::CNetworkReceiverFilter (
    IN  TCHAR *     tszName,
    IN  LPUNKNOWN   punk,
    OUT HRESULT *   phr
    ) : CBaseFilter         (
                             tszName,
                             punk,
                             & m_crtFilterLock,
                             CLSID_DSNetSend
                             ),
        CPersistStream      (punk,
                             phr
                             ),
        m_pOutput           (NULL),
        m_pIMemAllocator    (NULL),
        m_ulIP              ((unsigned long) UNDEFINED),
        m_ulNIC             ((unsigned long) UNDEFINED),
        m_pBufferPool       (NULL),
        m_pNetReceiver      (NULL),
        m_pMSPool           (NULL),
        m_pNetRecvAlloc     (NULL)
{
    //  instantiate the output pin
    m_pOutput = new CNetOutputPin (
                            NAME ("CNetOutputPin"),
                            this,
                            & m_crtFilterLock,
                            phr,
                            L"DIVX"	//修改
                            ) ;
    if (m_pOutput == NULL ||
        FAILED (* phr)) {

        (* phr) = (FAILED (* phr) ? * phr : E_OUTOFMEMORY) ;
        return ;
    }

    //  the buffer pool
    m_pBufferPool = new CBufferPool (POOL_SIZE, MAX_IOBUFFER_LENGTH, phr) ;
    if (m_pBufferPool == NULL ||
        FAILED (*phr)) {

        (* phr) = (FAILED (* phr) ? * phr : E_OUTOFMEMORY) ;
        return ;
    }

    //  the receiver object
    m_pNetReceiver = new CNetReceiver (m_pBufferPool, this, phr) ;
    if (m_pNetReceiver == NULL ||
        FAILED (*phr)) {

        (* phr) = (FAILED (* phr) ? * phr : E_OUTOFMEMORY) ;
        return ;
    }

    //  the media sample pool
    m_pMSPool = new CTSMediaSamplePool (MEDIA_SAMPLE_POOL_SIZE, this, phr) ;
    if (m_pMSPool == NULL ||
        FAILED (*phr)) {

        (* phr) = (FAILED (* phr) ? * phr : E_OUTOFMEMORY) ;
        return ;
    }

    //  IMemAllocator
    m_pNetRecvAlloc = new CNetRecvAlloc (m_pBufferPool, m_pMSPool, this) ;
    if (m_pNetRecvAlloc == NULL) {
        (* phr) = E_OUTOFMEMORY ;
        return ;
    }
}

CNetworkReceiverFilter::~CNetworkReceiverFilter ()
{
    delete m_pNetReceiver ;
    delete m_pOutput ;
    RELEASE_AND_CLEAR (m_pIMemAllocator) ;
    delete m_pBufferPool ;
    delete m_pMSPool ;
    delete m_pNetRecvAlloc ;
}

CBasePin *
CNetworkReceiverFilter::GetPin (
    IN  int Index
    )
{
    CBasePin *  pPin ;

    LockFilter () ;

    if (Index == 0) {
        pPin = m_pOutput ;
    }
    else {
        pPin = NULL ;
    }

    UnlockFilter () ;

    return pPin ;
}

STDMETHODIMP
CNetworkReceiverFilter::Pause (
    )
{
    HRESULT hr ;

    LockFilter () ;

    if (m_ulIP == UNDEFINED ||
        m_ulNIC == UNDEFINED) {

        hr = E_FAIL ;
    }
    else if  (m_State == State_Stopped) {

        //  --------------------------------------------------------------------
        //  stopped -> pause transition; get the filter up and running

        //  activate the receiver; joins the multicast group and starts the
        //  thread
        hr = m_pNetReceiver -> Activate (m_ulIP, m_usPort, m_ulNIC) ;

        if (SUCCEEDED (hr)) {
            m_State = State_Paused ;

            if (m_pOutput &&
                m_pOutput -> IsConnected ()) {
                m_pOutput -> Active () ;
            }
        }
    }
    else {
        //  --------------------------------------------------------------------
        //  run -> pause transition; do nothing but set the state

        m_State = State_Paused ;

        hr = S_OK ;
    }

    UnlockFilter () ;

    return hr ;
}

STDMETHODIMP
CNetworkReceiverFilter::Stop (
    )
{
    LockFilter () ;

    //  synchronous call to stop the receiver (leaves the multicast group
    //  and terminates the thread)
    m_pNetReceiver -> Stop () ;

    //  if we have an output pin (we should) stop it
    if (m_pOutput) {
        m_pOutput -> Inactive () ;
    }

    m_State = State_Stopped ;

    UnlockFilter () ;

    return S_OK ;
}

CUnknown *
CNetworkReceiverFilter::CreateInstance (
    IN  LPUNKNOWN   punk,
    OUT HRESULT *   phr
    )
{
    CNetworkReceiverFilter * pnf ;

    (* phr) = S_OK ;

    pnf = new CNetworkReceiverFilter (
                    NAME ("CNetworkReceiverFilter"),
                    punk,
                    phr
                    ) ;
    if (pnf == NULL ||
        FAILED (* phr)) {
        (* phr) = (FAILED (* phr) ? (* phr) : E_OUTOFMEMORY) ;
        DELETE_RESET (pnf) ;
    }

    return pnf ;
}

STDMETHODIMP
CNetworkReceiverFilter::NonDelegatingQueryInterface (
    IN  REFIID  riid,
    OUT void ** ppv
    )
{
    //  property pages

    if (riid == IID_ISpecifyPropertyPages) {

        return GetInterface (
                    (ISpecifyPropertyPages *) this,
                    ppv
                    ) ;
    }

    //  multicast config

    else if (riid == IID_IMulticastConfig) {

        return GetInterface (
                    (IMulticastConfig *) this,
                    ppv
                    ) ;
    }

    //  we do persist

    else if (riid == IID_IPersistStream) {

        return GetInterface (
                    (IPersistStream *) this,
                    ppv
                    ) ;
    }

    //  fallback - call the baseclass

    else {
        return CBaseFilter::NonDelegatingQueryInterface (riid, ppv) ;
    }
}

STDMETHODIMP
CNetworkReceiverFilter::GetPages (
    IN OUT CAUUID * pPages
    )
{
    HRESULT hr ;

    pPages -> cElems = 1 ;

    pPages -> pElems = (GUID *) CoTaskMemAlloc (pPages -> cElems * sizeof GUID) ;

    if (pPages -> pElems) {
        (pPages -> pElems) [0] = CLSID_IPMulticastRecvProppage ;
        hr = S_OK ;
    }
    else {
        hr = E_OUTOFMEMORY ;
    }

    return hr ;
}

STDMETHODIMP
CNetworkReceiverFilter::SetNetworkInterface (
    IN  ULONG   ulNIC
    )
{
    HRESULT hr ;

    LockFilter () ;

    if (m_State != State_Stopped) {
        hr = E_UNEXPECTED ;
    }
    else if (IsUnicastIP (ulNIC) ||
        ulNIC == INADDR_ANY) {

        m_ulNIC = ulNIC ;
        hr = S_OK ;
    }
    else {
        hr = E_INVALIDARG ;
    }

    UnlockFilter () ;

    return hr ;
}

STDMETHODIMP
CNetworkReceiverFilter::GetNetworkInterface (
    OUT ULONG * pulNIC
    )
{
    HRESULT hr ;

    LockFilter () ;

    if (pulNIC) {
        (* pulNIC) = m_ulNIC ;
        hr = S_OK ;
    }
    else {
        hr = E_INVALIDARG ;
    }

    UnlockFilter () ;

    return hr ;
}

STDMETHODIMP
CNetworkReceiverFilter::SetMulticastGroup (
    IN  ULONG   ulIP,
    IN  USHORT  usPort
    )
{
    HRESULT hr ;

    LockFilter () ;

    if (m_State != State_Stopped) {
        hr = E_UNEXPECTED ;
    }
    else if (IsMulticastIP (ulIP)) {

        m_ulIP      = ulIP ;
        m_usPort    = usPort ;

        hr = S_OK ;
    }
    else {
        hr = E_INVALIDARG ;
    }

    UnlockFilter () ;

    return hr ;
}

STDMETHODIMP
CNetworkReceiverFilter::GetMulticastGroup (
    OUT ULONG *     pIP,
    OUT USHORT  *   pPort
    )
{
    HRESULT hr ;

    LockFilter () ;

    if (pIP &&
        pPort) {

        (* pIP)     = m_ulIP ;
        (* pPort)   = m_usPort ;

        hr = S_OK ;
    }
    else {
        hr = E_INVALIDARG ;
    }

    UnlockFilter () ;

    return hr ;
}

STDMETHODIMP
CNetworkReceiverFilter::GetClassID (
    OUT CLSID * pCLSID
    )
{
    (* pCLSID) = CLSID_DSNetReceive ;
    return S_OK ;
}

HRESULT
CNetworkReceiverFilter::WriteToStream (
    IN  IStream *   pIStream
    )
{
    HRESULT hr ;

    LockFilter () ;

    hr = pIStream -> Write ((BYTE *) & m_ulIP, sizeof m_ulIP, NULL) ;
    if (SUCCEEDED (hr)) {
        hr = pIStream -> Write ((BYTE *) & m_usPort, sizeof m_usPort, NULL) ;
        if (SUCCEEDED (hr)) {
            hr = pIStream -> Write ((BYTE *) & m_ulNIC, sizeof m_ulNIC, NULL) ;
        }
    }

    UnlockFilter () ;

    return hr ;
}

HRESULT
CNetworkReceiverFilter::ReadFromStream (
    IN  IStream *   pIStream
    )
{
    HRESULT hr ;

    LockFilter () ;

    hr = pIStream -> Read ((BYTE *) & m_ulIP, sizeof m_ulIP, NULL) ;
    if (SUCCEEDED (hr)) {
        hr = pIStream -> Read ((BYTE *) & m_usPort, sizeof m_usPort, NULL) ;
        if (SUCCEEDED (hr)) {
            hr = pIStream -> Read ((BYTE *) & m_ulNIC, sizeof m_ulNIC, NULL) ;
        }
    }

    UnlockFilter () ;

    return hr ;
}

void
CNetworkReceiverFilter::ProcessBuffer (
    IN  CBuffer *   pBuffer
    )
{
    HRESULT         hr ;
    IMediaSample2 * pIMediaSample ;

    ASSERT (pBuffer) ;

    hr = m_pMSPool -> GetMediaSampleSynchronous (
                            pBuffer,
                            pBuffer -> GetBuffer (),
                            pBuffer -> GetPayloadLength (),
                            & pIMediaSample
                            ) ;
    if (SUCCEEDED (hr)) {
        ASSERT (pIMediaSample) ;
        m_pOutput -> Deliver (pIMediaSample) ;
        pIMediaSample -> Release () ;
    }
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美综合在线| 成人一区二区三区中文字幕| 91国偷自产一区二区三区成为亚洲经典 | 精品在线免费观看| 日韩一区二区免费高清| 久久er精品视频| 2019国产精品| 成人亚洲一区二区一| 亚洲乱码国产乱码精品精98午夜| 91社区在线播放| 五月激情六月综合| 精品国产乱码久久久久久浪潮 | 亚洲黄色小视频| 欧美亚洲国产一卡| voyeur盗摄精品| 亚洲天天做日日做天天谢日日欢 | 国产一区二三区| 中文字幕免费不卡| 色狠狠综合天天综合综合| 爽爽淫人综合网网站| 欧美成人午夜电影| 欧美一区二区成人6969| 久久精品国产亚洲5555| 国产精品日韩精品欧美在线| 在线免费av一区| 国产一区日韩二区欧美三区| 中文字幕视频一区| 日韩一区二区精品在线观看| 国产sm精品调教视频网站| 亚洲一区自拍偷拍| 国产午夜精品理论片a级大结局| 成人的网站免费观看| 亚洲人精品午夜| 欧美伊人久久久久久午夜久久久久| 亚洲国产美女搞黄色| 久久美女艺术照精彩视频福利播放| av中文字幕亚洲| 日本伊人午夜精品| 中文字幕亚洲区| 日韩一级免费观看| 色综合天天性综合| 国产一区福利在线| 婷婷成人综合网| 中文字幕中文字幕中文字幕亚洲无线| 欧美日韩一级片在线观看| 国产盗摄精品一区二区三区在线| 一级日本不卡的影视| 五月天精品一区二区三区| 久久综合国产精品| 欧美理论在线播放| 日本韩国欧美一区| proumb性欧美在线观看| 日本亚洲三级在线| 亚洲高清久久久| 亚洲人成人一区二区在线观看 | 精品久久久久久最新网址| 色综合久久综合| 成人性生交大片免费看视频在线 | 99精品久久免费看蜜臀剧情介绍| 麻豆精品新av中文字幕| 午夜av一区二区| 亚洲精品免费播放| 国产精品理论片| 欧美国产精品中文字幕| 精品sm在线观看| 欧美岛国在线观看| 欧美一区二区在线看| 欧美日韩国产欧美日美国产精品| 99久久伊人精品| 成人精品小蝌蚪| 成人午夜视频网站| 懂色一区二区三区免费观看| 韩国av一区二区三区在线观看| 舔着乳尖日韩一区| 不卡视频免费播放| 国产成人精品一区二区三区网站观看 | 99精品欧美一区二区蜜桃免费| 国产一区久久久| 国产成人精品免费看| 国产精品一区二区久久精品爱涩| 免费一级片91| 久久9热精品视频| 久久精品国产99久久6| 久久精品国产**网站演员| 久久66热偷产精品| 国产精品系列在线观看| 国产麻豆日韩欧美久久| 国产成人精品免费| 色综合夜色一区| 欧美日韩一区二区三区不卡| 91成人在线精品| 91精品国产品国语在线不卡| 日韩一区二区三区观看| 日韩精品一区国产麻豆| 2024国产精品| 中文字幕日韩精品一区| 亚洲在线中文字幕| 蜜桃久久av一区| 成人在线视频一区| 在线精品观看国产| 91精品国产一区二区三区香蕉| 精品国一区二区三区| 国产精品三级av| 婷婷综合另类小说色区| 国产在线视频一区二区| 暴力调教一区二区三区| 欧美天天综合网| 欧美videossexotv100| 国产精品午夜电影| 亚洲第一搞黄网站| 国产风韵犹存在线视精品| 99久久99久久综合| 欧美一级高清片在线观看| 欧美高清在线精品一区| 亚洲国产另类精品专区| 麻豆国产欧美日韩综合精品二区| 免费看欧美女人艹b| 成人性视频网站| 69久久99精品久久久久婷婷| 国产午夜一区二区三区| 亚洲一区二区免费视频| 国产精品1区2区| 在线精品亚洲一区二区不卡| 欧美在线视频全部完| 精品日韩欧美在线| 亚洲少妇最新在线视频| 麻豆久久久久久| 91美女片黄在线观看| 555www色欧美视频| 国产精品久久久久一区二区三区 | 三级在线观看一区二区| 中文字幕一区免费在线观看| 亚洲成人精品一区| 国产91精品入口| 欧美日韩激情一区二区三区| 久久综合久久鬼色中文字| 亚洲精品国久久99热| 国产91丝袜在线播放九色| 中文字幕一区不卡| 日本在线观看不卡视频| 95精品视频在线| 国产欧美精品一区二区色综合 | 久久久久久日产精品| 久久久久久久久久久久久久久99| 国产jizzjizz一区二区| 久久99国产精品尤物| 欧洲精品中文字幕| 亚洲三级在线免费| 国产精品996| 精品国产成人在线影院| 午夜精品久久久久久| 一本大道av伊人久久综合| 国产精品天天摸av网| 韩国女主播成人在线| 日韩欧美中文字幕一区| 五月综合激情网| 欧美四级电影网| 一区二区在线观看免费| 91网站最新地址| 国产精品久久久久影院亚瑟 | 久草在线在线精品观看| 欧美日韩第一区日日骚| 亚洲国产成人porn| 欧美亚洲国产怡红院影院| 亚洲品质自拍视频| 国产一区三区三区| 精品国产一区二区三区久久影院| 丝瓜av网站精品一区二区| 欧亚洲嫩模精品一区三区| 1区2区3区欧美| 91蜜桃免费观看视频| 中文字幕制服丝袜成人av| av一二三不卡影片| 国产精品国产三级国产普通话99 | 精品日产卡一卡二卡麻豆| 蜜桃av一区二区| 亚洲精品一线二线三线无人区| 久久精品国产一区二区三区免费看 | 亚洲第一久久影院| 欧美专区在线观看一区| 亚洲综合在线电影| 欧美在线免费观看亚洲| 婷婷激情综合网| 精品久久久久一区| 国产成人av资源| 亚洲色大成网站www久久九九| 一区二区三区久久| 欧美国产日韩一二三区| 国产高清精品网站| 中文字幕av一区二区三区高| 成人天堂资源www在线| 日韩码欧中文字| 欧美在线一区二区| 日韩高清在线观看| 2020国产精品| 97国产精品videossex| 亚洲一区二区三区在线看| 91精品国产高清一区二区三区 | 91在线porny国产在线看| 怡红院av一区二区三区|