• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            ts,ps,mpeg2 decoder and analysis

            mepg 2, iptv, stream parse,mov,mxf,gxf,ac3,aac

              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              21 隨筆 :: 0 文章 :: 54 評(píng)論 :: 0 Trackbacks


            directshow,filter: 什么時(shí)候調(diào)用 m_pGraphBuilder->RemoveFilter

            code如下: 如果用下列函數(shù),調(diào)用系統(tǒng)自帶的File Source,就無(wú)需 調(diào)用 m_pGraph->RemoveFilter,只要

            調(diào)用 pFIFileSource->release();就可以了。

            但是,如果不是系統(tǒng)的,必需用m_pGraphBuilder->RemoveFilter(),否則,filter的析構(gòu)函數(shù)不會(huì)被調(diào)

            用。


            if (SUCCEEDED(hr)) 
              hr = CoCreateInstance(CLSID_AsyncSample, NULL, CLSCTX_INPROC,
                    IID_IBaseFilter, (LPVOID *)

            &pFIFileSource) ;
             if (SUCCEEDED(hr))
              hr = m_pGraphBuilder->AddFilter(pFIFileSource,L"Sample File Source");

             IFileSourceFilter *pAVIFileSource = NULL;

             if (SUCCEEDED(hr)) 
              hr = pFIFileSource->QueryInterface(IID_IFileSourceFilter,(void **)

            &pAVIFileSource);


            同樣:
            if (SUCCEEDED(hr)) 
              hr = CoCreateInstance(CLSID_MYSocketSource, NULL, CLSCTX_INPROC,
                    IID_IBaseFilter, (LPVOID *)

            &pFIFileSource) ;
             if (SUCCEEDED(hr))
              hr = m_pGraphBuilder->AddFilter(pFIFileSource,L"MY Socket Source");


            ...
            最后必需用m_pGraphBuilder->RemoveFilter(),否則,filter的析構(gòu)函數(shù)不會(huì)被調(diào)用。否則有很大的內(nèi)

            存泄露。

            不知道是什么原因:

            因?yàn)?nbsp; www.directshow.cn: 這個(gè)網(wǎng)址不行了,所以貼出下列code,請(qǐng)大家分享。


            HRESULT ConnectPins( IGraphBuilder* pGraphBuilder,
                 IBaseFilter* pOutput,
                 IBaseFilter* pInput,
                 int nOutIndex,
                 int nInIndex)
            {
             HRESULT hr = NOERROR;
             ULONG cFetched = 0;
             IEnumPins* pEnumPins = 0;
             IPin* pPinOutput = 0;
             IPin* pPinInput = 0;

             //enum output filter pins.
             hr = pOutput->EnumPins(&pEnumPins);
             if(FAILED(hr))
             {
              return hr;
             }
             //if the pin to connect is not the first one, we must skip nOutIndex-1 pins.
             if(nOutIndex>1)
             {
              hr = pEnumPins->Skip(nOutIndex-1);
              if(FAILED(hr))
              {
               pEnumPins->Release();
               return hr;
              }
             }
             //now we can get the output pin we wanted.
             hr = pEnumPins->Next(1,&pPinOutput,&cFetched);
             if(FAILED(hr))
             {
              pEnumPins->Release();
              return hr;
             }
             pEnumPins->Release();

             //enum input filter pins.
             hr = pInput->EnumPins(&pEnumPins);
             if(FAILED(hr))
             {
              pPinOutput->Release();
              return hr;
             }
             //if input pin is not the first to connect, we must skip nInIndex-1 pins.
             if(nInIndex>1)
             {
              hr = pEnumPins->Skip(nInIndex-1);
              if( FAILED(hr) )
              {
               pPinOutput->Release();
               pEnumPins->Release();
               return hr;
              }
             }
             //now we can get the input pin we wanted.
             hr = pEnumPins->Next(1,&pPinInput,&cFetched);
             if(FAILED(hr))
             {
              pPinOutput->Release();
              pEnumPins->Release();
              return hr;
             }
             pEnumPins->Release();

             //now connect from output pin to input pin.
             hr = pGraphBuilder->Connect(pPinOutput,pPinInput);
             pPinOutput->Release();
             pPinInput->Release();
             return hr;
            }
            IPin* xMyFindPin(IBaseFilter *pFilter, const WCHAR achName[])
            {
             BOOL       bFound = FALSE;
             IEnumPins  *pEnum;
             IPin       *pPin;
             PIN_INFO pininfo;

             if(pFilter==NULL)
              return NULL;
             pFilter->EnumPins(&pEnum);
             while(pEnum->Next(1, &pPin, 0) == S_OK)
             {
              pPin->QueryPinInfo(&pininfo);
              pininfo.pFilter->Release();
              if (bFound = (0 == wcscmp(pininfo.achName,achName)))
               break;
              pPin->Release();
             }
             pEnum->Release();
             return (bFound ? pPin : 0); 
            }
            static const GUID  CLSID_NULL_USER1=
            {0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

            HRESULT GetUnconnectedPin( IBaseFilter *pFilter,
                    PIN_DIRECTION PinDir,
                    IPin **ppPin,GUID gMajortype,WCHAR *achName)
            {
             *ppPin = 0;
             IEnumPins *pEnum = 0;
             IPin *pPin = 0;
             HRESULT hr = pFilter->EnumPins( &pEnum );
             if( FAILED( hr ) )
             {
              return hr;
             }
             while( pEnum->Next( 1, &pPin, NULL ) == S_OK )
             {
              PIN_DIRECTION ThisPinDir;
              pPin->QueryDirection( &ThisPinDir );
              if( ThisPinDir == PinDir )
              {
               IPin *pTmp = 0;
               hr = pPin->ConnectedTo( &pTmp );
               if( SUCCEEDED( hr ) )
               {
                pTmp->Release( );
               }
               else
               {    
                PIN_INFO pininfo;
                pPin->QueryPinInfo(&pininfo);
                pininfo.pFilter->Release();
                if(achName && (wcslen(achName)>= wcslen(pininfo.achName)))
                 wcscpy(achName,pininfo.achName);

                if(gMajortype==CLSID_NULL_USER1)
                {
                 pEnum->Release( );
                 *ppPin = pPin;
                 return S_OK;
                }
                else
                {
                 IEnumMediaTypes* pTypeEnum;
                 hr = pPin->EnumMediaTypes (&pTypeEnum);

                 hr =pTypeEnum->Reset();
                 AM_MEDIA_TYPE* pMediaType;
                 ULONG            ul ;

                 do
                 {
                  hr = pTypeEnum->Next(1, &pMediaType, &ul) ;
                  if (FAILED(hr) || 0 == ul)
                  {
                   pTypeEnum->Release();
                   //pEnum->Release( );
                   if(pTmp)
                    pTmp->Release();
                   break ;
                  }

                  if (pMediaType->majortype == gMajortype)
                  // ||       pMediaType->subtype == MEDIASUBTYPE_DVSD)
                  { pTypeEnum->Release();
                   pEnum->Release( );
                   *ppPin = pPin;
                   return S_OK;
                  }
                 }while (1) ;   

                }
               }
               if(pTmp)
                pTmp->Release();
              }
              pPin->Release( );
             }
             pEnum->Release( );

             return E_FAIL;
            }



            TS,MPEG2,dvbc專家 2009-10-21 13:36 發(fā)表評(píng)論

            文章來(lái)源:http://www.cnitblog.com/dvb-dvb/archive/2009/10/21/directshow.html
            posted on 2009-10-21 13:36 TS,MPEG2,dvbc專家 閱讀(1981) 評(píng)論(6)  編輯 收藏 引用

            評(píng)論

            # re: [導(dǎo)入]directshow,filter: 什么時(shí)候調(diào)用 m_pGraphBuilder->RemoveFilter 2009-10-23 12:16 dvbcn
            test  回復(fù)  更多評(píng)論
              

            # re: directshow,filter: 什么時(shí)候調(diào)用 m_pGraphBuilder->RemoveFilter 2009-10-23 13:37 126
            不太明白  回復(fù)  更多評(píng)論
              

            # re: directshow,filter: 什么時(shí)候調(diào)用 m_pGraphBuilder->RemoveFilter 2009-10-23 13:38 126.com
            不是太懂  回復(fù)  更多評(píng)論
              

            # re: directshow,filter: 什么時(shí)候調(diào)用 m_pGraphBuilder->RemoveFilter 2009-10-28 13:32 coloriy
            哦也不太懂  回復(fù)  更多評(píng)論
              

            # re: directshow,filter: 什么時(shí)候調(diào)用 m_pGraphBuilder->RemoveFilter 2009-10-28 17:26 TS,MPEG2,dvbc專家
            感覺(jué)大家都不懂,我是不是學(xué)了 “回字有四種寫(xiě)法” ,這種無(wú)用的知識(shí)了,唉!  回復(fù)  更多評(píng)論
              

            # re: directshow,filter: 什么時(shí)候調(diào)用 m_pGraphBuilder->RemoveFilter 2010-11-03 14:51 lxy
            我也遇到了這個(gè)問(wèn)題,跟蹤調(diào)試了好久,調(diào)用connect之后就多出好多引用,調(diào)用pGraph->release()釋放不全,必須手動(dòng)調(diào)用pGraph->removefilter()  回復(fù)  更多評(píng)論
              


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            ts,ps,mpeg2 decoder and analysis,ts分析.
            国产精品久久新婚兰兰| 国产精品一区二区久久| 合区精品久久久中文字幕一区| 国内精品伊人久久久久影院对白| 久久精品国产福利国产琪琪| 欧美精品乱码99久久蜜桃| 亚洲AV日韩精品久久久久久久| 久久夜色精品国产欧美乱| 久久青青草原国产精品免费| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区| 欧美日韩成人精品久久久免费看| 久久久久久国产a免费观看黄色大片| 亚洲欧美日韩中文久久| 99久久国产亚洲高清观看2024| 亚洲国产日韩欧美久久| 久久亚洲私人国产精品vA | 97热久久免费频精品99| 国产伊人久久| 欧美一区二区精品久久| 伊人久久大香线蕉av一区| 久久精品国产一区二区三区不卡 | 婷婷久久综合九色综合绿巨人| 久久妇女高潮几次MBA| 国产高潮国产高潮久久久91| 婷婷久久久亚洲欧洲日产国码AV | 精品久久久久国产免费 | 99久久国语露脸精品国产| 欧美日韩中文字幕久久久不卡| 久久超乳爆乳中文字幕| 一本色道久久99一综合| 午夜精品久久久久成人| 国产成人久久久精品二区三区 | 欧美亚洲国产精品久久| 国产成人综合久久精品尤物| 久久精品国产亚洲精品2020| 亚洲精品无码久久千人斩| 一本一本久久aa综合精品| 99久久精品免费看国产一区二区三区 | 99re这里只有精品热久久| 少妇久久久久久久久久| 无码人妻精品一区二区三区久久|