Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - 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; } //--------------------------------------------------------------------------- Просмотров: 4867
|