Пример #1
0
    void ReleaseGraph(void)
    {
        if (m_pMC) m_res = m_pMC->Stop();
        else if (m_pFilter)
            m_res = m_pFilter->Stop();

        if (m_pGraph)
        {
            if (m_pFilter)
            {
                ASSERT(m_pSFilter);
                ASSERT(m_pRFilter);
                m_res = m_pGraph->RemoveFilter(m_pFilter);
                m_res = m_pGraph->RemoveFilter(m_pSFilter);
                m_res = m_pGraph->RemoveFilter(m_pRFilter);
            }
            RemoveFromRot(m_dwRegister);
        }
        else
        {
            if (m_pInputPin) m_res = m_pInputPin->Disconnect();
            if (m_pOutputPin) m_res = m_pOutputPin->Disconnect();
            if (m_pFilter) m_res = m_pFilter->JoinFilterGraph(NULL, NULL);

            if (m_pOurInput) m_res = m_pOurOutput->Disconnect();
            if (m_pOurOutput) m_res = m_pOurOutput->Disconnect();
        }

        if (m_pImp) m_pImp->Release();
        if (m_pFilter) m_res = m_pFilter->Release();
        if (m_pSFilter) m_res = m_pSFilter->Release();
        if (m_pRFilter) m_res = m_pRFilter->Release();
    }
Пример #2
0
void PromptForGraph(IGraphBuilder* pGraph, _TCHAR* pszGraphType)
{

	DWORD dwGraphRegister = 0;
	AddToRot(pGraph, &dwGraphRegister);

	_TCHAR szMsg[1024];
	_tcscpy(szMsg, _T("You can connect to the "));
	_tcscat(szMsg, pszGraphType);
	_tcscat(szMsg, _T(" Graph right now. This is NOT an error."));

	MessageBox(::GetDesktopWindow(), szMsg, 
			   _T("Developer information"),
				MB_ICONINFORMATION|MB_OK|
				MB_SETFOREGROUND|MB_SYSTEMMODAL);

	RemoveFromRot(dwGraphRegister);
}
Пример #3
0
// Function name	: CVMR9Graph::BuildFilterGraph
// Description	    : construct the filter graph
// Return type		: BOOL 
BOOL CVMR9Graph::BuildFilterGraph(bool withSound)
{
	HRESULT hr;

	ReleaseAllInterfaces();
	RemoveFromRot();
	
	// BUILD the filter graph
	hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IUnknown, (void**) &m_pGraphUnknown);
	if (FAILED(hr)) {
		ReportError("Could not build the graph", hr);
		return FALSE;
	}
	// QUERY the filter graph interfaces
	hr = m_pGraphUnknown->QueryInterface(IID_IGraphBuilder, (void**) &m_pGraphBuilder);
	hr = m_pGraphUnknown->QueryInterface(IID_IFilterGraph, (void**) &m_pFilterGraph);
	hr = m_pGraphUnknown->QueryInterface(IID_IFilterGraph2, (void**) &m_pFilterGraph2);
	hr = m_pGraphUnknown->QueryInterface(IID_IMediaControl, (void**) & m_pMediaControl);
  hr = m_pGraphUnknown->QueryInterface(IID_IMediaSeeking, (void**) & m_pMediaSeeking);
	//hr = m_pGraphUnknown->QueryInterface(IID_IMediaEvent, (void**) &m_pMediaEvent);
	//hr = m_pGraphUnknown->QueryInterface(IID_IMediaEventEx, (void**) &m_pMediaEventEx);

/*	// SET the graph state window callback
	if (m_pMediaEventEx != NULL) {
		m_pMediaEventEx->SetNotifyWindow((OAHWND)m_hMediaWindow, WM_MEDIA_NOTIF, NULL);
    //m_pMediaEventEx->SetNotifyWindow(NULL, NULL, NULL);
	}*/

  if (withSound)
	  BuildSoundRenderer();

// Don't known what's wrong... but RenderEx crash when playing whith graphedit build 021204 ...
  //do we need this??
	//AddToRot(m_pGraphUnknown);

	return BuildVMR();
}
Пример #4
0
void CMediaViewer::CloseViewer(void)
{
	CTryBlockLock Lock(&m_DecoderLock);
	Lock.TryLock(LOCK_TIMEOUT);

	/*
	if (!m_bInit)
		return;
	*/

	if (m_pFilterGraph) {
		Trace(TEXT("フィルタグラフを停止しています..."));
		m_pFilterGraph->Abort();
		Stop();
	}

	Trace(TEXT("COMインスタンスを解放しています..."));

	// COMインスタンスを開放する
	if (m_pVideoRenderer!=NULL) {
		m_pVideoRenderer->Finalize();
	}

	if (m_pImageMixer!=NULL) {
		delete m_pImageMixer;
		m_pImageMixer=NULL;
	}

	if (m_pszVideoDecoderName!=NULL) {
		delete [] m_pszVideoDecoderName;
		m_pszVideoDecoderName=NULL;
	}

	SAFE_RELEASE(m_pVideoDecoderFilter);

	SAFE_RELEASE(m_pAudioDecoder);

	SAFE_RELEASE(m_pAudioRenderer);

#ifndef BONTSENGINE_H264_SUPPORT
	SAFE_RELEASE(m_pMpeg2Parser);
#else
	SAFE_RELEASE(m_pH264Parser);
#endif

	SAFE_RELEASE(m_pMp2DemuxAudioMap);
	SAFE_RELEASE(m_pMp2DemuxVideoMap);
	SAFE_RELEASE(m_pMp2DemuxFilter);

	SAFE_RELEASE(m_pSrcFilter);

	SAFE_RELEASE(m_pAudioFilter);

	SAFE_RELEASE(m_pMediaControl);

#ifdef _DEBUG
	if(m_dwRegister!=0){
		RemoveFromRot(m_dwRegister);
		m_dwRegister = 0;
	}
#endif

	if (m_pFilterGraph) {
		Trace(TEXT("フィルタグラフを解放しています..."));
#ifdef _DEBUG
		TRACE(TEXT("FilterGraph RefCount = %d\n"),DirectShowUtil::GetRefCount(m_pFilterGraph));
#endif
		SAFE_RELEASE(m_pFilterGraph);
	}

	if (m_pVideoRenderer!=NULL) {
		delete m_pVideoRenderer;
		m_pVideoRenderer=NULL;
	}

	if (m_pszAudioRendererName!=NULL) {
		delete [] m_pszAudioRendererName;
		m_pszAudioRendererName=NULL;
	}

	m_bInit=false;
}