Example #1
0
int DoEnumFilter() {
	HRESULT hr;
	IFilterMapper   *pMapper = NULL;
	IEnumRegFilters *pEnum   = NULL;
	IBaseFilter * pFilter = NULL;
	hr = CoCreateInstance(CLSID_FilterMapper, NULL, CLSCTX_INPROC, IID_IFilterMapper, (void **)&pMapper);
	if(FAILED(hr)){
		return 0;
	}
	hr = pMapper->EnumMatchingFilters(&pEnum,0,FALSE,GUID_NULL,GUID_NULL,FALSE,FALSE,GUID_NULL,GUID_NULL);

	REGFILTER *pRF = NULL;
	ULONG cFetched;
	while (pEnum->Next(1, &pRF, &cFetched) == S_OK) {
		SendMessage(g_hList,LB_ADDSTRING,0,(LPARAM)pRF->Name);
		CoTaskMemFree(pRF);
		
		hr = CoCreateInstance(pRF->Clsid, NULL, CLSCTX_INPROC
			, IID_IBaseFilter, (void **)&pFilter);
		SendMessage(g_hList,LB_ADDSTRING,0,(LPARAM)TEXT(" [IN]"));
		EnumPins(pFilter,PINDIR_INPUT);
		SendMessage(g_hList,LB_ADDSTRING,0,(LPARAM)TEXT(" [OUT]"));
		EnumPins(pFilter,PINDIR_OUTPUT);
		SAFE_RELEASE(pFilter);
	}
	// capture device
	HANDLE handle = NULL;
	DEVMGR_DEVICE_INFORMATION di={sizeof(di)};
	GUID guidCamera = { 0xCB998A05, 0x122C, 0x4166, 0x84, 0x6A,0x93, 0x3E, 0x4D, 0x7E, 0x3C, 0x86 };
	handle = FindFirstDevice( DeviceSearchByGuid, &guidCamera, &di );
	if(( handle == NULL ) || ( di.hDevice == NULL )) {
	}else{
		SendMessage(g_hList,LB_ADDSTRING,0,(LPARAM)di.szLegacyName );
	}
	FindClose( handle );
	return 1;
}
Example #2
0
    dsnerror_t CreateGraph(bool buildgraph=false)
    {
        if (!EnumPins())
            return DSN_FAIL_ENUM;

        if (!SetInputType())
            return DSN_INPUT_NOTACCEPTED;

        m_pSFilter = new CSenderFilter();
        m_pOurInput = (CSenderPin *) m_pSFilter->GetPin(0);
        /* setup Source filename if someone wants to known it (i.e. ffdshow) */
        m_pSFilter->Load(m_sfname, NULL);
        m_pSFilter->AddRef();

        m_pRFilter = new CRenderFilter();
        m_pOurOutput = (CRenderPin *) m_pRFilter->GetPin(0);
        m_pRFilter->AddRef();

        if (buildgraph)
        {
            DSN_CHECK(CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **) &m_pGraph), DSN_FAIL_GRAPH);
            DSN_CHECK(DSVideoCodec::AddToRot(m_pGraph, &m_dwRegister), DSN_FAIL_GRAPH);
            DSN_CHECK(m_pGraph->QueryInterface(IID_IMediaControl, (void **) &m_pMC), DSN_FAIL_GRAPH);

            m_pGraph->SetLogFile((DWORD_PTR) GetStdHandle(STD_OUTPUT_HANDLE));
            DSN_CHECK(m_pGraph->AddFilter(m_pFilter, L"Binary Codec"), (m_pInputPin = m_pOutputPin = NULL, DSN_FAIL_GRAPH));
            DSN_CHECK(m_pGraph->AddFilter(m_pSFilter, L"DS Sender"), DSN_FAIL_GRAPH);
            DSN_CHECK(m_pGraph->AddFilter(m_pRFilter, L"DS Render"), DSN_FAIL_GRAPH);
            // Connect our output pin to codec input pin otherwise QueryAccept on the codec output pin will fail
            DSN_CHECK(m_pGraph->ConnectDirect(m_pOurInput, m_pInputPin, &m_pOurType), DSN_INPUT_CONNFAILED);
        }
        else
        {
            m_res = m_pFilter->JoinFilterGraph((IFilterGraph *) m_pSFilter, L"DSNative Graph");
            /* same of above */
            DSN_CHECK(m_pInputPin->ReceiveConnection(m_pOurInput, &m_pOurType), DSN_INPUT_CONNFAILED);
        }

        SetOutputType();

        if (buildgraph)
            DSN_CHECK(m_pGraph->ConnectDirect(m_pOurOutput, m_pOutputPin, &m_pDestType), DSN_OUTPUT_CONNFAILED);
        else
            DSN_CHECK(m_pOutputPin->ReceiveConnection(m_pOurOutput, &m_pDestType), DSN_OUTPUT_CONNFAILED);

        m_pOurOutput->SetFrameSize(m_vi.bmiHeader.biBitCount * m_vi.bmiHeader.biWidth * (m_vi.bmiHeader.biHeight + 2) / 8);
        return DSN_OK;
    }