HRESULT Cvp::RecordPlay(CString szFile)
{
if(isStop!=m_status) Stop();
HRESULT hr;
CHECK_ERROR( GetInterfaces(),"GetInterfaces failed." );
CHECK_ERROR( CoCreateInstance (CLSID_CaptureGraphBuilder2 , NULL, CLSCTX_INPROC,
IID_ICaptureGraphBuilder2, (void **) &m_pC) ,"CoCreateInstan ICaptureGraphBuilder2 failed:");
CHECK_ERROR( m_pC->SetFiltergraph(m_pG),"Failed to set capture filter graph.");
hr = FindCaptureDevice(&m_pBF);
if (FAILED(hr))
return hr;
if(m_pBF) hr=m_pG->AddFilter(m_pBF,L"Video Capture");
if(hr!=NOERROR)
{
MessageBox(m_hWnd,"Cannot add vidcap to filtergraph./r/n/r/n"
"If you have a working video capture device, please make sure/r/n"
"that it is connected and is not being used by another application./r/n"
"The application will now close.","Error",MB_OK);
return hr;
}
IBaseFilter* pASFWriter = 0;
CHECK_ERROR( m_pC->SetOutputFileName(&MEDIASUBTYPE_Avi,CA2W(szFile),&pASFWriter,NULL),"Failed to setOutputFile");
//connect source filter with render filter
CHECK_ERROR( m_pC->RenderStream (&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video,m_pBF, NULL, NULL),
"Couldn't render the video capture stream./r/n"
"The capture device may already be in use by another application./r/n"
"The sample will now close.");
CHECK_ERROR( m_pC->RenderStream (&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,m_pBF, NULL, pASFWriter),
"Couldn't render the video capture stream./r/n"
"The capture device may already be in use by another application./r/n"
"The sample will now close.");
HELPER_RELEASE(m_pBF);
DisplayVideoWin();
CHECK_ERROR(m_pM->Run(),"Failed to run:");
m_status=isRecord;
return hr;
}