Ведение журнала ошибок DES: пример кода
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]
[Этот API не поддерживается и может быть изменен или недоступен в будущем.]
В следующем примере кода представлено полное консольное приложение, которое загружает и просматривает XML-файл проекта DirectShow Editing Services , используя класс ведения журнала ошибок, описанный в этом разделе. (См. статью Об ошибках ведения журнала.) Имя файла проекта жестко закодировано в приложении.
Чтобы сделать код короче, консольное приложение использует интеллектуальные указатели 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();
}
Связанные темы