Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - DirectShow - Пример программы на языке C++01 мая 2011Оглавление: 1. DirectShow 2. История 3. Возможности 4. Пример программы на языке C++ 5. Критика Представленный ниже пример программы воспроизводит видеофайл формата AVI. Это очень простой пример, состоящий всего из одной функции main, но наглядно показывающий способ использования объектов DirectShow. В данном случае, это менеджер графа-фильтров, интерфейс управления менеджером и интерфейс передачи сообщений. Менеджер графа-фильтров сам создаёт набор необходимых фильтров при загрузке файла. А при помощи интерфейса управления файл запускается на воспроизведение, при завершении воспроизведения останавливается.
//---------------------------------------------------------------------------
#include <stdio.h>
#include <dshow.h>
//---------------------------------------------------------------------------
char * pcFileName = "test.avi";
//---------------------------------------------------------------------------
int main
{
IGraphBuilder * pGraph; //Интерфейс менеджера графа-фильтров
IMediaControl * pControl; //Интерфейс управления
IMediaEvent * pEvent; //Интерфейс сообщений
//Инициализация библиотеки COM
HRESULT hr = CoInitializeEx;
if)
{
//Создание менеджера графа-фильтров
hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, &pGraph);
if)
{
//Получение интерфейса управления
hr = pGraph->QueryInterface&pControl);
if)
{
//Получение интерфейса сообщений
hr = pGraph->QueryInterface&pEvent);
if)
{
//Загрузка файла
WCHAR wFileName;
MultiByteToWideChar;
hr = pGraph->RenderFilewFileName, NULL);
//Для не Unicode
//hr = pGraph->RenderFilepcFileName, NULL);
if)
{
//Запуск воспроизведения
hr = pControl->Run;
if)
{
//В реальном приложении INFINITE лучше не использовать
long evCode;
pEvent->WaitForCompletion;
}
//Остановка графа-фильтров
hr = pControl->Stop;
}
}
else
{
printf;
}
}
else
{
printf;
}
}
else
{
printf;
}
//Освобождаем ресурсы
if pControl->Release;
if pEvent->Release;
if pGraph->Release;
CoUninitialize;
}
else
{
printf;
}
return hr;
}
//---------------------------------------------------------------------------
Просмотров: 5524
|