DES 오류 로깅: 예제 코드
[DirectShow 이 페이지와 연결된 기능은 레거시 기능입니다. MediaPlayer, IMFMediaEngine, Media Foundation 오디오/비디오 캡처대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11에 최적화되었습니다. Microsoft는 가능하면 새로운 코드에서 MediaPlayer, IMFMediaEngine 및 Audio/Video Capture를 DirectShow대신 Media Foundation 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
[이 API는 지원되지 않으며 나중에 변경되거나 사용할 수 없습니다.]
다음 샘플 코드는 이 섹션에 설명된 오류 로깅 클래스를 사용하여 DirectShow Editing Services XML 프로젝트 파일을 로드하고 미리 보는 전체 콘솔 애플리케이션을 제공합니다. (로깅 오류참조하세요.) 프로젝트 파일의 이름은 애플리케이션에 하드 코딩됩니다.
코드를 더 짧게 만들기 위해 콘솔 애플리케이션은 ATL 스마트 포인터를 사용하여 QueryInterface 및 Release호출할 필요가 없습니다. 원하는 경우 프로젝트 로드 및 미리 보기를샘플 애플리케이션을 수정할 수 있습니다. 이전 섹션에 표시된 코드를 추가하기만 하면 될 수 있습니다.
#include <atlbase.h>
#include <dshow.h>
#include <qedit.h>
#include <stdio.h>
// Declare error logging class.
class CErrReporter;
// (The implementation of CErrReporter was given previously.)
void __cdecl main(void)
{
HRESULT hr = CoInitialize(NULL);
if (FAILED(hr))
{
// Error handling is omitted for clarity.
}
{ // Scope for smart pointers.
CComPtr<IAMTimeline> pTL;
CComPtr<IRenderEngine> pRenderEngine;
CComPtr<IXml2Dex> pXML;
CComPtr<IGraphBuilder> pGraph;
hr = CoCreateInstance(CLSID_AMTimeline, NULL, CLSCTX_INPROC_SERVER,
IID_IAMTimeline, (void**) &pTL);
hr = CoCreateInstance(CLSID_Xml2Dex, NULL, CLSCTX_INPROC_SERVER,
IID_IXml2Dex, (void**) &pXML);
hr = CoCreateInstance(CLSID_RenderEngine, NULL, CLSCTX_INPROC_SERVER,
IID_IRenderEngine, (void**) &pRenderEngine);
// Set the error log.
CComQIPtr<IAMSetErrorLog, &IID_IAMSetErrorLog> pSetLog(pTL);
if (pSetLog)
{
IAMErrorLog *pLog = new CErrReporter;
pSetLog->put_ErrorLog(pLog);
}
// Load and preview the project.
CComBSTR bstrFile(OLESTR("C:\\example.xtl"));
hr = pXML->ReadXMLFile(pTL, bstrFile);
if (SUCCEEDED(hr))
{
hr = pRenderEngine->SetTimelineObject(pTL);
hr = pRenderEngine->ConnectFrontEnd( );
hr = pRenderEngine->RenderOutputPins( );
hr = pRenderEngine->GetFilterGraph(&pGraph);
CComQIPtr<IMediaControl, &IID_IMediaControl> pControl(pGraph);
CComQIPtr<IMediaEvent, &IID_IMediaEvent> pEvent(pGraph);
pControl->Run();
long evCode;
hr = pEvent->WaitForCompletion(INFINITE, &evCode);
pControl->Stop();
}
// Clean up.
pRenderEngine->ScrapIt();
}
CoUninitialize();
}
관련 항목